行业知识
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.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分页插件整合到这就结束啦!!
祝各位友友们身体健康,工作顺利!!
上一篇:我的世界怎么架设服务器?
下一篇:机房服务器怎么连通网络?