一. spring 数据库jdbc
spring-jdbc 是一款spring提供的数据库工具操作包
类似于dbutils!对比dbutils来说,他更加灵活;
数据库的好坏再看处理结果集的时候
dbutils: resultSetHandler list …
Spring-jdbc 没有提供 只提供resultset,结果可以自己任意封装!
spring-jdbc介绍
spring-jdbc是一款数据库工具,对应的是Apache的dbutils:他对多表查询不灵活
spring-jdbc没有对结果集进行封装,直接给用户暴露resultset,需要用户自己封装结果集
单表查询效率不高,但是多表查询性能良好
相同点:都可以直接导入连接池(DataSource),自动管理连接
spring-jdbc初步体验
步骤一:导包
ioc|di core beans conrtext expression
test junit test
aop cglib apring-aop spring-aspects aspectjweaver
spring jdbc mysql-container
步骤二: 创建数据连接池对象
创建JdbcTemplate对象,并传入连接池
方式一:构造函数传参
方式二:调用setter方法
步骤三: 进行crud操作
DDL :
void excute(sql,object…args);
DML:
int update(sql,object…args);
DQL:
1. List query(String sql,new RowMapper<>(),Object…args)
适合场景:
返回值为list集合
泛型是一个自定义类型的
- List queryForList(String sql,基本类型.class,object…args)
适合场景: 返回值为list集合 、String 类型的
泛型为基本类型的
- T queryForObject(String sql,基本类型.class|RoeMapper<>(),object…args);
使用场景:
返回单一对象的场景,要求查询列市住建或者是为一列
例如聚合函数单一结果,可以使用他;
RowMapper结果解析器
- 帮我们移动光标,自动指向下一条记录
- 处理返回结果
创建方式:
public class RoMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
/**
* //todo 作用 1:帮我们自动移动光标
* //TODO 2:处理结果集
* 此方法会执行多次,执行此处就是查询的数据有多少条决定,
* spring-jdbc会自动移动光标
*我们只需要去管当前行的数据返回即可返回的整体是一个集合
* 由于此方法要多次执行,因此我们只需要处理一个结果就行
*/
System.out.println("rowNum=="+rowNum);//记录条数
//第一步:获取结果
String name = rs.getString("name");
//第二步:创建实体类,setter 设值
User user = new User();
user.setName(name);
return user;
}
}
spring-jdbc练习
1. 创建一个user表
包含主键int 类型 的 id
name varchar 类型
age int 类型
2. 修改所有用户年龄增加1岁
public class JdbcTemplateTest {
@Test
public void testTemplate(){
//创建连接池对象
DataSource dataSource = new ComboPooledDataSource();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql ="select * from user";
List<User> query = jdbcTemplate.query(sql, new UserRowMapper());
System.out.println(query);
}
class UserRowMapper implements RowMapper<User>{
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
String name = rs.getString("name");
int age = rs.getInt("age");
int id = rs.getInt("id");
user.setName(name);
user.setId(id);
user.setAge(age+1);
return user;
}
}
}
##### result:
[User{id=1, name='hfh', age=24}, User{id=2, name='zxc', age=56}, ...
3. 查询id = 1 的用户
String sql ="select * from user where id =?";
List<User> query = jdbcTemplate.query(sql, new UserRowMapper(),1);
result:
[User{id=1, name='hfh', age=23}]
result:5
4. 查询所有用户信息
如上1
5. 查询一共有多少用户
String sql ="select count(1) from user";
Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(integer);
6. 查询用户姓名
String sql ="select name from user";
List<String> list = jdbcTemplate.queryForList(sql, String.class);
System.out.println(list);
result:
[hfh, zxc, gkj, ytoerip, gklkeg]
7. 删除id = 2 的用户
String sql = "delete from user where id = ?";
int update = jdbcTemplate.update(sql, 2);
System.out.println(update);
or:
String sql = "delete from user where id=3";
jdbcTemplate.execute(sql);