以此记录加深印象
目录
导包和一些前置工作
前期工作 有数据库表和 基础类的配置
配置相关文件
测试
Spring的所有集成必不可少的就是导包。
org.springframework
spring-aop
5.0.5.RELEASE
cglib
cglib
3.3.0
org.aspectj
aspectjweaver
1.8.13
org.springframework
spring-context
5.0.5.RELEASE
org.springframework
spring-jdbc
5.0.5.RELEASE
mysql
mysql-connector-java
8.0.28
org.mybatis
mybatis
3.5.1
org.mybatis
mybatis-spring
2.0.1
org.springframework
spring-tx
5.0.5.RELEASE
junit
junit
4.12
test
com.alibaba
druid
1.2.8
org.projectlombok
lombok
1.18.4
数据据库表 有自增id name age ,sex 四个字段
首先看一下项目的目录
pojo实体类:
package com.pojo;
import lombok.Data;
import org.springframework.stereotype.Component;
/**
* 用户
*
* @author 幕自由人
* @date 2022/04/09
*/
@Component
@Data//利用lombok的包自动生成get,set方法
public class User {
private int id;
private String name;
private int age;
private int sex;
}
mapper接口(也就是dao层)
@Mapper
public interface UserMapper {
/**
* 查询所有
*
*
* @return {@link List}<{@link User}>
*/
List queryAll();
/**
* 保存用户
*
* @param user 用户
* @return int
*/
int saveUser(User user);
/**
* 删除用户
*
* @param id id
* @return int
*/
int deleteUser(int id);
}
业务层:
public class UserServerImpl implements UserService {
/**
* 查询所有
*
* @return {@link List}<{@link User}>
*/
@Autowired
private UserMapper mapper;
@Override
public List queryAll() {
return mapper.queryAll();
}
/**
* 保存所有
*
* @param user 用户
* @return int
*/
@Override
public int saveAll(User user) {
int a=1/0;
return mapper.saveUser(user);
}
//重点,重点,重点
/**
* 测试事务是否能够执行成功
*
* @param user 用户
* @return int
*/
//该方法就用于测试事务是否成功!!
public void test(User user,int id){
mapper.deleteUser(id);
int a=1/0;
mapper.saveUser(user);
}
/**
* 删除用户
*
* @param id id
* @return int
*/
@Override
public int deleteUser(int id) {
return 0;
}
控制层
@Controller
public class UserController {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserServerImpl accountService = (UserServerImpl) app.getBean("server");
User user=new User();
user.setSex(2);
user.setAge(2);
user.setName("2");
//执行该方法测试事务是否配置成功
accountService.test(user,6);
System.out.println(user.getId());
}
}
的
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
连接数据库的参数 8.+的版本注意驱动要+cj. 以及时区参数 不然有时会报错的。
这里面可以配置类的别名,也可以在识别不了映射文件时,通过
在这里我把它给注释掉了 我将会在applicationContext.xml文件里进行配置mapper文件的路径地址
我的文件在resources的路径如下
配置applicationContext.xml文件时,就得细说一下了
第一步引入 properties文件 方便后面连接数据库
<-- 引入jdbc的配置文件-->
<-- 扫包-->
第二步 配置数据源对象。我这里用的是阿里的数据源包
第三步 把spring 和mybatis集成起来
classpath:mappers/UserMapper.xml
第四步 配置事务管理系统
第五步:配置事务声明与切面:
这个就是最重点的了
首先解释一下
isolation, propagation, timeout,read-only
isolation:事务的隔离级别 propogation:事务的传播行为 timeout:超时时间 read-only:是否只读
最后就是配置切面了 没有什么好说的 我之前也写了 aop的代理笔记的可以去我之前的文章看一下
完整的applicationContext.xml如下,如果不知道怎么配置 快速配置文件头则可以看我前面的spring 的笔记
classpath:mappers/UserMapper.xml
在配置applicationContext.xml的时候有个坑就是:
如果你需利用注解实现业务层的实现类注解注入时,你就需要导入cglib的坐标,才行应为jdk动态代理是不支持注解类注入的。只支持接口注入否则就需要改成 业务层的接口注入
与接口的几个方法对应就行
insert into `user` (`name`,age,sex)values (#{name},#{age},#{sex})
delete from `user` where id=#{id}
配置文件配置好过后,就能进行简单的测试了
首先把 错误打开
进行测试,如果没有配置事务的化。应该会执行删除用户id为2的操作,然后报错 ,
进行事务配置后,则会不执行删除用户操作直接报错
结果如下:
数据库表:
id为2还存在。
最后注掉 int a=1/0;后会执行删除id为2 且增加user
结果如下:
id 为二已删除 增加了 2 . 2. 2的用户信息
一个简单的事务管理就配置好了