JDBCTemplate_执行DML语句与JDBCTemplate_执行DQL语句
JDBCTemplate_执行DML语句
执行DML语句
. 需求:
修改1号数据的 salary 为10000
添加一条记录
删除刚才添加的记录
查询 id 为 1 记录,将其封装为Map集合
查询所有记录, 将其封装为List
查询所有记录, 将其封装为Emp对象的List集合
/** * 查询所有记录, 将其封装为Emp对象的List集合 */ @Test public void test6(){ String sql ="select * from emp"; List<Emp> list =template.query(sql, new RowMapper<Emp>() { //要封装什么对象就加什么泛型 @Override//每调用一次就会封城一个emp对象返回给你 public Emp mapRow(ResultSet resultSet, int i) throws SQLException { Emp emp = new Emp(); //获取id数据 int id = resultSet.getInt("id"); //获取姓名数据 String ename = resultSet.getString("ename"); //获取职位数据 int job_id = resultSet.getInt("job_id"); //获取上层领导数据 int mar = resultSet.getInt("mgr"); //获取入职日期数据 Date joindate = resultSet.getDate("joindate"); //获取工资数据 double salary = resultSet.getDouble("salary"); //获取奖金数据 double bonus = resultSet.getDouble("bonus"); //获取工作地址数据 int dept_id = resultSet.getInt("dept_id"); // 创建emp对象,并赋值 emp.setId(id); //id emp.setEname(ename); //姓名 emp.setJob_id(job_id); //工作职位 emp.setMgr(mar); //上层领导 emp.setJoindate(joindate); //入职时间 emp.setSalary(salary); //工资 emp.setBonus(bonus); //奖金 emp.setDept_id(dept_id); //工作地点 return emp; } }); for (Emp emp: list){ System.out.println(emp); } } }
查询总的记录数
完整代码
1 package cn.xueqiang.datasource.jdbctemplate; 2 3 import cn.xueqiang.domain.Emp; 4 import cn.xueqiang.utils.JDBCUtils; 5 import org.junit.Test; 6 import org.springframework.jdbc.core.JdbcTemplate; 7 import org.springframework.jdbc.core.RowMapper; 8 import java.sql.ResultSet; 9 import java.sql.SQLException; 10 import java.util.Date; 11 import java.util.List; 12 import java.util.Map; 13 14 public class JdbcTemplateDemo { 15 //Junit单元测试 可以让方法独立执行 16 17 //获取JDBCTemplate对象 18 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 19 20 /** 21 * 修改1号数据的 salary 为10000 22 */ 23 @Test 24 public void test1(){ 25 26 //定义sql 27 String sql = "update emp set salary =10000 where id = ?";//防止SQL注入 28 //调用方法 29 int update = template.update(sql, 1001); 30 System.out.println(update); 31 } 32 33 /** 34 * 添加一条记录 35 */ 36 @Test 37 public void test2(){ 38 //定义sql 39 String sql = "insert into emp(id, ename, job_id, mgr, joindate, salary, bonus, dept_id) value(?,?,?,?,?,?,?,?)";//防止SQL注入 40 //调用方法 41 int update = template.update(sql, 1015, "杨戬", 4, 10, "2000-12-17", 4500, 0.0, 20); 42 System.out.println(update); 43 } 44 /** 45 * 删除刚才添加的记录 46 */ 47 @Test 48 public void test3(){ 49 //定义sql 50 String sql = "delete from emp where id = ?"; 51 int update = template.update(sql, 1015); 52 System.out.println(update); 53 } 54 /** 55 * 查询 id 为 1 记录,将其封装为Map集合 56 * 注意:这个方法查询的结果集长度只能是1 57 */ 58 @Test 59 public void test4(){ 60 //定义SQL 61 String sql ="select * from emp where id = ?"; 62 Map<String, Object> map = template.queryForMap(sql, 1001); 63 System.out.println(map); 64 //{id=1, name=孙悟空, gender=男, salary=10000.0, join_date=2013-02-04, dept_id=1} 65 } 66 /** 67 * 查询所有记录, 将其封装为List 68 */ 69 @Test 70 public void test5(){ 71 //定义Sql 72 String sql ="select * from emp"; 73 List<Map<String, Object>> maps = template.queryForList(sql); 74 75 76 //遍历 77 for (Map<String,Object>srt: maps){ 78 System.out.println(srt); 79 } 80 } 81 /** 82 * 查询所有记录, 将其封装为Emp对象的List集合 83 */ 84 @Test 85 public void test6(){ 86 String sql ="select * from emp"; 87 List<Emp> list =template.query(sql, new RowMapper<Emp>() { //要封装什么对象就加什么泛型 88 89 90 @Override//每调用一次就会封城一个emp对象返回给你 91 public Emp mapRow(ResultSet resultSet, int i) throws SQLException { 92 Emp emp = new Emp(); 93 //获取id数据 94 int id = resultSet.getInt("id"); 95 //获取姓名数据 96 String ename = resultSet.getString("ename"); 97 //获取职位数据 98 int job_id = resultSet.getInt("job_id"); 99 //获取上层领导数据 100 int mar = resultSet.getInt("mgr"); 101 //获取入职日期数据 102 Date joindate = resultSet.getDate("joindate"); 103 //获取工资数据 104 double salary = resultSet.getDouble("salary"); 105 //获取奖金数据 106 double bonus = resultSet.getDouble("bonus"); 107 //获取工作地址数据 108 int dept_id = resultSet.getInt("dept_id"); 109 // 创建emp对象,并赋值 110 111 emp.setId(id); //id 112 emp.setEname(ename); //姓名 113 emp.setJob_id(job_id); //工作职位 114 emp.setMgr(mar); //上层领导 115 emp.setJoindate(joindate); //入职时间 116 emp.setSalary(salary); //工资 117 emp.setBonus(bonus); //奖金 118 emp.setDept_id(dept_id); //工作地点 119 120 return emp; 121 } 122 }); 123 //遍历list集合 124 for (Emp emp: list){ 125 System.out.println(emp); 126 } 127 } 128 /** 129 * 7. 查询总记录数 130 */ 131 132 @Test 133 public void test7(){ 134 String sql = "select count(id) from emp"; 135 Long total = template.queryForObject(sql, Long.class); 136 System.out.println(total); 137 } 138 }
JDBCTemplate_执行DQL语句
4. 查询id为1的记录,将其封装为Map集合
注意:这个方法的结果集长度只能1
否则会出现错误Incorrect result size: expected 1, actual 2
5. 查询所有记录,将其封装为List
6. 查询所有记录,将其封装为Emp对象的List集合
出现org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'null' to required type 'double' for property 'bonus';
错误是因为定义实体类时定义为基本的数据类型了,值不能=null,只能默认为0,所以可以改为引用类型的封装类,重新生成setter&getter&toString方法
7. 查询总记录数
import cn.domain.Emp; import cn.utils.JDBCUtils; import org.junit.Test; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.List; import java.util.Map; public class JdbcTemplateDemo2 { //Junit单元测试,可以让方法独立执行 //1.获取JDBCTemplate对象 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); /** * 1. 修改1号数据的 salary 为 11000 */ @Test public void test1(){ //2.定义sql String sql = "update emp set salary = 11000 where id = ?"; //3.执行sql int count = template.update(sql, 1001); System.out.println(count); } /** * 2. 添加一条记录 */ @Test public void test2(){ //2.定义sql String sql = "insert into emp (id,ename,salary,dept_id)values(?,?,?,?)"; //3.执行sql int count = template.update(sql, 1015, "谢怜", 5000, 20); System.out.println(count); } /** * 3.删除添加的记录 */ @Test public void test3(){ //2.定义sql String sql = "delete from emp where id = ?"; //3.执行sql int count = template.update(sql, 1015); System.out.println(count); } /** * 4.查询id为1001的记录,将其封装为Map集合 * 注意:这个方法查询的结果集长度只能是1 */ @Test public void test4(){ String sql = "select * from emp where id = ?"; Map<String, Object> map = template.queryForMap(sql, 1001); System.out.println(map); } /** * 5. 查询所有记录,将其封装为List */ @Test public void test5(){ String sql = "select * from emp"; List<Map<String, Object>> list = template.queryForList(sql); for (Map<String, Object> map : list) { System.out.println(map); } } /** * 6.1 查询所有记录,将其封装为Emp对象的List集合 */ @Test public void test6_1(){ String sql = "select * from emp"; List<Emp> list = template.query(sql, new RowMapper<Emp>() { @Override public Emp mapRow(ResultSet rs, int i) throws SQLException { Emp emp = new Emp(); int id = rs.getInt("id"); String ename = rs.getString("ename"); int job_id = rs.getInt("job_id"); int mgr = rs.getInt("mgr"); Date joindate = rs.getDate("joindate"); double salary = rs.getDouble("salary"); double bonus = rs.getDouble("bonus"); int dept_id = rs.getInt("dept_id"); emp.setId(id); emp.setEname(ename); emp.setJob_id(job_id); emp.setMgr(mgr); emp.setJoindate(joindate); emp.setSalary(salary); emp.setBonus(bonus); emp.setDept_id(dept_id); return emp; } }); for (Emp emp : list) { System.out.println(emp); } } /** * 6.2 查询所有记录,将其封装为Emp对象的List集合 */ @Test public void test6_2(){ String sql = "select * from emp"; List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class)); for (Emp emp : list) { System.out.println(emp); } } /** * 7.查询总记录数 */ @Test public void test7(){ String sql = "select count(id) from emp"; Long total = template.queryForObject(sql, long.class); System.out.println(total); } }