14_Spring_JDBCTemplate的使用

发布时间 2023-07-30 12:44:18作者: AidenDong

14_Spring_JDBCTemplate的使用

JdbcTemplate概述

JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的
JdbcTemplate和,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。

image

按如下项目结构准备 maven jar项目即可

image
1 导入依赖

  1.  <dependencies>
    
  2.      <!--spring核心容器包-->
    
  3.      <dependency>
    
  4.          <groupId>org.springframework</groupId>
    
  5.          <artifactId>spring-context</artifactId>
    
  6.          <version>5.3.5</version>
    
  7.      </dependency>
    
  8.      <!--spring切面包-->
    
  9.      <dependency>
    
  10.         <groupId>org.springframework</groupId>
    
  11.         <artifactId>spring-aspects</artifactId>
    
  12.         <version>5.3.5</version>
    
  13.     </dependency>
    
  14.     <!--aop联盟包-->
    
  15.     <dependency>
    
  16.         <groupId>aopalliance</groupId>
    
  17.         <artifactId>aopalliance</artifactId>
    
  18.         <version>1.0</version>
    
  19.     </dependency>
    
  20.     <!--德鲁伊连接池-->
    
  21.     <dependency>
    
  22.         <groupId>com.alibaba</groupId>
    
  23.         <artifactId>druid</artifactId>
    
  24.         <version>1.1.10</version>
    
  25.     </dependency>
    
  26.     <!--mysql驱动-->
    
  27.      <dependency>
    
  28.          <groupId>mysql</groupId>
    
  29.          <artifactId>mysql-connector-java</artifactId>
    
  30.          <version>8.0.22</version>
    
  31.      </dependency>
    
  32.     <!--springJDBC包-->
    
  33.     <dependency>
    
  34.         <groupId>org.springframework</groupId>
    
  35.         <artifactId>spring-jdbc</artifactId>
    
  36.         <version>5.3.5</version>
    
  37.     </dependency>
    
  38.     <!--spring事务控制包-->
    
  39.     <dependency>
    
  40.         <groupId>org.springframework</groupId>
    
  41.         <artifactId>spring-tx</artifactId>
    
  42.         <version>5.3.5</version>
    
  43.     </dependency>
    
  44.     <!--spring orm 映射依赖-->
    
  45.     <dependency>
    
  46.         <groupId>org.springframework</groupId>
    
  47.         <artifactId>spring-orm</artifactId>
    
  48.         <version>5.3.5</version>
    
  49.     </dependency>
    
  50.     <!--Apache Commons日志包-->
    
  51.     <dependency>
    
  52.         <groupId>commons-logging</groupId>
    
  53.         <artifactId>commons-logging</artifactId>
    
  54.         <version>1.2</version>
    
  55.     </dependency>
    
  56.     <!--Junit单元测试-->
    
  57.     <dependency>
    
  58.         <groupId>junit</groupId>
    
  59.         <artifactId>junit</artifactId>
    
  60.         <version>4.13.1</version>
    
  61.         <scope>test</scope>
    
  62.     </dependency>
    
  63.     <!--lombok -->
    
  64.     <dependency>
    
  65.         <groupId>org.projectlombok</groupId>
    
  66.         <artifactId>lombok</artifactId>
    
  67.         <version>1.18.12</version>
    
  68.         <scope>provided</scope>
    
  69.     </dependency>
    
  70. </dependencies> 
    

2 准备JDBC.properties

  1. jdbc_username=root
  2. jdbc_password=root
  3. jdbc_driver=com.mysql.cj.jdbc.Driver
  4. jdbc_url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true

3 准备applicationContext.xml

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
  3.     xmlns:p="http://www.springframework.org/schema/p"
    
  4.     xmlns:c="http://www.springframework.org/schema/c"
    
  5.     xmlns:util="http://www.springframework.org/schema/util"
    
  6.     xmlns:context="http://www.springframework.org/schema/context"
    
  7.     xmlns:aop="http://www.springframework.org/schema/aop"
    
  8.     xsi:schemaLocation="
    
  9.    http://www.springframework.org/schema/beans
    
  10.    http://www.springframework.org/schema/beans/spring-beans.xsd
    
  11.    http://www.springframework.org/schema/util
    
  12.    http://www.springframework.org/schema/util/spring-util.xsd
    
  13.    http://www.springframework.org/schema/context
    
  14.    http://www.springframework.org/schema/context/spring-context.xsd
    
  15.    http://www.springframework.org/schema/aop
    
  16.    http://www.springframework.org/schema/aop/spring-aop.xsd
    
  17. ">
  18. <!--spring 注解扫描-->
    
  19. <context:component-scan base-package="com.msb"/>
    
  20. <!--读取jdbc配置文件-->
    
  21. <context:property-placeholder location="classpath:jdbc.properties"/>
    
  22. <!--配置德鲁伊连接池-->
    
  23. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    
  24.     <property name="username" value="${jdbc_username}"></property>
    
  25.     <property name="password" value="${jdbc_password}"></property>
    
  26.     <property name="url" value="${jdbc_url}"></property>
    
  27.     <property name="driverClassName" value="${jdbc_driver}"></property>
    
  28. </bean>
    
  29. <!--配置JDBCTemplate对象,并向里面注入DataSource-->
    
  30. <bean id="jdbcTemplate"
    
    class="org.springframework.jdbc.core.JdbcTemplate">
  31.     <!--通过set方法注入连接池-->
    
  32.     <property name="dataSource" ref="dataSource"></property>
    
  33. </bean>
    

