SpringJDBC:
正常jdbc连接数据库流程:
1.注册驱动
2. 获取连接
2. 获取Statement或者PreparedStatement对象
3. 执行sql操作
4. 处理结果集 查询的时候会有结果集
5. 关闭资源
spring框架: http://www.spring.io
使用spring data jdbc流程:
数据库准备
开始项目
- 创建maven web project
- 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>
- 创建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&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>
- 创建实体类,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);
}
-
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());
}
}
- 实现增删改查相应操作
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层增删改查逻辑里面切入时间日志:
- 编写切面类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);
}
}
- 配置切面注解支持
<!--aop注解支持-->
<aop:aspectj-autoproxy/> //上述代码中已经配置
- 测试调用
@Test
//查看所有学生
public void testqueryAll(){
ApplicationContext dxj = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentService studentService = dxj.getBean(StudentService.class);
studentService.queryAll();
}
- 运行结果