Java – JDBC – Spring JDBC

简介

Spring JDBC是Spring 框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC开发

 

导入包

Spring JDBC 需要导入 5个包,分别如下

spring-tx-6.0.3
commons-logging-1.2
spring-jdbc-6.0.3
spring-beans-6.0.3
spring-core-6.0.3
来源:默认网盘
来源:默认网盘
来源:默认网盘
来源:默认网盘
来源:默认网盘

 

创建 JDBCTemplate 对象

JDBCTemplate 对象用于执行sql语句的对象,使用完不需要释放资源,在底层JDBCTemplate 已经帮我们处理好了

JDBCTemplate 需要提供数据源DataSource对象,关于 数据源DataSource对象 可以参考数据库连接池文章,使用C3P0或Druid进行数据源创建。

// 创建一个数据源对象,使用Druid
DataSoruce ds = DruidDataSourceFactory.createDataSource(pro);

// 传入数据源,获得Spring JDBC数据库操作对象
JdbcTemplate template = new JdbcTemplate(ds);

// 执行sql语句
String sql = "update xx set xx=? where xx=?";
template.update(sql,prop1,prop2);

JdbcTemplate 对象支持动态sql语句绑定,所以,update() 方法中

 

第一个参数代表要执行的sql语句

第二个参数代表sql语句中第一个占位符 ? 的数据

第三个参数代表sql语句中第二个占位符 ? 的数据

如些类推……

JdbcTemplate 不需要手动关闭数据源和数据库连接。

 

CURD操作常用方法

int update() : 执行DML语句。增、删、改语句,返回影响行数
Map<T,T> queryForMap() : 查询结果将结果集封装为map集合,把一行记录里的字段名和数据以 (字段名=数据)的形式返回,queryForMap() 只能使用在只有一行结果的查询上
List<Map<T,T>> queryForList() : 查询结果将结果集封装为List集合,返回一个由多个 Map 组成的List集合,每个Map为一行数据
List<T> query() : 查询结果,将结果封装为JavaBean对象,返回一个自定义的带JavaBean的类实例的集合。
T queryForObject() : 查询结果,将结果封装为对象,提供一个规定的类,查询得到后以这个类的类型输出

 

queryForMap()

queryForMap() 方法是把查询到的数据,以Key=Value的形式返回,Key为字段名,Value 为数据,queryForMap() 只能使用在查询结果只有一行数据的情况下,如果查询出来的数据是0或大于1时,会报出异常。

Properties pro = new Properties();
        pro.load(JDBCTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));

// 使用Druid创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
// 把数据源传给 SpringJDBC Template
JdbcTemplate template = new JdbcTemplate(dataSource);
// 创建SQL 语句
String sql = "select * from user where id = ?";
// 传入sql语句,并把第一个 ? 占位符的值设为1
Map<String, Object> result = template.queryForMap(sql, 1);
System.out.println(result);

 

 

queryForList()

queryForList() 方法是把查询到的数据,以Key=Value的形式包装成Map集合,Key为字段名,Value 为数据,一行数据将被包装成一个Map对象,多条数据包装成多个Map对象,并把这些Map对象,存放到List集合中并返回。

        Properties pro = new Properties();
        pro.load(JDBCTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));

        // 使用Druid创建数据源
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
        // 把数据源传给 SpringJDBC Template
        JdbcTemplate template = new JdbcTemplate(dataSource);
        // 创建SQL 语句
        String sql = "select * from user where id = ?";
        // 传入sql语句,并把第一个 ? 占位符的值设为1
        List<Map<String, Object>> mapsResult = template.queryForList(sql, 1);
        for (Map<String, Object> result : mapsResult) {
            System.out.println(result);
        }

 

 

query()

query() 方法是把查询到的数据,以匿名内部类的方式进行遍历,接口名为 RowMapper<T> ()

一行数据遍历一次,多行数据遍历多次,每一次的遍历会提供一个 ResultSet 结果集,用户可以通过创建自定义对象,并把这些查询结果赋给自定义对象实例中,并存到List 集合中

        Properties pro = new Properties();
        pro.load(JDBCTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));

        // 使用Druid创建数据源
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
        // 把数据源传给 SpringJDBC Template
        JdbcTemplate template = new JdbcTemplate(dataSource);
        // 创建SQL 语句
        String sql = "select * from user where id = ?";
        // 传入sql语句,并把第一个 ? 占位符的值设为1
        template.query(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                // 每执行一次,就会传入一行数据的 ResultSet 对象
                return null;
            }
        });
        
        // 支持Labmda ,使用 Labmda 表达式
        template.query(sql,(rs,rowNum) -> null);
        

 

Spring JDBC 中,为了简化遍历带来的各种数据赋值的问题,提供了 BeanPropertyRowMapper<T>(Class c) 方法,对于查询结果的字段名和 JavaBean 中的成员变量相符合的JavaBean类,可以全自动赋值。

        Properties pro = new Properties();
        pro.load(JDBCTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));

        // 使用Druid创建数据源
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
        // 把数据源传给 SpringJDBC Template
        JdbcTemplate template = new JdbcTemplate(dataSource);
        // 创建SQL 语句
        String sql = "select * from user where id = ?";
        // 传入sql语句,并把第一个 ? 占位符的值设为1

        /*
        * 对于使用 new RowMapper 而言,我们依然还是需要遍历每一个字段数据,并手动把数据
        * 赋给对象,这样的操作也是非常麻烦的,所以 JDBCTemplate 提供了
        * BeanPropertyRowMapper 类,如果 JavaBean 类的 get set 方法与查询数据的字段名
        * 一致,比如
        * id => setId
        * username => setUsername
        * 这样对应的字段时,可以使用 BeanPropertyRowMapper 类自动赋值
        * 注意:BeanPropertyRowMapper 在遇到字段数据为 null 时,是不支持赋给基础数据类型的
        * 因为基础数据类型没有 null 
        * null => setAge(int age)  >> 会报异常
        * 所以建议在使用 JavaBean 类进行包装查询数据表中的数据时,应该使用基础数据类型的包装类
        * */
        template.query(sql, new BeanPropertyRowMapper<Student>(Student.class));

queryForObject()

queryForObject() 方法是把查询到的数,通过接收类的类型,并把查询到的数据,以这个类型进行包装转换,并输出指定类型的数据。

        Properties pro = new Properties();
        pro.load(JDBCTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));

        // 使用Druid创建数据源
        DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
        // 把数据源传给 SpringJDBC Template
        JdbcTemplate template = new JdbcTemplate(dataSource);
        // 创建SQL 语句
        String sql = "select count(id) from user";
        // 传入sql语句,并把第一个 ? 占位符的值设为1
        
        // 通过查询出来数据后,并自定义数据为某一类型
        Long aLong = template.queryForObject(sql, Long.class);
        System.out.println(aLong);

 

 

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Java – JDBC – Spring JDBC
Spring JDBC是Spring 框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC开发
<<上一篇
下一篇>>