Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍

一,spring集成Mybatis的概念

    Spring 整合 MyBatis 是将 MyBatis 数据访问框架与 Spring 框架进行集成,以实现更便捷的开发和管理。在集成过程中,Spring 提供了许多特性和功能,如依赖注入、声明式事务管理、AOP 等

它所带来给我们的好处(优点)有哪些?(大致5点)

便捷的配置管理:

    通过 Spring 的 XML 配置文件,我们可以集中管理 MyBatis 的配置信息、数据源设置、事务管理等。这样可以降低配置复杂度,并使配置更加灵活和可维护。

轻松的事务管理:

     通过整合 Spring 的事务管理机制,我们可以简单地配置声明式事务,避免手动编写繁琐的事务代码。当我们调用 MyBatis 的数据库操作时,自动实现事务的开启、提交或回滚。

松耦合的编程模型:

      通过 Spring 的依赖注入(DI)机制,我们可以将 DAO 接口的实例注入到业务层中,而无需直接实例化和管理 DAO 对象。这种松耦合的编程模型提高了代码的可读性和可维护性,同时也支持面向接口的编程。

兼容其他 Spring 生态系统组件:

      因为 MyBatis 集成到 Spring 中,可以很方便地与其他 Spring 组件进行集成,如 Spring MVC、Spring Security、Spring Boot 等。以实现全栈的应用开发,并享受 Spring 提供的众多特性和功能。

更好的测试支持:

    综上所述,Spring 整合 MyBatis 可以提供更便捷可靠的数据库访问方式,降低开发复杂度,并利用 Spring 框架的诸多特性优势,提高代码质量和可维护性,同时也能更好地配合其他 Spring 相关组件使用,构建出完善的应用系统。

二,spring整合Mybatis

创建一个mudule项目并修改其中的pom.xml依赖文件,因为需要下载相关的插件,要连接网络

2.1 导入的pom.xml依赖




  4.0.0

  com.LiuBing
  LiuBing_ssm
  1.0-SNAPSHOT
  war

  LiuBing_ssm Maven Webapp
  
  http://www.example.com

  
    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}

    
    
      javax.servlet
      javax.servlet-api
      ${servlet.version}
      provided
    
    
      org.projectlombok
      lombok
      ${lombok.version}
      provided
    
    
      org.junit.jupiter
      junit-jupiter
      RELEASE
      compile
    
  


  
    LiuBing_ssm
    
      
      
        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
          
        

        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
  

 2.2 XML文件配置

注意:该配置文件根据自身情况来

  1 spring-context.xml : spring框架与mybatis整合配置文件的加载到spring的上下文 

    2 spring-mybatis.xml :数据源

   3 generatorConfig.xml  :配置代码生成器

   

   4 log4j2.xml :日志文件

   

    5  jdbc.properties  :配置数据库连接

创建spring-mybatis.xml文件并配置:

注意:配置的时候要注意包名的大小写问题,以防万一生成模型层层代码时会有错误



    
    
    
    
    

    

    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                            helperDialect=mysql
                        
                    
                
            
        
    

    
    
    
        
        
        
        
    

    
        
    
    
    

spring-context.xml 配置:




    
    

generatorConfig.xml :




    
    

    
    

    
    
        
        
            
             
        

        
        

        
        
            
            
        

        
        
        
        
            
            
            
            
            
            
            
            
        

        
        
            
            
        

        
        
        
        
        
            
            
        

        
        
        
        
        
        
        
        
        
        
        
        
        

        

log4j2.xml :





	
		
		/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
	

	
		
		
			
			
			
			
			
		

		
		
		
			
		
		
		
			
			
			
			
				
				
				
				
				
				
			
		

		
			
			
			
				
				
			
			
			
		

		
			
			
			
				
				
				
			
		

	

	
	
		
		
		

		
		
		
		
		
		


		
		
			
			
			
			
		

	

jdbc.properties  :

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.username=root
jdbc.password=123456

2.3 利用mybatis逆向工程生成模型层层代码

注意:双击等待生成即可,生成完毕之后不要点了,以防万一生成两遍BookMapper模型代码

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍_第1张图片

双击之后等待生成模型层代码,等待完毕之后生成的类: 

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍_第2张图片

2.4 注解式

实体:

@Data //相当于set get toString方法
@AllArgsConstructor //有参构造器
@NoArgsConstructor //无参构造器
public class Book {
    private Integer bid;
    private String bname;
    private Float price;

编写Junit测试类

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍_第3张图片

上面用到的三种注解方法:

 @Autowired

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

 @RunWith

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

 @ContextConfiguration

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

运行结果:

 三、AOP整合pageHelper分页插件

1,创建一个AOP切面类

package com.Bing.aspect;

import com.Bing.util.PageBean;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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;

/**
 * @Name BingBing
 * @company zking cy
 * @create 2023-08-25-18:37
 */
@Aspect//代表当前类为切面类
@Component//代表当前类交给Spring进行管理
public class PageAspect {
    @Around("execution(* *..*Biz.*Page(..))")
    public Object invoke(ProceedingJoinPoint args) throws Throwable {
        PageBean pageBean =null;
           //获取目标方法中的所有参数
        Object[] arg = args.getArgs();
        for (Object param : arg){
          if(param instanceof  PageBean){
          pageBean= (PageBean) param;
          break;
      }
        }
        if (pageBean != null && pageBean.isPagination())
            PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
        //执行目标方法
         Object lst=  args.proceed();
            if (pageBean != null && pageBean.isPagination()) {
                PageInfo  info = new PageInfo ((List) lst);
                pageBean.setTotal((int) info.getTotal());

        }
            return lst;
    }
}

上面代码其中的代码解释:

@Around("execution(* *..*xxx.*xxx(..))") 表达式解析

 
@Around("execution(* *..*Biz.*Pager2(..))") 这个表达式是一个切点表达式,用于定义一个切点,以便在使用 AspectJ 或 Spring AOP 进行方法拦截时进行匹配。

  

@Around:这是一个通知类型的注解,表示在目标方法执行前后都会执行通知逻辑。

 
"execution(* *..* Service.*Pager(..))":这是切点表达式的一部分,用于匹配符合条件的方法。具体解释如下:
execution:表示匹配方法的执行。
*:表示匹配任意返回类型。
*..*:表示匹配任意包名和子包名。
Biz:表示匹配包含 "Biz" 字符串的类名。
*pagePager2:表示匹配以 "pagePager2" 结尾的方法名。
(..):表示匹配任意参数列表。

     

    综合起来,这个切点表达式的含义是:匹配任意返回类型、任意包名和子包名下的包含 "Service" 字符串的类中以 "Pager" 结尾的方法,并在这些方法执行前后执行通知逻辑。

编写测试:

  @Test
  public void listPage() {
    Book book =new Book();
    PageBean pageBean =new PageBean();
    pageBean.setPage(2);
    pageBean.setRows(13);
    book.setBname("圣墟");
    this.bookBiz.listPage(book,pageBean).forEach(System.out::println);

  }

运行结果:

Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍_第4张图片

你可能感兴趣的:(spring,mybatis,java,intellij-idea)