Spring JDBC
* Spring 框架对JDBC的简单封装 提供了一个jdbctemplate对象简化jdbc的开发。
步骤:
1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据库DataSource
* JdbcTemplate template = new JdbcTemplate(ds);
3. 调用JdbcTemplate的方法来完成增删改查操作
* update(): 执行增删改语句
* queryForMap():查询结果 将结果集封装为map集合 查询结果只能有一条
* queryForList(): 查询结果将结果集封装为list集合
* query(): 查询结果 将结果封装为JavaBean对象 **最常用**
query 参数 RowMapper
一般我们使用BeanPropertyRowMapper实现类 可以完成数据到javabean的自动封装
通过名称匹配的方式,映射到属性中去
字段 bean属性
USER_NAME --> userName
USER_ID --> userId
但是碰到一些特殊的(暂不考虑命名是否合理)这就映射不上了!
比如:
ORDER_NUM2 --> OrderNum2 (should be orderNum2)
ORDER_NUM_3 OrderNum3
new BeanPropertyRowMapper<类型>(类型.class)
* queryForObject:查询结果 将结果封装为对象
代码演示
DataSource ds = DruidUtils.getDataSource();
JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
String sql = "update account set money = 5000 where name = ?";
String name = "lisi";
int count = jdbcTemplate.update(sql, name);
System.out.println(count);
练习:
@Test
public void insertData() {
String sql = "insert into account(name,money) values(?,?)";
int count = jdbcTemplate.update(sql,"kb",81);
System.out.println(count);
}
@Test
public void deleteData() {
String sql = "delete from account where name = ? ";
int count = jdbcTemplate.update(sql,"lisi");
System.out.println(count);
}
@Test
public void selectData() {
String sql = "select * from account where name = ?";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql,"kb");
for( Map<String, Object> map : list ) {
System.out.println(map);
}
}
@Test
public void selectDataBean() {
String sql = "select * from account";
List<Account> list = jdbcTemplate.query(sql, new RowMapper<Account>() {
@Override
public Account mapRow(ResultSet arg0, int arg1) throws SQLException {
Account account = new Account();
String name = arg0.getString("name");
int money = arg0.getInt("money");
account.setName(name);
account.setMoney(money);
return account;
}
});
for(Account account : list) {
System.out.println(account);
}
}
//简化版本 把类的属性定义为引用数据类型 可以防止数据库中该字段内容为空时 发生错误
@Test
public void selectDataBean2() {
String sql = "select * from account";
List<Account> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Account>(Account.class));
for(Account account : list) {
System.out.println(account);
}
}
//queryforobject 一般用于执行一些聚合函数
@Test
public void selectCount() {
String sql = "select count(*) from account ";
long count = jdbcTemplate.queryForObject(sql,Long.class);
System.out.println(count);
}