Spring JDBC
-
Spring 框架对JDBC的简单封装
- 提供了一个JDBCTemplate对象简化JDBC的开发
-
步骤 :
-
1.导入jar包
-
-
2.创建JdbcTemplate对象 , 依赖于数据源 DataSource (参照数据库连接池中的工具类 , 有一个获取DataSource的方法)
- JdbcTemplate template = new JdbcTemplate(dataSource);
-
3.调用JdbcTemplate的方法来完成CRUD的操作
-
方法有 : 这些都要传一个sql语句 , 后边跟不同的参数
-
①update()
-
update() : //执行DML语句 增 删 改语句
-
②queryForMap()
-
queryForMap() : //将查询结果集封装为Map集合 //注意 : 使用queryForMap()的时候 , 查询的结果只能是一条记录 , 多了会报错 , Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 15); //返回值只是一个Map集合
-
③queryForList()
-
queryForList() : //将插叙结果集封装为List集合 //想要查询多条记录就要使用queryForList()这个方法 //将每一行记录封装为一个Map集合 , 再将这些Map集合封装为一个List集合 List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql); //返回值是一个list集合 , 集合中是一个个Map集合
-
-
④query() 的参数 :RowMapper
-
注意 : 如果类型定义的时候 , 使用的是基本数据类型 , 那么在使用BeanPropertyRowMapper 的时候 , 如果数据库中有数据是null的话 , 就会报错 , 所以这个时候 需要在定义的时候使用基本数据类型的包装类 ( Int -> Integer , double -> Double)
-
业务中一般是将数据封装为javabean对象 , 再讲对象封装到List集合中去
query() : //将查询结果集封装为javabean对象 , 在封装到list集合中
自己实现RowMapper接口 :
-
/** * 6.查询所有记录 , 将其封装为javabean对象的List集合 */ @Test public void test6(){ sql = "select * from books"; //这里的query中不仅要传一个sql , 还要传一个 new RowMapper<Emp> //RowMapper是sping中的 , 可以将数据中的每一行数据封装成用户定义的类 , 如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到,常见的情况就是与JdbcTemplate一起使用。 List<Emp> query = jdbcTemplate.query(sql, new RowMapper<Emp>() { @Override public Emp mapRow(ResultSet rs, int rowNum) throws SQLException { Emp emp = new Emp(); int id = rs.getInt("ID"); String title = rs.getString("TITLE"); String isbn = rs.getString("ISBN"); String publish = rs.getString("PUBLISH"); int stock = rs.getInt("STOCK"); String clas = rs.getString("clas"); emp.setID(id); emp.setTITLE(title); emp.setISBN(isbn); emp.setPUBLISH(publish); emp.setSTOCK(stock); emp.setClas(clas); return emp; } }); for (Emp emp : query) { System.out.println(emp); } }
自动实现RowMapper接口 : 开发中常使用的方法
-
用户定义的泛型就是 一个javabean类型的类
-
注意 : 这里设置的泛型 , 如果是多结果集的 , 就返回一个List集合 , 里边存储的是一个个泛型对象 ,
-
如果是单结果集的 , 就会返回一个泛型对象 ,
-
/** * 6.查询所有记录 , 将其封装为javabean对象的List集合 */ @Test public void test6(){ sql = "select * from books"; //这里直接new一个 BeanPropertyRowMapper<这里传一个用户自定义的泛型>(括号中传用户自定义的泛型的字节码文件)即可 List<Emp> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class)); for (Emp emp : query) { System.out.println(emp); } }
-
⑤queryForObject()
queryForObject() : //将查询结果集封装为一个对象
-
/** * 7.查询总的一个记录数 */ @Test public void test7(){ sql = "select count(ID) from books"; //这里使用的是将查询结果集封装为一个long对象 , count在sql中的作用是显示查询出来的结果个数 , null忽略不计 , 这个方法能够生成各种类型的对象 , 并不局限于long对象 Long aLong = jdbcTemplate.queryForObject(sql, long.class); System.out.println(aLong); }
-
-
-
-
使用方法 :
package com.sichen; import org.springframework.jdbc.core.JdbcTemplate; import utils.JDBCutil; /** * JdbcTemplate入门 */ public class jdbctemplate { public static void main(String[] args) { //1.导入jar包 //2.创建JDBCTemplate对象 JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCutil.getDataSource()); //3.调用方法 String sql = "update ceshi set dname = ? , loc = ? where deptno = ?"; //这里不用再单独设置?的值了 , 直接按照顺序在后边写就可以了 int update = jdbcTemplate.update(sql, "闻熙灏", "爱思尘", 45); System.out.println(update); } }
用再单独设置?的值了 , 直接按照顺序在后边写就可以了
int update = jdbcTemplate.update(sql, “闻熙灏”, “爱思尘”, 45);
System.out.println(update);
}
}