3 准备实体类

  1. package com.msb.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.util.Date;
  6. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  7. */
  8. @AllArgsConstructor
  9. @NoArgsConstructor
  10. @Data
  11. public class Emp implements Serializable{
  12. private Integer empno;
    
  13. private String ename;
    
  14. private String job;
    
  15. private Integer mgr;
    
  16. private Date hiredate;
    
  17. private Double sal;
    
  18. private Double comm;
    
  19. private Integer deptno;
    
  20. }

4 准备service层接口和实现类

  1. package com.msb.service;

  2. import com.msb.pojo.Emp;

  3. import java.util.List;

  4. /**

    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  5. */

  6. public interface EmpService {

  7.  int findEmpCount();
    
  8. Emp findByEmpno(int empno);
    
  9. List<Emp> findByDeptno(int deptno);
    
  10. int  addEmp(Emp emp);
    
  11. int updateEmp(Emp emp);
    
  12. int deleteEmp( int empno);
    
  13. }

  14. package com.msb.service.impl;

  15. import com.msb.dao.EmpDao;

  16. import com.msb.pojo.Emp;

  17. import com.msb.service.EmpService;

  18. import org.springframework.beans.factory.annotation.Autowired;

  19. import org.springframework.stereotype.Service;

  20. import java.util.List;

  21. /**

    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  22. */

  23. @Service

  24. public class EmpServiceImpl implements EmpService {

  25. @Autowired
    
  26. private EmpDao empDao;
    
  27. @Override
    
  28. public int findEmpCount() {
    
  29.     return empDao.findEmpCount();
    
  30. }
    
  31. @Override
    
  32. public Emp findByEmpno(int empno) {
    
  33.     return empDao.findByEmpno( empno);
    
  34. }
    
  35. @Override
    
  36. public List<Emp> findByDeptno(int deptno) {
    
  37.     return empDao.findByDeptno( deptno);
    
  38. }
    
  39. @Override
    
  40. public int addEmp(Emp emp) {
    
  41.     return empDao.addEmp(emp);
    
  42. }
    
  43. @Override
    
  44. public int updateEmp(Emp emp) {
    
  45.     return empDao.updateEmp(emp);
    
  46. }
    
  47. @Override
    
  48. public int deleteEmp(int empno) {
    
  49.     return empDao.deleteEmp(empno);
    
  50. }
    
  51. }

