1 spring框架一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用 jdbcTemplate
2 spring对不同的持久化层技术都进行封装
(1)jdbcTemplate对jdbc进行封装
3 jdbcTemplate使用和dbutils使用很相似,都数据库进行crud操作,但是使用起来还没有dbutils 使用方便呢
//dbutils 的实现方式
QueryRunner runner = new QueryRuner(datasource);
返回对象
runner.query(sql,new BeanHandler<User>(User.class));
返回list集合
runner.query(sql,new BeanListHander<User>(User.class))
1 在dbutils时候,有接口 ResultSetHandler
dbutils提供了针对不同的结果实现类
1 导入jdbcTemplate使用的jar包
2 创建对象,设置数据库信息
3 创建jdbcTemplate对象,设置数据源
4 调用jdbcTemplate对象里面的方法实现操作
//3 删除操作
//2 删除操作
@Test
public void delete() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用update方法实现删除
String sql = "delete from user where username=?";
int rows = jdbcTemplate.update(sql, "lucy");
System.out.println(rows);
}
//2 修改操作
@Test
public void update() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplate里面的方法实现 update方法
String sql = "update user set password=? where username=?";
int rows = jdbcTemplate.update(sql, "1314","lucy");
System.out.println(rows);
}
// 1 添加操作
@Test
public void add() {
// 设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 创建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);
}
jdbcTemplate实现查询
jdbcTemplate实现查询,有接口 RowMapper,
jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装
Jdbc实现
//2 jdbc实现代码
@Test
public void testJDBC() {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//创建连接
conn = DriverManager.getConnection("jdbc:mysql:///spring_day03", "root", "123456");
//编写sql语句
String sql = "select * from user where username=?";
//预编译sql
psmt = conn.prepareStatement(sql);
//设置参数值
psmt.setString(1, "lucy");
//执行sql
rs = psmt.executeQuery();
//遍历结果集
while(rs.next()) {
//得到返回结果值
String username = rs.getString("username");
String password = rs.getString("password");
//放到user对象里面
User user = new User();
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();
}
}
}
//1 查询表有多少条记录
@Test
public void testCount() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用方法得到记录数
String sql = "select count(*) from user";
//调用jdbcTemplate的方法
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}
//3 查询返回对象
@Test
public void testObject() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//写sql语句,根据username查询
String sql = "select * from user where username=?";
//调用jdbcTemplate的方法实现
//第二个参数是接口 RowMapper,需要自己写类实现接口,自己做数据封装
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "mary");
System.out.println(user);
}
class MyRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
// 1 从结果集里面把数据得到
String username = rs.getString("username");
String password = rs.getString("password");
// 2 把得到数据封装到对象里面
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
}
//1 查询表有多少条记录
@Test
public void testCount() {
//设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用方法得到记录数
String sql = "select count(*) from user";
//调用jdbcTemplate的方法
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}