SpringJDBC中配置JdbcTemplate对象,实现增删改查操作
创建Maven工程,导入对应依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
创建配置文件,对mysql数据源进行配置,并将数据源注入到JdbcTemplate对象中
<!--数据源-->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/imooc?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="NewPassword"/>
</bean>
<!--这个类是Spring 提供的,JdbcTemplate提供数据CURD的API-->
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="top.xiongmingcai.jdbc.dao.EmployeeDao" id="employeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
创建实体类和Dao类
实体类与数据库中每条数据的字段保持驼峰命名,而Dao类则是要包含JdbcTemplate对象从而对数据源进行操作,操作时直接调用jdbcTemplate封装好的一系列方法即可。
private JdbcTemplate jdbcTemplate;
public Employee findById(Integer eno){
String sql = "select * from employee where eno = ?;";
Employee employee = jdbcTemplate.queryForObject(sql,
new Object[]{eno},
new BeanPropertyRowMapper<Employee>(Employee.class));
return employee;
};
这里的查询方法第一个参数为sql语句,第二个参数对应sql语句中的参数数组,第三个参数是设定实体类与数据表字段的一一对应关系,满足驼峰命名即可一一对应。


https://github.com/MingCaiXiong/spring-learn/commit/0dbbf4eda2af12cd2cc9417b24f2cfadb4b41e61
Spring 架构下引入test 单元测试
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
在测试类中,使用注解完成测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})

JdbcTemplate对象中三个查询方法:
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
public Employee findById(Integer eno){
String sql = "select * from employee where eno = ?;";
Employee employee = jdbcTemplate.queryForObject(sql,
new Object[]{eno},
new BeanPropertyRowMapper<Employee>(Employee.class));
return employee;
};
// 查询结果中多条记录转换为对应对象,我们可以使用query()进行查询,
public List<Employee> queryByDname(String dname){
String sql = "select * from employee where dname = ?;";
return jdbcTemplate.query(sql,
new Object[]{dname},
new BeanPropertyRowMapper<>(Employee.class));
}
// 很多字段名是没有实体属性的,无法进行实体类映射,我们可以使用queryForList()进行查询,这个结果会被封装成map对象
public List<Map<String, Object>> queryMapByDname(String dname){
String sql = "select dname as dnme, salary as s from employee where dname = ?";
//没有实体类对应的情况下queryForList将查询结果作为map进行封装
return jdbcTemplate.queryForList(sql, dname);
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
new BeanPropertyRowMapper : 将java实体bean与数据库中的列,按照排序的顺序一一对应,返回具体的对象
https://github.com/MingCaiXiong/spring-learn/commit/e6d0c37a7e6c3ed9d38ee246bbf1daab1e1cc085
JdbcTemplate对象增加数据
//新增加操作
public int insert(Employee employee) {
String sql = "INSERT INTO employee ( ename, salary, dname, hiredate) VALUES ( ?, ?, ?, ?)";
int updateRows = jdbcTemplate.update(sql,
employee.getEname(),
employee.getSalary(),
employee.getDname(),
employee.getHiredate());
return updateRows;
}
public int update(Employee employee) {
String sql = "UPDATE employee SET ename = ?, salary = ?, dname = ?, hiredate =? WHERE eno = ?";
int update = jdbcTemplate.update(sql, employee.getEname(),
employee.getSalary(),
employee.getDname(),
employee.getHiredate(), employee.getEno());
return update;
}
public int delete(Integer eno){
String sql = "DELETE FROM imooc.employee WHERE eno = ?";
return jdbcTemplate.update(sql, eno);
}
增删改查练习
https://github.com/MingCaiXiong/spring-learn/commit/d7245027aafe8d3a7102011bd965461e12fcea70