1. JdbcTemplate数据库操作
1.1. 增删改操作
int update(String sql,Object[] param);
1.2. 查询
1.2.1. 获取多行多列的数据:List<T> JdbcTemplate.query(String sql,Object[] param,RowMapper<T>)
1.2.2. 根据sql语句查询的结果,在接口实现类中定义内部类,统一处理数据表每一行的列值与实体类的属性的对应关系
// 定义内部类:统一处理获取的表数据与Emp类属性的对应关系
private class MyRowMapper implements RowMapper<Emp> {
@Override
public Emp mapRow(ResultSet rs, int rowNum) throws SQLException {
System.out.println("行号:" + rowNum);
Dept dept=new Dept();
dept.setDeptid(rs.getInt(7));
Emp emp = new Emp(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getDate(4), rs.getDouble(5),
rs.getDouble(6), dept);
return emp;
}
}
1.2.3. 获取单行多列的数据
Emp emp= jdbcTemplate.query(sql, new Object[]{id}, new ResultSetExtractor<Emp>() {
@Override
public Emp extractData(ResultSet rs) throws SQLException, DataAccessException {
Emp emp=null;
Dept dept=null;
if (rs.next()) {
emp = new Emp();
emp.setEname(rs.getString("ename"));
emp.setHiredate(rs.getDate("hiredate"));
dept=new Dept();
dept.setDname(rs.getString("dname"));
emp.setDept(dept);
}
return emp;
}
});
1.2.4. 获取聚合查询的结果:使用分组或数据库函数的查询结果,例如统计每个部门的员工人数
需要在程序中定义帮助类,类的属性要与查询结果的所有列值对应
public class DeptUtil {
private String dname;
private Integer personNums;
}
String sql="SELECT d.dname,COUNT(1) as c from emp e "
+"LEFT JOIN dept d ON e.deptid=d.deptid "
+"GROUP BY d.dname";
List<DeptUtil> dus= jdbcTemplate.query(sql, new RowMapper<DeptUtil>(){
@Override
public DeptUtil mapRow(ResultSet rs, int rowNum) throws SQLException {
DeptUtil du=new DeptUtil(rs.getString("dname"), rs.getInt("c"));
return du;
}
});
1.2.5. 获取单行单列的数据,例如统计所有员工的人数
String sql="select count(1) from emp";
int i=jdbcTemplate.queryForObject(sql, new RowMapper<Integer>(){
@Override
public Integer mapRow(ResultSet rs, int rowNum) throws SQLException {
int i= rs.getInt(1);
return i;
}
});