一.创建使用的数据表在Mysql数据库中spring中创建student表
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`major` varchar(255) DEFAULT NULL,
`bookNum` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('2', 'update', 'Ph', '10');
INSERT INTO `student` VALUES ('4', 'd', 'computer', '20');
INSERT INTO `student` VALUES ('5', 'test', 'Science', '30');
二.搭建开发环境
1.新建maven环境命名为studenttx_xml下一步直到完成
首先在pom.xmlzhong导入必要依赖如下:
<?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.lut</groupId>
<artifactId>studenttx_xml</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
</dependencies>
</project>
2.创建学生实体类
Student.java中代码如下:
package com.lut.domain;
public class Student {
private int id;
private String name;
private String major;
private int bookNum;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", major='" + major + '\'' +
", bookNum=" + bookNum +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getBookNum() {
return bookNum;
}
public void setBookNum(int bookNum) {
this.bookNum = bookNum;
}
}
3.创建持久层dao及实现
①IStudentDao.java
IStudentDao.java代码如下:
package com.lut.dao;
import com.lut.domain.Student;
public interface IStudentDao {
//通过name查询学生信息
Student findStudentByName(String studentName);
//通过id查询学生信息
Student findStudentById(Integer studentId);
//更新学生信息
void updateStudent(Student student);
}
②impl.StudentDaoImpl.java如下:
StudentDaoImpl.java实现代码如下:
package com.lut.dao.impl;
import com.lut.dao.IAccountDao;
import com.lut.domain.Account;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import java.util.List;
/**
* @author Roy
* @date 2020/7/27 15:00
* 账户的持久层实现类
*/
public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao {
public Account findAccountById(Integer accountId) {
List<Account>accounts= super.getJdbcTemplate().query("select * from account where id=?",new BeanPropertyRowMapper<Account>(Account.class),accountId);
return accounts.isEmpty()?null:accounts.get(0);
}
public Account findAccountByName(String accountName) {
List<Account>accounts= super.getJdbcTemplate().query("select * from account where name=?",new BeanPropertyRowMapper<Account>(Account.class),accountName);
if(accounts.isEmpty()){
return null;
}
if(accounts.size()>1){
throw new RuntimeException("结果集不唯一");
}
return accounts.get(0);
}
public void updateAccount(Account account) {
super.getJdbcTemplate().update("update account set name=?,money=? where id=?",
account.getName(),account.getMoney(),account.getId());
}
}
4.创建业务层service以及实现
①IStudentService如下
IStudentService.java中代码如下:
package com.lut.service;
import com.lut.domain.Student;
public interface IStudentService {
//通过name查询学生信息
Student findStudentByName(String studentName);
//通过id查询学生信息
Student findStudentById(Integer studentId);
//更新学生信息
void updateStudent(Student student);
}
②StudentServiceImpl.java如下:
StudentServiceImpl.java中代码如下:
package com.lut.service.impl;
import com.lut.dao.IStudentDao;
import com.lut.domain.Student;
import com.lut.service.IStudentService;
public class StudentServiceImpl implements IStudentService {
private IStudentDao studentDao;
public void setStudentDao(IStudentDao studentDao) {
this.studentDao = studentDao;
}
public Student findStudentByName(String studentName) {
return studentDao.findStudentByName(studentName);
}
public Student findStudentById(Integer studentId) {
return studentDao.findStudentById(studentId);
}
public void updateStudent(Student student) {
studentDao.updateStudent(student);
}
public void borrowBook(String targetName, String sourceName, int bookNum) {
//根据姓名查询被借书学生
Student source=studentDao.findStudentByName(sourceName);
//根据姓名查询借书学生
Student target=studentDao.findStudentByName(targetName);
//被借书学生bookNum减书
source.setBookNum(source.getBookNum()-bookNum);
//借书学生bookNum加书
target.setBookNum((target.getBookNum()+bookNum));
//更新被借书学生信息
studentDao.updateStudent(source);
//更新借书学生信息
studentDao.updateStudent(target);
}
}
5.在resources下面创建配置文件bean.xml
bean.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/spring?serverTimezone=UTC"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--配置持久层-->
<bean id="studentDao" class="com.lut.dao.impl.StudentDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置业务层-->
<bean id="studentService" class="com.lut.service.impl.StudentServiceImpl">
<property name="studentDao" ref="studentDao"></property>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--配置事务的属性-->
<tx:attributes>
<tx:method name="transfer" propagation="REQUIRED" read-only="false"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--配置AOP-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="pt1" expression="execution(* com.lut.service.impl.*.*(..))"></aop:pointcut>
<!--建立切入点表达式和事务通知的对应关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor>
</aop:config>
</beans>
6.创建测试类StudentTest测试控制
StudentTest.java中代码如下:
package com.lut.test;
import com.lut.service.IStudentService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class StudentTest {
@Test
public void testBorrow(){
//获取容器
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
//得到业务层对象
IStudentService studentService=(IStudentService)ac.getBean("studentService",IStudentService.class);
//执行方法
studentService.borrowBook("d","test",3);
}
}
测试成功示例成功完成