相关推荐recommended
Spring 与【MyBatis 】和【 pageHelper分页插件 】整合
作者:mmseoamin日期:2024-02-20

目录

一、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逆向工程生成模型层代码

 Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第1张

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.事务支持

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第2张

4.2 @Service 是 Spring 框架中的一个注解,它用于标记一个类为业务逻辑层(Service)的组件。被标记为 @Service 的类通常用于实现业务逻辑的处理和协调,它们通常会调用 DAO 层的方法来进行数据访问和持久化操作。

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第3张

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测试类

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第4张

 这里用到的三种注解方法:

5.1 @Autowired:用于自动装配依赖关系。通过该注解,可以将一个对象自动注入到另一个对象中,省去了手动配置依赖关系的步骤。

5.2 @RunWith 是 JUnit 框架中的一个注解,它用于指定运行测试类的运行器(Runner)。运行器是 JUnit 框架的一部分,它负责执行测试类中的测试方法,并提供额外的功能和扩展。

5.3 @ContextConfiguration 是 Spring 框架中的一个注解,它用于指定测试类或测试方法运行时的 Spring 上下文配置。它告诉测试框架在运行测试之前加载指定的 Spring 配置文件或配置类,并创建相应的 Spring 上下文。 

这样就算是成功啦

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第5张

二、AOP整合pageHelper分页插件

1. 创建一个AOP切面

Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第6张

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(..))":这是切点表达式的一部分,用于匹配符合条件的方法。具体解释如下:
    1. execution:表示匹配方法的执行。
    2. *:表示匹配任意返回类型。
    3. *..*:表示匹配任意包名和子包名。
    4. Biz:表示匹配包含 "Biz" 字符串的类名。
    5. *pagePager2:表示匹配以 "pagePager2" 结尾的方法名。
    6. (..):表示匹配任意参数列表。

            综合起来,这个切点表达式的含义是:匹配任意返回类型、任意包名和子包名下的包含 "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);
        }

    运行结果:

    Spring 与【MyBatis 】和【 pageHelper分页插件 】整合,第7张