一、简介
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的封装。
二、步骤
1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据源DataSource
JdbcTemplatetemplate = new JdbcTemplate(ds);
3. 调拥JdbcTemplate的方法来完成CRUD的操作
update():执行DML语句:增删改
queryForMap():查询结果将结果集封装为Map集合
注意:这个方法查询的结果集长度只能是1
queryForList():查询结果将结果封装为List方法
注意:将每一条记录封装成一个Map集合,再将Map集合装载到List集合中
query():查询结果,将结果封装为JavaBean对象
query的参数:RowMapper
一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装。
new BeanPropertyRowMapper<类型>(类型.class)
queryForObject():查询结果,将结果封装为对象
一般用于聚合函数的查询。
三、代码示例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package cn.itcast.jdbctemplate; 2 3 import org.springframework.jdbc.core.JdbcTemplate; 4 5 import cn.itcast.datasource.utils.JDBCUtils; 6 7 /** 8 * JdbcTemplate入门 9 */ 10 public class JdbcTemplateDemo1 { 11 public static void main(String[] args) { 12 //1.导入jar包 13 14 //2.创建JDBCTemplate对象 15 JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 16 //3.调用方法 17 String sql = "update account set balance = 5000 where id = ?"; 18 int count = template.update(sql,3); 19 System.out.println(count); 20 } 21 }
四、DML语句
1.修改记录操作
2. 添加记录操作
3. 删除记录操作
五、DQL语句
1. 查询id=1的记录,将其封装成Map集合
2. 查询所有记录,将其封装为List
3. 查询所有记录,将其封装为Emp对象的List集合
4.查询所有记录数
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package cn.itcast.jdbctemplate; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPropertyRowMapper; 5 import org.springframework.jdbc.core.JdbcTemplate; 6 import org.springframework.jdbc.core.RowMapper; 7 import org.springframework.lang.Nullable; 8 9 import java.sql.ResultSet; 10 import java.sql.SQLException; 11 import java.util.Date; 12 import java.util.List; 13 import java.util.Map; 14 15 import cn.itcast.datasource.utils.JDBCUtils; 16 import cn.itcast.domain.Emp; 17 18 public class JdbcTemplateDemo2 { 19 20 //1.获取JDBCTemplate对象 21 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 22 //JUnit单元测试,可以让方法独立执行 23 24 /** 25 * 修改id=1的记录,salary为10000 26 */ 27 @Test 28 public void test1(){ 29 //1.获取JDBCTemplate对象 30 JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 31 //2.定义SQL 32 String sql = "update emp set salary = 10000 where id = 1"; 33 //3. 执行SQL 34 int count = template.update(sql); 35 System.out.println(count); 36 } 37 38 /** 39 * 添加一条记录 40 */ 41 @Test 42 public void test2(){ 43 44 //2.定义SQL 45 String sql = "insert into emp(id,name,gender,salary,join_date,dept_id) values(?,?,?,?,?,?)"; 46 //3. 执行SQL 47 int count = template.update(sql,6,"施耐庵","男",30000,"2010-9-12",3); 48 System.out.println(count); 49 } 50 51 /** 52 * 删除一条记录 53 */ 54 @Test 55 public void test3(){ 56 String sql = "delete from emp where id = ?"; 57 int count = template.update(sql,6); 58 System.out.println(count); 59 } 60 61 /** 62 * 查询id=1的记录,并将其封装为Map集合 63 * 注意:这个方法查询的结果集长度只能为1 64 */ 65 @Test 66 public void test4(){ 67 String sql = "select * from emp where id = ?"; 68 Map<String, Object> map = template.queryForMap(sql,1); 69 System.out.println(map); 70 71 } 72 73 /** 74 * 查询所有记录,将其封装为List 75 * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中 76 */ 77 @Test 78 public void test5(){ 79 String sql = "select * from emp"; 80 List<Map<String,Object>> list = template.queryForList(sql); 81 for(Map<String, Object> stringObjectMap : list){ 82 System.out.println(stringObjectMap); 83 } 84 } 85 86 /** 87 * 查询所有记录,将其封装为Emp对象的List集合 88 */ 89 @Test 90 public void test6(){ 91 String sql = "select * from emp"; 92 List<Emp> list = template.query(sql, new RowMapper<Emp>() { 93 94 @Nullable 95 @Override 96 public Emp mapRow(ResultSet resultSet, int i) throws SQLException { 97 Emp emp = new Emp(); 98 int id = resultSet.getInt("id"); 99 String name = resultSet.getString("name"); 100 String gender = resultSet.getString("gender"); 101 double salary = resultSet.getDouble("salary"); 102 Date join_date = resultSet.getDate("join_date"); 103 int dept_id = resultSet.getInt("dept_id"); 104 105 emp.setId(id); 106 emp.setName(name); 107 emp.setGender(gender); 108 emp.setSalary(salary); 109 emp.setJoin_date(join_date); 110 emp.setDept_id(dept_id); 111 return emp; 112 } 113 }); 114 115 for(Emp emp : list){ 116 System.out.println(emp); 117 } 118 } 119 120 /** 121 * 查询所有记录,将其封装为Emp对象的List集合 122 */ 123 @Test 124 public void test6_2(){ 125 String sql = "select * from emp"; 126 List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class)); 127 for(Emp emp : list){ 128 System.out.println(emp); 129 } 130 } 131 132 /** 133 * 查询总记录数 134 */ 135 @Test 136 public void test7(){ 137 String sql = "select count(id) from emp"; 138 Long total = template.queryForObject(sql, Long.class); 139 System.out.println(total); 140 } 141 }