5 准备dao层接口和实现类

  1. package com.msb.dao;

  2. import com.msb.pojo.Emp;

  3. import java.util.List;

  4. /**

    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  5. */

  6. public interface EmpDao {

  7.  int findEmpCount();
    
  8. Emp findByEmpno(int empno);
    
  9. List<Emp> findByDeptno(int deptno);
    
  10. int addEmp(Emp emp);
    
  11. int updateEmp(Emp emp);
    
  12. int deleteEmp(int empno);
    
  13. }

  14. package com.msb.dao.impl;

  15. import com.msb.dao.EmpDao;

  16. import com.msb.pojo.Emp;

  17. import org.springframework.beans.factory.annotation.Autowired;

  18. import org.springframework.jdbc.core.BeanPropertyRowMapper;

  19. import org.springframework.jdbc.core.JdbcTemplate;

  20. import org.springframework.jdbc.core.RowMapper;

  21. import org.springframework.stereotype.Repository;

  22. import java.sql.ResultSet;

  23. import java.sql.SQLException;

  24. import java.util.List;

  25. /**

    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  26. */

  27. @Repository

  28. public class EmpDaoImpl implements EmpDao {

  29. @Autowired
    
  30. private JdbcTemplate jdbcTemplate;
    
  31. @Override
    
  32. public int findEmpCount() {
    
  33.     /*查询员工个数
    
  34.     * queryForObject 两个参数
    
  35.     * 1 SQL语句
    
  36.     * 2 返回值类型
    
  37.     *
    
  38.     * */
    
  39.     Integer empCount = jdbcTemplate.queryForObject("select count(1)
    

    from emp", Integer.class);

  40.     return empCount;
    
  41. }
    
  42. @Override
    
  43. public Emp findByEmpno(int empno) {
    
  44.     /*
    
  45.     * 查询单个员工对象
    
  46.     * queryForObject三个参数
    
  47.     * 1 SQL语句
    
  48.     * 2 RowMapper接口的实现类对象,用于执行返回的结果用哪个类来进行封装 ,实现类为BeanPropertyRowMapper
    
  49.     * 3 SQL语句中需要的参数 (可变参数)
    
  50.     * */
    
  51.     BeanPropertyRowMapper<Emp> rowMapper =new
    

    BeanPropertyRowMapper<>(Emp.class);

  52.     Emp emp = jdbcTemplate.queryForObject("select * from emp where
    

    empno =?", rowMapper, empno);

  53.     return emp;
    
  54. }
    
  55. @Override
    
  56. public List<Emp> findByDeptno(int deptno) {
    
  57.     /*
    
  58.      * 查询单个员工对象
    
  59.      * query三个参数
    
  60.      * 1 SQL语句
    
  61.      * 2 RowMapper接口的实现类对象,用于执行返回的结果用哪个类来进行封装 ,实现类为BeanPropertyRowMapper
    
  62.      * 3 SQL语句中需要的参数 (可变参数)
    
  63.      * */
    
  64.     BeanPropertyRowMapper<Emp> rowMapper =new
    

    BeanPropertyRowMapper<>(Emp.class);

  65.     List<Emp> emps = jdbcTemplate.query("select * from emp where deptno
    

    =?", rowMapper, deptno);

  66.     return emps;
    
  67. }
    
  68. @Override
    
  69. public int addEmp(Emp emp) {
    
  70.     /*增删改
    
  71.      * 统统用update方法 两个参数
    
  72.      * 1 SQL语句
    
  73.      * 2 SQL语句需要的参数 (可变参数)
    
  74.      *
    
  75.      * */
    
  76.     String sql ="insert into emp values(DEFAULT ,?,?,?,?,?,?,?)";
    
  77.     Object[] args
    

    ={emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),em
    .getComm(),emp.getDeptno()};

  78.     return jdbcTemplate.update(sql,args);
    
  79. }
    
  80. @Override
    
  81. public int updateEmp(Emp emp) {
    
  82.     String sql ="update emp set ename =? , job =?, mgr=? , hiredate =?,
    

    sal=?, comm=?, deptno =? where empno =?";

  83.     Object[] args
    

    ={emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),em
    .getComm(),emp.getDeptno(),emp.getEmpno()};

  84.     return jdbcTemplate.update(sql,args);
    
  85. }
    
  86. @Override
    
  87. public int deleteEmp(int empno) {
    
  88.     String sql ="delete  from emp where empno =?";
    
  89.     return jdbcTemplate.update(sql, empno);
    
  90. }
    
  91. }

6 测试代码

  1. package com.msb.test;
  2. import com.msb.pojo.Emp;
  3. import com.msb.service.EmpService;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import java.util.Date;
  8. import java.util.List;
  9. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  10. */
  11. public class Test1 {
  12. @Test
    
  13. public void testEmpService(){
    
  14.     ApplicationContext context=new
    
    ClassPathXmlApplicationContext("applicationContext.xml");
  15.     EmpService empService = context.getBean(EmpService.class);
    
  16.     // 查询员工个数
    
  17.     /*int empCount = empService.findEmpCount();
    
  18.     System.out.println(empCount);*/
    
  19.     // 根据员工编号查询员工对象
    
  20.    /* Emp byEmpno = empService.findByEmpno(7521);
    
  21.     System.out.println(byEmpno);*/
    
  22.    /*根据部门编号查询多个员工对象集合*/
    
  23.     /*List<Emp> emps = empService.findByDeptno(20);
    
  24.     emps.forEach(System.out::println);*/
    
  25.     /*增加员工信息*/
    
  26.     /*int rows = empService.addEmp(new Emp(null, "TOM", "SALESMAN",
    
    7521, new Date(), 2000.0, 100.0, 10));
  27.     System.out.println(rows);*/
    
  28.     /*根据员工编号修改员工信息*/
    
  29.     /*int rows = empService.updateEmp(new Emp(7939, "JERRY", "MANAGER",
    
    7839, new Date(), 3000.0, 0.0, 20));
  30.     System.out.println(rows);*/
    
  31.     /*根据员工编号删除员工信息*/
    
  32.     /*int rows = empService.deleteEmp(7939);
    
  33.     System.out.println(rows);*/
    
  34. }
    
  35. }

Generated with Mybase Desktop 8.2.13