一 概述
1 spring框架一站式框架
(1) 针对javaee三层,每一层都有解决技术
(2) 在dao层,使用jdbcTemplate
2 spring对不同的持久化层技术都进行了封装
ORM持久化技术 | 模板类 |
---|---|
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate | org.springframework.orm.hibernate5.HibernateTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | or g.springframework.orm.jpa.JpaTemplate |
(1) jdbcTemplate对jdbc进行封装
3 jdbcTemplate使用和dbutils使用很相似,对数据进行crud操作
二 jdbcTemplate操作
1 增加
(1)导入jdbcTemplate使用的jar包
(2)创建对象,设置数据库信息
//创建对象,设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?useUnicode=true&characterEncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
(3)创建jdbcTemplate对象,设置数据源
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
(4)调用jdbcTemplate对象里面的方法实现操作
//调用jdbcTemplate对象里面的方法实现操作
String sql = "insert into user (username,password) values(?,?);";
jdbcTemplate.update(sql,"Mary",123456);
2 修改
@Test
public void update(){
//创建对象,设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?Unicode=true&characterEncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "update user set username=?,password=? where id=?";
//调用jdbcTemplate里面的方法实现update方法、
jdbcTemplate.update(sql,"邹",8888888,2);
}
3 删除
@Test
public void delete(){
//创建对象,设置数据库信息
DriverManagerDataSource dataSource =new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?Unicode=true&characterEncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "delete from user where id=?";
//调用jdbcTemplate对象里面的方法实现操作
jdbcTemplate.update(sql,11);
}
4 查询
(1)查询返回某一个值
@Test
public void select1(){
//创建对象,设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?Unicode=true&characterUncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplate对象里面的方法实现操作
String sql = "select count(*) from user";
//第二个参数,是返回类型的class
Integer a = jdbcTemplate.queryForObject(sql,Integer.class);
System.out.println(a);
}
(2)查询返回对象
select2.java
@Test
public void selete2(){
//创建对象设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?Unicode=true&characterUncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplate对象里面的方法实现操作
String sql = "select * from user where id = ?";
//第二个参数是接口RowMapper,需要自己写类实现接口,自己做数据封装
//第三个参数是向预编译sql语句中添加参数
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(),1);
System.out.println(user);
}
MyRowMapper.java
class MyRowMapper implements RowMapper{
public User mapRow(ResultSet resultSet, int num) throws SQLException {
//1 从结果集中把数据得到
int id = Integer.parseInt(resultSet.getString("id"));
String username = resultSet.getString("username");
String password = resultSet.getString("password");
//2 把得到数据封装到对象里面
User user = new User();
user.setId(id);
user.setUsername(username);
user.setPassowrd(password);
return user;
}
}
(3)查询返回list集合
@Test
public void select3(){
//创建对象设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/text?Unicode=true&characterUncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplate对象里面的方法实现操作
String sql = "select * from user";
//调用jdbcTemplate方法实现
//第一个参数 sql语句
//第二个参数 RowMapper
//第三个参数 预编译sql语句参数 可是省略
List users = jdbcTemplate.query(sql,new MyRowMapper());
System.out.println(users);
}
class MyRowMapper implements RowMapper{
public User mapRow(ResultSet resultSet, int num) throws SQLException {
//1 从结果集中把数据得到
int id = Integer.parseInt(resultSet.getString("id"));
String username = resultSet.getString("username");
String password = resultSet.getString("password");
//2 把得到数据封装到对象里面
User user = new User();
user.setId(id);
user.setUsername(username);
user.setPassowrd(password);
return user;
}
}
三 Spring配置C3P0连接池
1 导入jar包
2 创建spring配置文件,配置连接池
四 2 dao使用jdbcTemplate
配置文件
UserService.java
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add1(){
userDao.add2();
}
}
UserDao.java
public class UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void add2() {
String sql = "insert into user (username, password) values(?,?) ";
jdbcTemplate.update(sql,"jack",987654);
}
}
测试
public class Text {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
UserService userService = (UserService) context.getBean("userService");
userService.add1();
}
}