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.target}
${project.build.sourceEncoding}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
${mysql.version}
true
mybatis_spring
注:配置文件的所有路径都需根据自身修改。
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.1 @Repository 是 Spring 框架中的一个注解,它用于标记一个类为数据访问层(DAO)的组件。被标记为 @Repository 的类通常用于执行数据库操作,例如查询、插入、更新和删除等。
作用:1.自动扫描和装配 2.异常转换 3.事务支持
4.2 @Service 是 Spring 框架中的一个注解,它用于标记一个类为业务逻辑层(Service)的组件。被标记为 @Service 的类通常用于实现业务逻辑的处理和协调,它们通常会调用 DAO 层的方法来进行数据访问和持久化操作。
4.3 实体便捷注释
package com.wenhao.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//1.18.2
//萝卜组件的的作用:相当于get,set,tostring
@Data
//相当于get,set,tostring
@AllArgsConstructor
//有参构造
@NoArgsConstructor
//无参构造器
public class Book {
private Integer bid;
private String bname;
private Float price;
}
这里用到的三种注解方法:
5.1 @Autowired:用于自动装配依赖关系。通过该注解,可以将一个对象自动注入到另一个对象中,省去了手动配置依赖关系的步骤。
5.2 @RunWith 是 JUnit 框架中的一个注解,它用于指定运行测试类的运行器(Runner)。运行器是 JUnit 框架的一部分,它负责执行测试类中的测试方法,并提供额外的功能和扩展。
5.3 @ContextConfiguration 是 Spring 框架中的一个注解,它用于指定测试类或测试方法运行时的 Spring 上下文配置。它告诉测试框架在运行测试之前加载指定的 Spring 配置文件或配置类,并创建相应的 Spring 上下文。
测试
package com.wenhao.aspect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wenhao.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;
/**
* @ 用户 liwen
* @当前日期 2023/8/25
* @当前项目名称 ssm
*/
@Aspect
//代表切面类
@Component
//代表将此类交给spring管理
public class PagerAspect {
//*:任意返回值
// *..代表任意包
// *service :以service结尾的类
//以pager结尾的方法,..:任意参数
// 符合上述条件的,即为目标类以及目标方法
@Around("execution(* *..*biz.*pager(..))")
public Object invoke(ProceedingJoinPoint args) throws Throwable {
PageBean page = null;
//获取目标方法中的所有参数
Object[] ags = args.getArgs();
// 遍历
for (Object param : ags) {
// 如果有个参数是pagebean
if (param instanceof PageBean) {
// 就将参数进行强转
page = (PageBean) param;
break;
}
}
//如果pagebean不为空,开启分页
if (page!=null && page.isPagination())
PageHelper.startPage(page.getPage(),page.getRows());
// 执行目标方法
Object lst = args.proceed();
if (page!=null && page.isPagination())
// 示例pageinfo获取参数
{
PageInfo pageInfo = new PageInfo((List) lst);
page.setTotal((int) pageInfo.getTotal());
System.out.println("haha"+pageInfo.getPages());
}
return lst;
}
}
@Around("execution(* *..*Biz.*Pager2(..))") 这个表达式是一个切点表达式,用于定义一个切点,以便在使用 AspectJ 或 Spring AOP 进行方法拦截时进行匹配。
@Around:这是一个通知类型的注解,表示在目标方法执行前后都会执行通知逻辑。
"execution(* *..* Service.*Pager(..))":这是切点表达式的一部分,用于匹配符合条件的方法。具体解释如下:
execution:表示匹配方法的执行。
*:表示匹配任意返回类型。
*..*:表示匹配任意包名和子包名。
Biz:表示匹配包含 "Biz" 字符串的类名。
*pagePager2:表示匹配以 "pagePager2" 结尾的方法名。
(..):表示匹配任意参数列表。
综合起来,这个切点表达式的含义是:匹配任意返回类型、任意包名和子包名下的包含 "Service" 字符串的类中以 "Pager" 结尾的方法,并在这些方法执行前后执行通知逻辑。
@Test
public void querypager() {
Map map= new HashMap();
map.put("bname","圣墟");
PageBean page= new PageBean();
page.setPage(2);
page.setRows(10);
book.querypager(map,page).forEach(System.out::println);
}
运行结果: