小工具知识网

当前位置: 首页 > 行业知识 > MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合

行业知识

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

2026-11-13 02:31:26 来源:互联网转载

目录

前言

一、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.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8jdbc.username=rootjdbc.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插件直接生成

三、常用注解

 @Repository将DAO类声明为Bean

 @Service用于修饰service层的组件

@Data

@AllArgsConstructor

@NoArgsConstructor

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

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

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

    其它注解 

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

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

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

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

     四、AOP整合pageHelper分页插件

    创建一个切面

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

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

上一篇:我的世界怎么架设服务器?

下一篇:机房服务器怎么连通网络?