1 概述
1.1 一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用 jdbcTemplate
1.2 spring对不同的持久化层技术都进行封装
jdbcTemplate对jdbc进行封装
1.3 导包
1 导入jdbcTemplate使用的jar包
2 crud操作
2.1 概述
2.2 增加
1 导入jdbcTemplate使用的jar包
2 创建对象,设置数据库信息
3 创建jdbcTemplate对象,设置数据源
4 调用jdbcTemplate对象里面的方法实现操作
// 1 添加操作
@Test
public void add() {
// 设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_03");
dataSource.setUsername("root");
dataSource.setPassword("root");
// 创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// 调用jdbcTemplate对象里面的方法实现操作
//创建sql语句
String sql = "insert into user values(?,?)";
int rows =jdbcTemplate.update(sql, "lucy","250");
System.out.println(rows);
}
2.3 修改
//2 修改操作
@Test
public void update() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplate里面的方法实现 update方法
String sql = "update user set password=? whereusername=?";
int rows =jdbcTemplate.update(sql, "1314","lucy");
System.out.println(rows);
}
2.4 删除
//3 删除操作
@Test
public void delete() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = newJdbcTemplate(dataSource);
//调用update方法实现删除
String sql = "delete from user whereusername=?";
int rows =jdbcTemplate.update(sql, "lucy");
System.out.println(rows);
}
2.5 查询
2.5.1 查询返回某一个值
(1)第一个参数是sql语句
(2)第二个参数 返回类型的class
@Test
public void testCount() {
//设置数据库信息
DriverManagerDataSourcedataSource = newDriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplatejdbcTemplate = newJdbcTemplate(dataSource);
//调用方法得到记录数
Stringsql = "select count(*) from user";
//调用jdbcTemplate的方法
int count =jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}
Jdbc实现
//2 jdbc实现代码
@Test
public void testJDBC() {
Connectionconn = null;
PreparedStatementpsmt = null;
ResultSetrs = null;
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//创建连接
conn= DriverManager.getConnection("jdbc:mysql:///spring_03", "root","root");
//编写sql语句
Stringsql = "select * from user whereusername=?";
//预编译sql
psmt= conn.prepareStatement(sql);
//设置参数值
psmt.setString(1,"lucy");
//执行sql
rs= psmt.executeQuery();
//遍历结果集
while(rs.next()) {
//得到返回结果值
Stringusername = rs.getString("username");
Stringpassword = rs.getString("password");
//放到user对象里面
Useruser = newUser();
user.setUsername(username);
user.setPassword(password);
System.out.println(user);
}
}catch(Exception e) {
e.printStackTrace();
}finally{
try {
rs.close();
psmt.close();
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
2.5.2 查询返回对象
第一个参数是sql语句
第二个参数是 RowMapper,是接口,类似于dbutils里面接口
第三个参数是可变参数
//3 查询返回对象
@Test
public void testObject() {
//设置数据库信息
DriverManagerDataSourcedataSource = newDriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplatejdbcTemplate = newJdbcTemplate(dataSource);
//写sql语句,根据username查询
Stringsql = "select * from user whereusername=?";
//调用jdbcTemplate的方法实现
//第二个参数是接口 RowMapper,需要自己写类实现接口,自己做数据封装
Useruser = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "mary");
System.out.println(user);
}
class MyRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSetrs, intnum) throwsSQLException {
// 1 从结果集里面把数据得到
Stringusername = rs.getString("username");
Stringpassword = rs.getString("password");
// 2 把得到数据封装到对象里面
Useruser = newUser();
user.setUsername(username);
user.setPassword(password);
return user;
}
2.5.3 查询返回list集合
(1) sql语句
(2) RowMapper接口,自己写类实现数据封装
(3) 可变参数
2.6 批量操作
batchUpdate(String sql, List<Object[]> batchArgs)
/**
* 批量更新:批量insert,update,delete
* 最后一个参数时候 Object[] 的list 类型
*/
@Test
public void testBatchUpdate() throws SQLException {
String sql = "INSERTINTO employees(last_name , email , dept_id) VALUES(? ,? ,?)";
List<Object[]> lists = new ArrayList<>();
lists.add(new Object[]{"AA", "aa@163.com" , 10});
lists.add(new Object[]{"bb", "bb@163.com" , 9});
lists.add(new Object[]{"cc", "cc@163.com" , 8});
lists.add(new Object[]{"dd", "dd@163.com" , 7});
lists.add(new Object[]{"ee", "ee@163.com" , 6});
jdbcTemplate.batchUpdate(sql, lists);
}
3 Spring配置连接池和dao使用jdbcTemplate
3.1 spring配置c3p0连接池
第一步 导入jar包
第二步 创建spring配置文件,配置连接池
把代码在配置文件中进行配置
3.2 dao使用jdbcTemplate
(1)创建service和dao,配置service和dao对象,在service注入dao对象
(2)创建jdbcTemplate对象,把模板对象注入到dao里面
(3)在jdbcTemplate对象里面注入dataSource