Spring整合JDBCTemplate实现数据库增删改查操作

SpringJDBC:

正常jdbc连接数据库流程:

1.注册驱动
2. 获取连接
2. 获取Statement或者PreparedStatement对象
3. 执行sql操作
4. 处理结果集 查询的时候会有结果集
5. 关闭资源

spring框架: http://www.spring.io

使用spring data jdbc流程:

数据库准备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开始项目

  1. 创建maven web project
    创建maven web project
  2. pom.xml文件导入相关依赖
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dxj</groupId>
  <artifactId>Spring_JDBC</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <!-- spring版本号 -->
    <spring.version>4.3.14.RELEASE</spring.version>

    <!-- log4j日志文件管理包版本 -->
    <slf4j.version>1.7.22</slf4j.version>
    <log4j.version>1.2.17</log4j.version>


  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <!-- spring -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>
    

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-instrument</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-instrument-tomcat</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>


    <!-- mybatis 包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

    <!--mybatis spring 插件 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.45</version>
    </dependency>



    <!-- 上传下载 -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>8.0</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>8.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.1</version>
      <classifier>jdk15</classifier>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>


    <!-- pagehelper分页插件 -->
    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
    <dependency>
      <groupId>com.github.jsqlparser</groupId>
      <artifactId>jsqlparser</artifactId>
      <version>0.9.5</version>
    </dependency>

    <!-- poi上传下载组件 -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.14-beta1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml-schemas</artifactId>
      <version>3.14-beta1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.14-beta1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
    <dependency>
      <groupId>org.apache.xmlbeans</groupId>
      <artifactId>xmlbeans</artifactId>
      <version>2.6.0</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>

  </dependencies>

</project>

  1. 创建application.xml文件 spring配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!--驱动名-->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!--url-->
        <property name="url" value="jdbc:mysql://localhost:3306/javaweb?characterEncoding=utf-8&amp;useSSL=false"/>
        <!--用户名和密码-->
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
     </bean>

    <!--配制JDBC模板-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--组件扫描-->
    <context:component-scan base-package="com.dxj"/>

    <!--aop注解支持-->
    <aop:aspectj-autoproxy/>
    
</beans>

  1. 创建实体类,dao层代码,service层代码,编写相应逻辑
    ​ Student:
package com.dxj.pojo;

public class Student {
    
    
    int id;
    String username;
    String userclass;
    int userno;

    public Student() {
    
    
    }

    public Student(int id, String username, String userclass, int userno) {
    
    
        this.id = id;
        this.username = username;
        this.userclass = userclass;
        this.userno = userno;
    }

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getUserclass() {
    
    
        return userclass;
    }

    public void setUserclass(String userclass) {
    
    
        this.userclass = userclass;
    }

    public int getUserno() {
    
    
        return userno;
    }

    public void setUserno(int userno) {
    
    
        this.userno = userno;
    }

    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", userclass='" + userclass + '\'' +
                ", userno=" + userno +
                '}';
    }
}

StudentDao:

package com.dxj.dao;

import com.dxj.pojo.Student;

import java.util.List;

public interface StudentDao {
    
    
    public List<Student> queryAll();

    public Student queryOneId(int id);

    public void insertStu(Student student);

    public void deleteStu(int id);

    public void updateStu(Student student);
}


  1. dao实现类里面 注入 JdbcTemplate

    StudentDaoImpl:

package com.dxj.dao.impl;

import com.dxj.dao.StudentDao;
import com.dxj.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class StudentDaoImpl implements StudentDao {
    
    
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Student> queryAll() {
    
    
        String sql = "select * from stu";
        RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);
        return jdbcTemplate.query(sql,rowMapper);
    }

    @Override
    public Student queryOneId(int id) {
    
    
        String sql = "select * from stu where id = ?";
        RowMapper<Student> rowMapper = new BeanPropertyRowMapper<>(Student.class);
        return  jdbcTemplate.queryForObject(sql, rowMapper, id);
    }

    @Override
    public void insertStu(Student student) {
    
    
        String sql = "INSERT INTO `stu`(`id`, `username`, `userclass`, `userno`) VALUES (?, ?, ?, ?)";
         jdbcTemplate.update(sql, student.getId(), student.getUsername(), student.getUserclass(), student.getUserno());
    }

    @Override
    public void deleteStu(int id) {
    
    
        String sql = "delete from stu where id=?";
        jdbcTemplate.update(sql,id);
    }

    @Override
    public void updateStu(Student student) {
    
    
        String sql = "UPDATE `stu` SET `username` = ?, `userclass` = ?, `userno` = ? WHERE `id` = ?";
        jdbcTemplate.update(sql,student.getUsername(),student.getUserclass(),student.getUserno(),student.getId());
    }
}

  1. 实现增删改查相应操作

StudentService:

package com.dxj.service;

import com.dxj.pojo.Student;

import java.util.List;

public interface StudentService {
    
    
    public void queryAll();

    public void queryOneId(int id);

    public void insertStu(Student student);

    public void deleteStu(int id);

    public void updateStu(Student student);
}

StudentServiceImpl:

package com.dxj.service.impl;

import com.dxj.dao.StudentDao;
import com.dxj.pojo.Student;
import com.dxj.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentServiceImpl implements StudentService {
    
    
    @Autowired
    private StudentDao studentDao;

    @Override
    public void queryAll() {
    
    
        List<Student> students = studentDao.queryAll();
        System.out.println(students);
    }

    @Override
    public void queryOneId(int id) {
    
    
        Student student = studentDao.queryOneId(id);
        System.out.println(student);
    }

    @Override
    public void insertStu(Student student) {
    
    
        studentDao.insertStu(student);
    }

    @Override
    public void deleteStu(int id) {
    
    
        studentDao.deleteStu(id);
    }

    @Override
    public void updateStu(Student student) {
    
    
        studentDao.updateStu(student);
    }
}

7.单元测试
test1:

import com.dxj.pojo.Student;
import com.dxj.service.StudentService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test1 {
    
    

    @Test
    //查看所有学生
    public void testqueryAll(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);
        studentService.queryAll();
    }

    @Test
    //查看一个学生
    public void testqueryOneId(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);
        studentService.queryOneId(2);
    }

    @Test
    //添加一个学生
    public void testinsertStu(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);

        Student student = new Student(3,"张三","计科一班",2018000120);
        studentService.insertStu(student);
    }

    @Test
    //删除一个学生
    public void testdeleteStu(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);

        studentService.deleteStu(4);
    }

    @Test
    //更改学生信息
    public void testupdateStu(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);

        Student student = new Student(4,"熊二","借读生",2018220157);
        studentService.updateStu(student);
    }
}

增加AOP切入功能:

在service层增删改查逻辑里面切入时间日志:

  1. 编写切面类Logger
package com.dxj.pojo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@Aspect
public class Logger {
    
    

    Date date = new Date();

    @Around("execution(* com.dxj.service.impl.*.*(..))")
    public void logger(ProceedingJoinPoint joinPoint) throws Throwable {
    
    
        System.out.println("开始执行时间:"+date);
        joinPoint.proceed();
        System.out.println("执行结束时间:"+date);
    }
}

  1. 配置切面注解支持
    <!--aop注解支持-->
       <aop:aspectj-autoproxy/>   //上述代码中已经配置
  1. 测试调用
@Test
    //查看所有学生
    public void testqueryAll(){
    
    
        ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = dxj.getBean(StudentService.class);
        studentService.queryAll();
    }
  1. 运行结果
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53696057/article/details/115394657
今日推荐