MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合
作者:mmseoamin日期:2023-12-18

目录

前言

一、MyBatis与Spring整合的好处以及两者之间的关系

1.好处

2.关系

 二、MyBatis和Spring集成

1.导入pom.xml

2.编写配置文件 

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

三、常用注解

 四、AOP整合pageHelper分页插件

创建一个切面

测试


前言

MyBatis是一个开源的持久层框架,而Spring是一个开源的应用程序框架。它们可以很好地集成在一起,以提供更强大和灵活的功能。 

一、MyBatis与Spring整合的好处以及两者之间的关系

1.好处

1. 事务管理:Spring提供了强大的事务管理功能,通过与MyBatis整合,可以将数据库操作纳入到Spring的事务管理范围内。这样可以确保数据库操作的一致性和完整性,同时简化了事务管理的配置和使用。

2. 依赖注入:Spring的依赖注入功能可以帮助我们更方便地管理和使用MyBatis的Mapper接口和SqlSessionFactory等对象。通过依赖注入,我们可以将这些对象注入到需要使用的地方,避免了手动创建和管理对象的繁琐工作。

3. AOP支持:Spring的AOP(面向切面编程)功能可以帮助我们在数据库操作前后添加额外的逻辑,比如日志记录、性能监控等。通过与MyBatis整合,我们可以使用Spring的AOP功能来增强数据库操作的功能和效果。

4. 统一配置管理:通过整合,我们可以将MyBatis的配置文件和Spring的配置文件进行统一管理。这样可以简化配置的维护和管理,提高代码的可读性和可维护性。

5. 更好的扩展性:整合后,我们可以更方便地扩展和定制MyBatis和Spring的功能。比如,可以通过自定义插件来扩展MyBatis的功能,或者通过自定义BeanPostProcessor来扩展Spring的功能。

2.关系

1.MyBatis和Spring是两个独立的框架,它们在Java开发中常常一起使用,但并不是必须要搭配使用。

2.MyBatis是一个持久层框架,它提供了一种将数据库操作与Java对象映射起来的方式。通过配置SQL映射文件,我们可以将数据库的查询、插入、更新等操作与Java代码解耦,使得数据库操作更加灵活和可维护。

3.Spring是一个全功能的应用程序开发框架,它提供了很多功能,包括依赖注入、AOP、事务管理等。Spring的核心思想是面向切面编程(AOP)和控制反转(IoC),它可以帮助我们更好地组织和管理应用程序的各个组件。

4.在实际开发中,我们可以将MyBatis和Spring结合使用,以发挥它们各自的优势。通过Spring的依赖注入,我们可以将MyBatis的SqlSessionFactory和Mapper注入到Spring的容器中,从而实现对数据库的访问。同时,Spring还提供了事务管理的功能,可以帮助我们管理数据库操作的事务。

注意: mybatis与spring集成,其实就是将SqlSessionFactory的创建交给spring管理

 二、MyBatis和Spring集成

1.导入pom.xml



  4.0.0
  com.ctb
  ssm
  1.0-SNAPSHOT
  war
  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}
      test
    
    
      javax.servlet
      javax.servlet-api
      ${servlet.version}
      provided
    
    
      org.projectlombok
      lombok
      ${lombok.version}
      provided
    
  
  
    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
        
      
  

数据库连接池:

会初始化N个数据库连接对象,一般为10个,当需要用户请求需要操作数据库的时候,那么就会直接在数据库连接池中获取连接,用完会放回连接池中。

2.编写配置文件 

添加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

添加 generatorConfig.xml 配置代码生成器




    
    
    
    
    
    
        
        
            
             
        
        
        
        
        
            
            
        
        
        
        
        
            
            
            
            
            
            
            
            
        
        
        
            
            
        
        
        
        
        
        
            
            
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

添加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
	
	
		
		
			
			
			
			
			
		
		
		
		
			
		
		
		
			
			
			
			
				
				
				
				
				
				
			
		
		
			
			
			
				
				
			
			
			
		
		
			
			
			
				
				
				
			
		
	
	
	
		
		
		
		
		
		
		
		
		
		
		
			
			
			
			
		
	

添加spring-context.xml 上下文配置文件



 
    
    

  添加spring与mybatis整合的配置文件 spring-mybatis.xml



    
    
    
    
    
 
    
 
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
 
    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                            helperDialect=mysql
                        
                    
                
            
        
    
 
    
    
    
        
        
        
        
    
    
        
    
    
    

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

利用Idea中的mabatis-generator插件直接生成

MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第1张

三、常用注解

 @Repository将DAO类声明为Bean

MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第2张

 @Service用于修饰service层的组件

MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第3张

@Data

@AllArgsConstructor

@NoArgsConstructor

MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第4张

  • @Autowired注解用于自动装配依赖关系。当我们在一个类中使用@Autowired注解标记一个属性或者构造方法时,Spring容器会自动将匹配的Bean注入到这个属性或者构造方法中。这样可以避免手动创建对象和解决对象之间的依赖关系,提高代码的可维护性和灵活性。

  • @RunWith注解用于指定JUnit测试类的运行器。JUnit是一个用于编写和运行单元测试的框架,而@RunWith注解可以用来扩展JUnit的功能。通过使用不同的运行器,我们可以实现不同的测试场景,比如使用Spring的@RunWith(SpringRunner.class)来启动Spring容器进行集成测试。

  • @ContextConfiguration注解用于指定Spring容器的配置文件位置。在进行集成测试时,我们需要加载Spring容器来创建和管理Bean对象。@ContextConfiguration注解可以告诉Spring容器加载哪个配置文件,并根据配置文件中的定义创建相应的Bean对象。这样我们就可以在测试中使用Spring容器提供的依赖注入和其他功能。

    MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第5张

    其它注解 

    @Controller通常作用在控制层,将在Spring MVC中使用

    @Component是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次

    @Scope是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:singleton(单例)、prototype(多例)、Web 作用域(reqeust、session、globalsession)、自定义作用域。

    @Transactional声明式事务管理编程中使用的注解 

     四、AOP整合pageHelper分页插件

    创建一个切面

    MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第6张

    package com.ctb.aspect;
     
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.ctb.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;
     
    @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;
        }
    }

    测试

        @Test
        public void lstPage() {
            Book book = new Book();
            PageBean pageBean = new PageBean();
            pageBean.setPage(1);
            pageBean.setRows(10);
            book.setBname("圣墟");
            bookBiz.listPager2(book,pageBean).forEach(System.out::println);
        }

    测试结果

    MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第7张

     MyBatis与Spring整合以及AOP和PageHelper分页插件整合到这就结束啦!!😊

    祝各位友友们身体健康,工作顺利!!

    MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合,第8张