我们都知道JdbcTemplate是Spring自带的,那么我们来看看如何整合SpringBoot和JdbcTemplate吧。
依赖
这里使用的数据库连接池Druid,是SpringBoot中带有的druid-spring-boot-starter
,和以前在SSM中所用的Druid不是一模一样的依赖,但是作用都一样。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.27</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
这里需要注意是的我们使用的Springboot自带的数据库驱动,它默认对应的Mysql版本是8,我们需要锁定这个驱动的版本,所以我们给这个驱动依赖和连接池依赖加上版本。
Application.properties
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.username=root
spring.datasource.two.password=rootzsl
spring.datasource.two.url=jdbc:mysql:///db?useUnicode=true&characterEncoding=UTF-8
Pojo
/**
* @author ZSL
* @ClassName Emp
* @description
* @date 2019/8/10
*/
public class Emp {
private Integer id;
private String name;
private String subject;
private Integer grade;
public Emp(Integer id, String name, String subject, Integer grade) {
this.id = id;
this.name = name;
this.subject = subject;
this.grade = grade;
}
public Emp() {
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", subject='" + subject + '\'' +
", grade=" + grade +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
}
Dao
/**
* @author ZSL
* @ClassName EmpDao
* @description
* @date 2019/8/10
*/
@Component
public class EmpDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查
* 数据库中的字段和对象属性的名字一模一样
*
* @return
*/
public List<Emp> selEmp(){
return jdbcTemplate.query("SELECT * FROM emp",new BeanPropertyRowMapper<>(Emp.class));
}
/**
* 查
* 如果数据库与pojo属性不一一对应,一模一样
* 自定义一个RowMapper,将数据库中的字段和对象的属性一一对应起来
* @return
*/
public List<Emp> getAllEmps() {
return jdbcTemplate.query("select * from emp", new RowMapper<Emp>() {
@Override
public Emp mapRow(ResultSet resultSet, int i) throws SQLException {
String name = resultSet.getString("name");
String subject = resultSet.getString("subject");
Integer id = resultSet.getInt("id");
Emp emp = new Emp();
emp.setSubject(subject);
emp.setName(name);
emp.setId(id);
return emp;
}
});
}
/**
* 增
* @param emp
* @return
*/
public int addEmp(Emp emp) {
return jdbcTemplate.update("insert into emp (name,subject) values (?,?);", emp.getName(), emp.getSubject());
}
/**
* 新增
* 主键回填
*
* 在构建PreparedStatement时传入Statement.RETURN_GENERATED_KEYS,
* 然后传入KeyHolder,最终从KeyHolder中获取刚刚插入数据的id保存到user对象的id属性
*
* @param emp
* @return
*/
public int addEmp2(Emp emp) {
KeyHolder keyHolder = new GeneratedKeyHolder();
int update = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement("insert into emp (name,subject) values (?,?);", Statement.RETURN_GENERATED_KEYS);
ps.setString(1, emp.getName());
ps.setString(2, emp.getSubject());
return ps;
}
}, keyHolder);
emp.setId(keyHolder.getKey().intValue());
System.out.println(emp);
return update;
}
/**
* 删
* @param id
* @return
*/
public int deleteEmpById(Integer id) {
return jdbcTemplate.update("delete from emp where id=?", id);
}
/**
*
* 改
* @param emp
* @return
*/
public int updateEmpById(Emp emp) {
return jdbcTemplate.update("update emp set name=?,subject=? where id=?", emp.getName(),emp.getSubject(),emp.getId());
}
}
Service和Controller略。
增删改统一都使用update来操作,而查多使用带query的进行操作。