课程信息
- 学习课程:Java工程师2022版
- 章节名称:Spring JDBC与事务管理-Spring JDBC
- 讲师:悟空
课程内容
Spring JDBC
Spring JDBC是Spring框架用于处理关系型数据库的模块
Spring JDBC对JDBC API进行封装,极大简化开发工作量
jdbcTemplate是Spring JDBC核心类,提供数据CRUD方法
Mybatis面向中小企业敏捷开发,快速完成与数据库的交互工作,封装程度较高。
Spring JDBC对JDBC简单封装,相对于Mybatis更轻量,执行效率更高。
SpringJDBC是原生JDBC和Mybatis的折中选择。
Spring JDBC的使用步骤
Maven工程引入依赖spring-jdbc
applicationContext.xml配置DataSource数据源
在Dao注入JdbcTemplate对象,实现数据CRUD
<dependencies>
<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.16</version>
</dependency>
</dependencies>
<beans>
<!-- 数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/imooc?userSSL=false&useUnicode=true;Encoding=UTF-8&serverTimeZone=Asia/Shanghai&allowPublicKeyRetrieval=true">
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- JdbcTemplate提供数据CRUD的API -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="employeeDao" class="com.imooc.spring.jdbc.dao.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
增加通过id查找员工的业务:
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;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
}
public class SpringApplication{
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
EmployeeDao employeeDao = context.getBean("employeeDao",EmployeeDao.class);
Employee employee = employeeDao.findById(3308);
System.out.println(employee);
}
}
dao在进行数据操作时要依赖于jdbctemplate对象,因此dao里必须持有jdbctemplate对象,即需要进行对象注入。因为在ioc容器里已经配置了jdbctemplate,所以在容器启动以后自动会对这个对象初始化,在后期使用时,只需要将这个对象采用配置方式注入到dao的jdbctemplate属性中就可以了。
给dao增加增删改查等方法:
实体对象的属性顺序和数据库表的字段顺序一致,就能利用BeanPropertyRowMapper这个对象,来完成从数据库记录到实体对象的自动转换。和之前mybatis方法很像但使用的方法和对象不一样。
jdbcTemplate的数据查询方法
jdbcTemplate.queryForObject() 查询单条数据 并将数据转换为对应的实体类
jdbcTemplate.query() 查询多条数据 并转换为实体类列表
jdbcTemplate.queryForList() 无法封装对应实体类 将查询结果转换为Map类型。
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;
}
public List<Employee> findByDname(String dname) {
String sql ="select * from employee where dname= ?";
// 查询复合数据
List<Employee> list = jdbcTemplate.query(sql, new Object[]{"研发部",new BeanPropertyRowMapper(<Employee>(Employee.class)};
return list;
}
public List<Map<String, Object>> findMapByDname(String dname){
String sql = "select eno as empno, salary as s from employee where dname=?";
//将查询结构作为Map进行封装
List<Map<String, Object>> map = jdbcTemplate.queryForList(sql, new Object[]{dname},new BeanPropertyRowMapper(<Employee>(Employee.class));
}
public void insert(Employee employee){
String sql = "insert into employee(eno, ename, salary, dname,hiredate) value(?,?,?,?,?)";
jdbcTemplate.update(sql, new Object[]{
employee.getEno(),employee.getEname(),employee.getSalary(), employee.getDname(), employee.getHiredate());
}
}
public int update(Employee employee){
String sql = "UPDATE employee set ename=?, salary=?, dname=?,hiredate=?";
int count = jdbcTemplate.update(sql, new Object[]{
employee.getEno(),employee.getEname(),employee.getSalary(), employee.getDname(), employee.getHiredate());
}
return count;
}
public int delete(Integer eno){
String sql = "delete from employee where eno = ?";
return jdbcTemplate.update(sql,new Object[] {eno});
}
学习收获
学习了Spring JDBC的配置过程的步骤,以及JdbcTemplate的数据查询以及写入方法。
打卡截图
共同学习,写下你的评论
评论加载中...
作者其他优质文章