目录
一、Spring整合MyBatis
1. 导入pom依赖
2. 利用mybatis逆向工程生成模型层层代码
3. 编写配置文件
4. 注解式开发
5. 编写Junit测试类
二、AOP整合pageHelper分页插件
1. 创建一个AOP切面
2. @Around(“execution(* *..*xxx.*xxx(..))”) 表达式解析
3. 编写测试
一、Spring整合MyBatis
1. 导入pom依赖
1.1 添加spring相关依赖(5.0.2.RELEASE)
spring-core
spring-beans
spring-context
spring-orm
spring-tx
spring-aspects
spring-web
1.2 添加mybatis相关依赖
mybatis核心:mybatis(3.4.5)
Mybatis分页:pagehelper(5.1.2)
1.3 spring整合mybatis(1.3.1)
mybatis-spring
1.4 添加dbcp2连接池
commons-dbcp2(2.1.1)
commons-pool2(2.4.3)
1.5 添加日志配置(2.9.1)
log4j-core
log4j-api
log4j-web
1.6 其他
junit(4.12)
javax.servlet-api(4.0.0)
lombok(1.18.2)
4.0.0
org.example
mybatis_spring
war
1.0-SNAPSHOT
mybatis_spring Maven Webapp
http://maven.apache.org
UTF-8
1.8
1.8
3.7.0
5.0.2.RELEASE
3.4.5
5.1.44
5.1.2
1.3.1
2.1.1
2.4.3
2.9.1
4.12
4.0.0
1.18.2
org.springframework
spring-context
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
mysql
mysql-connector-java
${mysql.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
org.apache.commons
commons-dbcp2
${commons.dbcp2.version}
org.apache.commons
commons-pool2
${commons.pool2.version}
org.apache.logging.log4j
log4j-core
${log4j2.version}
org.apache.logging.log4j
log4j-api
${log4j2.version}
org.apache.logging.log4j
log4j-web
${log4j2.version}
junit
junit
${junit.version}
test
javax.servlet
javax.servlet-api
${servlet.version}
provided
org.projectlombok
lombok
${lombok.version}
provided
src/main/java
**/*.xml
src/main/resources
jdbc.properties
*.xml
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
${maven.compiler.source}
${maven.compiler.target}
${project.build.sourceEncoding}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
${mysql.version}
true
mybatis_spring
2. 利用mybatis逆向工程生成模型层代码
3. 编写配置文件
注:配置文件的所有路径都需根据自身修改。
3.1 在resources 目录下添加jdbc.properties 文件,用于配置数据库连接四要素。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
3.2 添加 generatorConfig.xml 配置代码生成器
<!--<!– –>-->
<!--<!– –>-->
3.3 添加log4j2日志文件
/root/workspace/lucenedemo/logs
/root/workspace/lucenedemo/logs/error
/root/workspace/lucenedemo/logs/warn
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n
3.4 添加spring-context.xml 上下文配置文件 ⭐
3.5 添加spring与mybatis整合的配置文件 spring-mybatis.xml ⭐
helperDialect=mysql
4. 注解式开发
4.1 @Repository 是 Spring 框架中的一个注解,它用于标记一个类为数据访问层(DAO)的组件。被标记为 @Repository 的类通常用于执行数据库操作,例如查询、插入、更新和删除等。
作用:1.自动扫描和装配 2.异常转换 3.事务支持
4.2 @Service 是 Spring 框架中的一个注解,它用于标记一个类为业务逻辑层(Service)的组件。被标记为 @Service 的类通常用于实现业务逻辑的处理和协调,它们通常会调用 DAO 层的方法来进行数据访问和持久化操作。
4.3 实体便捷注释
package com.ycxw.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //相当于set get toString方法
@AllArgsConstructor //有参构造器
@NoArgsConstructor //无参构造器
public class Book {
private Integer bid;
private String bname;
private Float price;
}
5. 编写Junit测试类
这里用到的三种注解方法:
5.1 @Autowired:用于自动装配依赖关系。通过该注解,可以将一个对象自动注入到另一个对象中,省去了手动配置依赖关系的步骤。
5.2 @RunWith 是 JUnit 框架中的一个注解,它用于指定运行测试类的运行器(Runner)。运行器是 JUnit 框架的一部分,它负责执行测试类中的测试方法,并提供额外的功能和扩展。
5.3 @ContextConfiguration 是 Spring 框架中的一个注解,它用于指定测试类或测试方法运行时的 Spring 上下文配置。它告诉测试框架在运行测试之前加载指定的 Spring 配置文件或配置类,并创建相应的 Spring 上下文。
这样就算是成功啦
二、AOP整合pageHelper分页插件
1. 创建一个AOP切面
package com.ycxw.aspect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycxw.utils.PageBean;
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.List;
/**
* @author 云村小威
* @site blog.csdn.net/Justw320
* @create 2023-08-25 19:58
*/
@Aspect //代表当前为切面类
@Component //代表当前类交给spring进行管理
public class PageAspect {
@Around("execution(* *..*Biz.*listPager2(..))")
public Object invoke(ProceedingJoinPoint args) throws Throwable {
PageBean pageBean = null;
//获取目标方法的所有参数
Object[] args1 = args.getArgs();
for (Object param:args1) {
if (param instanceof PageBean){
pageBean = (PageBean) param;
break;
}
}
if(pageBean!=null && pageBean.isPagination())
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
//执行目标方法
Object proceed = args.proceed();
if(pageBean!=null && pageBean.isPagination()){
PageInfo info = new PageInfo((List) proceed);
pageBean.setTotal((int) info.getTotal());
}
return proceed;
}
}
2. @Around(“execution(* *..*xxx.*xxx(..))”) 表达式解析
@Around(“execution(* *..*Biz.*Pager2(..))”) 这个表达式是一个切点表达式,用于定义一个切点,以便在使用 AspectJ 或 Spring AOP 进行方法拦截时进行匹配。
- @Around:这是一个通知类型的注解,表示在目标方法执行前后都会执行通知逻辑。
- “execution(* *..* Service.*Pager(..))”:这是切点表达式的一部分,用于匹配符合条件的方法。具体解释如下:
- execution:表示匹配方法的执行。
- *:表示匹配任意返回类型。
- *..*:表示匹配任意包名和子包名。
- Biz:表示匹配包含 “Biz” 字符串的类名。
- *pagePager2:表示匹配以 “pagePager2” 结尾的方法名。
- (..):表示匹配任意参数列表。
综合起来,这个切点表达式的含义是:匹配任意返回类型、任意包名和子包名下的包含 “Service” 字符串的类中以 “Pager” 结尾的方法,并在这些方法执行前后执行通知逻辑。
3. 编写测试
@Test
public void listPager2() {
Book book = new Book();
PageBean pageBean = new PageBean();
pageBean.setPage(1);
pageBean.setRows(10);
book.setBname("圣墟");
bookBiz.listPager2(book,pageBean).forEach(System.out::println);
}
运行结果: