目录
- SpringJDBC
SpringJDBC
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发.
目的: 简化JDBC编程
- 需要导入jar包
JdbcTemplate
跳转到目录
使用步骤:
- 导入jar包
- 创建
JdbcTemplate
对象,依赖于DataSource
JdbcTemplate template = new JdbcTemplate(ds);
- 调用JdbcTemplate的方法来完成
CRUD
的操作
方法:
update()
执行DML语句, 增删改语句queryForMap()
查询结果将结果集封装为map集合
注意: 这个方法查询的结果集长度只能为1, 将列名作为key, 值作为value封装为一个map集合
queryForList()
查询结果将结果集封装为list集合,将每一条记录封装到map集合中, 然后再将map装入到List集合中query()
查询结果, 将结果封装为JavaBean对象
query的参数: RowMapper
1、一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
2、new BeanPropertyRowMapper<类型>(类型.class)
queryForObject()
查询结果, 将结果封装为对象, 一般用来执行一些聚合函数的
使用JdbcTemplate练习
/*
* 1. 调用JdbcTemplate方法来完成CRUD操作
* update() : 执行DML语句, 增删改语句
*
* queryForMap(): 查询结果将结果集封装为map集合
* 这个方法查询的结果集长度只能为1, 将列名作为key, 值作为value封装为一个map集合
*
* queryForList(): 查询结果将结果集封装为list集合
* 将每一条记录封装到map集合中, 然后再将map装入到List集合中
*
* query(): 查询结果, 将结果封装为JavaBean对象
* *query的参数: RowMapper
* 一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
*
* queryForObject(): 查询结果, 将结果封装为对象
* 一般用来执行一些聚合函数的
*
* 练习:
* 1. 修改1号数据的 salary为10000
* 2. 添加一条记录
* 3. 删除刚才添加的记录
* 4. 查询id为1的记录, 将其封装为map集合
* 5. 查询所有记录, 将其封装为list
* 6. 查询所有记录, 将其封装完为Emp对象的List集合
* 7. 查询总记录数
*/
public class JdbcTemplateDemo2 {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
// Junit单元测, 可以让方法独立执行
/**
* 修改1号数据的 salary为10000
*/
@Test
public void test1() {
//1. 获取JDBCTemplate对象
//2. 定义sql
String sql = "UPDATE emp SET salary = ? WHERE id = ?";
//3. 执行sql 并给 ? 赋值
int count = template.update(sql, 20000, 1015);
System.out.println(count);
}
/**
* 添加一条记录
*/
@Test
public void test2() {
String sql = "INSERT INTO emp(id, ename, dept_id) VALUES(?, ?, ?)";
int count = template.update(sql, 1015, "朝阳", 10);
System.out.println(count);
}
/**
* 删除刚添加的记录
*/
@Test
public void test3() {
String sql = "DELETE FROM emp WHERE id = ?";
int count = template.update(sql, 1015);
System.out.println(count);
}
/**
* 查询id为1的记录, 将其封装为map集合
*/
@Test
public void test4() {
String sql = "SELECT * FROM emp WHERE id = ?";
Map<String, Object> map = template.queryForMap(sql, 1001);
System.out.println(map);
}
/**
* 查询所有记录, 将其封装为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);
}
}
/**
* 查询所有记录, 将其封装完为Emp对象的List集合
*/
@Test
public void test6() {
String sql = "SELECT * FROM emp";
List<Emp> list = template.query(sql, new RowMapper<Emp>() {
Emp emp;
// 此方法每调用一次就会封装一个emp对象返回,并存储到List
@Override
public Emp mapRow(ResultSet rs, int i) throws SQLException {
// 获取数据
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对象, 并赋值
emp = new Emp();
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);
}
}
/**
* 查询所有记录, 将其封装完为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);
}
}
/**
* 查询总记录数
*/
@Test
public void test7() {
String sql = "SELECT COUNT(id) FROM emp";
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}
}