• mybatis03与spring的集成


    目录

    前言:

    Spring集成MyBatis实现步骤

    1.添加相关依赖

    注:spring 5.0.1.RELEASE有冲突

            1.1 添加spring相关依赖(5.0.2.RELEASE)🎁🎁🎁🎁🎁🎁

            1.2 添加mybatis相关依赖🎨🎨🎨

            1.3 spring整合mybatis(1.3.1)👑👑👑

            1.4 添加dbcp2连接池🎃🎃🎃

            1.5 添加日志配置(2.9.1)🎇🎇🎇

            1.6 其他🎀🎀🎀

    注:使用mybatis-generator插件,pom文件添加支持   

    2.创建spring配置文件applicationContext

    3.注解式开发

    4.Spring Test+Junit完美组合

            4.1 在工程的pom文件中增加spring-test的依赖

            4.2 创建BaseTestCase,并在该类上加上两个注解

            4.3 使用idean的junit插件(JUnitGenerator V2.0)生成测试用例

            4.4 在执行单元测试时,为了避免产生脏数据,可将测试单元设置成事务回滚

    以下是执行结果🎄🎄🎄

     5.修改分页代码

    附录一:DBCP


    前言:

    将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合。实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理。spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。

    Spring集成MyBatis实现步骤

    1.添加相关依赖

    注:spring 5.0.1.RELEASE有冲突

    1.1 添加spring相关依赖(5.0.2.RELEASE)🎁🎁🎁🎁🎁🎁

           spring-core
           spring-beans
           spring-context
           spring-orm
           spring-tx
           spring-aspects
           spring-web

    1.2 添加mybatis相关依赖🎨🎨🎨

           mybatis核心:mybatis(3.4.5)
           Mybatis分页:pagehelper(5.1.2)

    1.3 spring整合mybatis(1.3.1)👑👑👑

            mybatis-spring

    1.4 添加dbcp2连接池🎃🎃🎃

           commons-dbcp2(2.1.1)
           commons-pool2(2.4.3)

    1.5 添加日志配置(2.9.1)🎇🎇🎇

           log4j-core
           log4j-api
           log4j-web

    1.6 其他🎀🎀🎀

           junit(4.12)
           javax.servlet-api(4.0.0)

    注:使用mybatis-generator插件,pom文件添加支持   

    2.创建spring配置文件applicationContext

    2.1 注解式开发

    1. 开启注解
    2. <context:annotation-config/>
    3. <context:component-scan base-package="com.zking.oa"/>

    2.2 引入外部jdbc配置文件

    <context:property-placeholder location="classpath:jdbc.properties"/>

    2.3 配置dbcp2数据库连接池

    1. <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    2. destroy-method="close">
    3. <property name="driverClassName" value="${jdbc.driver}"/>
    4. <property name="url" value="${jdbc.url}"/>
    5. <property name="username" value="${jdbc.username}"/>
    6. <property name="password" value="${jdbc.password}"/>
    7. <property name="initialSize" value="10"/>
    8. <property name="maxTotal" value="100"/>
    9. <property name="maxIdle" value="50"/>
    10. <property name="minIdle" value="10"/>
    11. <property name="maxWaitMillis" value="-1"/>
    12. bean>

    2.4 spring和mybatis整合

    1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    2. <property name="dataSource" ref="dataSource"/>
    3. <property name="mapperLocations" value="classpath*:com/zking/ssm/**/mapper/*.xml"/>
    4. <property name="typeAliasesPackage" value="com/zking/ssm/**/model"/>
    5. <property name="plugins">
    6. <array>
    7. <bean class="com.github.pagehelper.PageInterceptor">
    8. <property name="properties">
    9. <value>
    10. helperDialect=mysql
    11. value>
    12. property>
    13. bean>
    14. array>
    15. property>
    16. bean>
    17. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    18. <property name="basePackage" value="com/zking/ssm/**/mapper"/>
    19. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    20. bean>

    2.5 注解式事物配置

    1. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    2. <property name="dataSource" ref="dataSource" />
    3. bean>
    4. <tx:annotation-driven transaction-manager="transactionManager" />

    2.6 开启动态代理

     <aop:aspectj-autoproxy/>

    3.注解式开发

       @Repository:将Mapper类声明为Bean
       @Service:通常作用在业务层
       @Controller:通常作用在控制层,将在Spring MVC中使用
       @Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次

       @Scope:模式声明(singleton|prototype)

       @Autowired:将自动在Spring上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
       @Resource:后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配,任何一个不匹配都将报错
       @Transactional
       注:个人感觉注解式事务比以前的声明式事务更加麻烦,要写的东西更多

    问题:@Autowired和@Resource两个注解的区别:

    1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
       Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

    4.Spring Test+Junit完美组合

    4.1 在工程的pom文件中增加spring-test的依赖

    1. <dependency>
    2. <groupId>org.springframeworkgroupId>
    3. <artifactId>spring-testartifactId>
    4. <version>${spring.version}version>
    5. dependency>

    4.2 创建BaseTestCase,并在该类上加上两个注解

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(locations={"classpath:applicationContext.xml"})

    4.3 使用idean的junit插件(JUnitGenerator V2.0)生成测试用例

       注1:还需要修改相关配置,详情参考资料:“IDEA Junit4配置.mht”
       注2:快捷键,Ctrl + Shift + T

    4.4 在执行单元测试时,为了避免产生脏数据,可将测试单元设置成事务回滚

    1. @Rollback(value = true|false)//true回滚事务,false提交事务
    2. @Transactional(transactionManager = "transactionManager")

    以下是执行结果🎄🎄🎄

     5.修改分页代码

    注意:记得开动态代理
            使用AOP编程解决分页代码重复的问题
            @Around("execution(* *..*Service.*pager(..))")
            public Object invoke(ProceedingJoinPoint args)
    语法结构:execution(方法修饰符  方法返回值  方法所属类 匹配方法名 (  方法中的形参表 ) 方法申明抛出的异常  )
            "*"  :代表一个任意类型的参数;
            “..”:代表零个或多个任意类型的参数。

    建立分页类

    1. package com.dzl.aspect;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.dzl.util.PageBean;
    5. import org.aspectj.lang.ProceedingJoinPoint;
    6. import org.aspectj.lang.annotation.Around;
    7. import org.aspectj.lang.annotation.Aspect;
    8. import org.springframework.stereotype.Component;
    9. import java.util.List;
    10. @Component
    11. @Aspect
    12. public class PagerAspect {
    13. /*定义规则*/
    14. @Around("execution(* *..*Service.*Pager(..))")
    15. public Object invoke(ProceedingJoinPoint args) throws Throwable {
    16. Object[] params = args.getArgs();//argument 参数的缩写
    17. PageBean pageBean = null;
    18. for (Object param : params) {
    19. if(param instanceof PageBean){
    20. pageBean = (PageBean)param;
    21. break;
    22. }
    23. }
    24. if(pageBean != null && pageBean.isPagination()){
    25. PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    26. }
    27. Object list = args.proceed(params);
    28. if(null != pageBean && pageBean.isPagination()){
    29. PageInfo pageInfo = new PageInfo((List) list);
    30. pageBean.setTotal(pageInfo.getTotal()+"");
    31. }
    32. return list;
    33. }
    34. }

    Mapper层

    1. @Test
    2. public void testPager() {
    3. System.out.println("分页--");
    4. Map map = new HashMap();
    5. map.put("bname","圣墟");
    6. // PageBean pageBean = new PageBean();
    7. // pageBean.setPage(2);
    8. // 不分页
    9. // pageBean.setPagination(false);
    10. List m = this.bookService.listPager(map,new PageBean());
    11. System.out.println(m);
    12. }

    Service层

    public List listPager(Map map, PageBean pageBean);

    测试

    1. @Test
    2. public void testPager() {
    3. System.out.println("分页--");
    4. Map map = new HashMap();
    5. map.put("bname","圣墟");
    6. // PageBean pageBean = new PageBean();
    7. // pageBean.setPage(2);
    8. // 不分页
    9. // pageBean.setPagination(false);
    10. List m = this.bookService.listPager(map,new PageBean());
    11. System.out.println(m);
    12. }

    以下是执行结果

    附录一:DBCP

     注:dbcp是apache上的一个java 连接池项目
              现在分成了3个大版本,不同的版本要求的JDK不同:
              DBCP 2 compiles and runs under Java 7 only (JDBC 4.1)
              DBCP 1.4 compiles and runs under Java 6 only (JDBC 4)
              DBCP 1.3 compiles and runs under Java 1.4-5 only (JDBC 3)

    以上就是今天的分享,祝大家周末愉快!!!

  • 相关阅读:
    Haproxy集群调度器与部署
    iNFTnews | “幻核”停售数字藏品,腾讯元宇宙又将如何发展?
    一些常用的兼容性测试方法和技巧
    神奇的兔子序列
    Python库学习(八):Numpy[续篇二]:数组操作
    LeetCode 面试题 03.02. 栈的最小值
    用于AGV物流机器人的爱普生陀螺仪传感器XV7000系列
    华为HCIP—Datacom(821新增)
    ps滤镜插件怎么安装上去,ps神经网络滤镜安装包
    Elastic Search 环境搭建
  • 原文地址:https://blog.csdn.net/m0_62246061/article/details/126802005