7.spring JDBC: JDBC Template模板
##spring 框架对JDBC的简单封装,提供了JDBCTemplate对象简化JDBC的开发
*步骤
1.导入jar包
2.创建JDBCTemplate对象,依赖于数据源DataSource对象
*JDBCTemplate template = new JDBCTemplate(ds);
3.调用JDBCTemplate对象的方法来完成操作
*update()–>增删改语句,使用的是prepareStatement的sql 格式,这个例如,update(sql,第一个?的赋值 , 第二个?的赋值,…)
*queryForMap():查询结果集封装成map集合
*queryForList():查询结果封装为List集合
*query():查询结果,将结果封装为JavaBean对象
*query的参数:RowMapper
*一般我们在使用BeanPropertyRowMapper<类型>(类型的字节码对象)(实现了RowMapper接口),因此可以使用他们来实现接口回调来完成数据的自动封装
*new BeanPropertyRowMapper<类型>(类型的字节码对象)
*queryForObject:查询结果,将结果封装为Object对象
4.练习
*需求
1.查询所有记录将其封装为List集合
*返回得到记录的集合,一个map获取一条记录,所以这个是记录的集合,将map作为排队元素 List<Map<String,Object>> list = template.queryForList(sql,…);
2.查询id为1的记录所有记录将其封装为Map集合 返回记录只能是一条记录,否则会报错;因为字段名当成map的键,记录当成值。
*一条记录封装成一个map集合(期望一条记录)
3.查询所有记录,将其封装为对象Emp对象的List集合
*使用query()方法(期间会使用到接口参数,就需要使用内部类来重写接口中的方法),来使用Emp来记录信息,列成List集合类返回。
(重点)其中,如果自己使用的是自定类的时候,使用基本数据类型是不能接受数据库表记录中的NULL的,因此在读取值中含有NULL的时候,就是使用引用数据类型的,不使用基本数据类型 比如 double–>Double ,int—>Integer ,boolean—>Boolean 可以接受为NULL的返回值
*案例代码:
//使用内部匿名类进行对自己封装的类的初始化
Listlist = template.query(sql, new RowMapper(){
@Override
public Emp mapRow(ResultSet resultSet, int i) throws SQLException {
Emp emp = new Emp();
int empno = resultSet.getInt("empno");
String ename = resultSet.getString("empno");
String job = resultSet.getString("job");
int mgr = resultSet.getInt("mgr");
Date hiredate = resultSet.getDate("hiredate");
double sal = resultSet.getDouble("sal");
double comm = resultSet.getDouble("comm");
int deptno = resultSet.getInt("deptno");
emp.setEmonp(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setMgr(mgr);
emp.setHiredate(hiredate);
emp.setSal(sal);
emp.setComm(comm);
emp.setDeptno(deptno);
return emp;
}
}); //内部匿名类的写法
Iterator<Emp> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
4.查询总记录数(就是利用select查询得到的是一个数,不是一个记录的使用使用的方法)
*Long long = template.queryForObject(sql,Long.class(long的字节码对象))
*补充知识:注解@Test,可以使用其注释部分单独运行,测试