MyBatis与Spring整合以及AOP和PageHelper分页插件整合

目录

前言

一、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分页插件整合到这就结束啦!!

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

你可能感兴趣的:(MyBatis,spring,java,后端,mybatis,maven,junit,log4j)