JdbcTemplate查询(Spring框架中的工具类)

JdbcTemplate是由Spring框架提供的一个工具类,他对Jdbc API提供了很好的封装,可以用来完全替代JDBC API

1、导入包
spring.jar
commons-logging.jar

修改JdbcUtils.java增加getDataSource()

package cn.itcast.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public final class JdbcUtils {

    private static DataSource myDataSource = null;

    private JdbcUtils() {
    }

    static {
        try {
            Properties prop = new Properties();
            InputStream is = JdbcUtils.class.getClassLoader()
                    .getResourceAsStream("dbcpconfig.properties");
            prop.load(is);
            myDataSource = BasicDataSourceFactory.createDataSource(prop); // 屏蔽了创建数据源的过程
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection() throws SQLException {
        // return DriverManager.getConnection(url, user, password);
        return myDataSource.getConnection(); // 取连接
    }

    public static DataSource getDataSource(){
        return myDataSource;
    }

    public static void free(ResultSet rs, Statement st, Connection conn) {
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (st != null)
                    st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null)
                        conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2、使用JdbcTemplate 查询

static User findUser1(String name) {
        JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select id,name,money,birthday from user where name=?";
        Object[] args = new Object[] { name };
        Object user = jdbc.queryForObject(sql, args, new RowMapper() {   //匿名内部类的方式

            public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setMoney(rs.getFloat("money"));
                user.setBirthday(rs.getDate("birthday"));
                return user;
            }
        });
        return (User) user;
    }

3、改进上一步

spring提供了自带的映射器,

static User findUser(String name) {
        JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select id,name,money,birthday from user where name=?";
        Object[] args = new Object[] { name };
        Object user = jdbc.queryForObject(sql, args,new BeanPropertyRowMapper(User.class));//需要一个class的参数,queryForObject方法返回一个结果
        return (User) user;
    }

在这个例子要注意变量的命名:

  • sql语句中的命名与User.class中的命名相同,或
  • 严格遵守数据库(单词之间以下划线分割)与java(驼峰法)的命名规范,spring会自动转换,或
  • 可以使用别名

4、使用JdbcTemplate 查询多个记录

static List<User> findUsers(int id) {
        JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());
        String sql = "select id,name,money,birthday from user where id<?";
        Object[] args = new Object[] { id};
        List<User> users = jdbc.query(sql, args,new BeanPropertyRowMapper<User>(User.class));  //query方法返回的就是一个list
        return  users;
    }

5、其他查询
JdbcTemplate有很多其他的查询方法,如
queryForInt
queryForObejct
queryForList
等等
没有queryForString,如果需要返回String类型,可以用queryForObejct 然后转型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值