• Mybatis(整合spring)


    目录

    1、Mybatis与spring集成

    2、Aop整合分页插件


    1、Mybatis与spring集成

        1.1导入pom依赖

       

    1. <properties>
    2. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    3. <maven.compiler.source>1.8maven.compiler.source>
    4. <maven.compiler.target>1.8maven.compiler.target>
    5. <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
    6. <spring.version>5.0.2.RELEASEspring.version>
    7. <mybatis.version>3.4.5mybatis.version>
    8. <mysql.version>5.1.44mysql.version>
    9. <pagehelper.version>5.1.2pagehelper.version>
    10. <mybatis.spring.version>1.3.1mybatis.spring.version>
    11. <commons.dbcp2.version>2.1.1commons.dbcp2.version>
    12. <commons.pool2.version>2.4.3commons.pool2.version>
    13. <log4j2.version>2.9.1log4j2.version>
    14. <junit.version>4.12junit.version>
    15. <servlet.version>4.0.0servlet.version>
    16. <lombok.version>1.18.2lombok.version>
    17. properties>
    18. <dependencies>
    19. <dependency>
    20. <groupId>org.springframeworkgroupId>
    21. <artifactId>spring-contextartifactId>
    22. <version>${spring.version}version>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframeworkgroupId>
    26. <artifactId>spring-ormartifactId>
    27. <version>${spring.version}version>
    28. dependency>
    29. <dependency>
    30. <groupId>org.springframeworkgroupId>
    31. <artifactId>spring-txartifactId>
    32. <version>${spring.version}version>
    33. dependency>
    34. <dependency>
    35. <groupId>org.springframeworkgroupId>
    36. <artifactId>spring-aspectsartifactId>
    37. <version>${spring.version}version>
    38. dependency>
    39. <dependency>
    40. <groupId>org.springframeworkgroupId>
    41. <artifactId>spring-webartifactId>
    42. <version>${spring.version}version>
    43. dependency>
    44. <dependency>
    45. <groupId>org.springframeworkgroupId>
    46. <artifactId>spring-testartifactId>
    47. <version>${spring.version}version>
    48. dependency>
    49. <dependency>
    50. <groupId>org.mybatisgroupId>
    51. <artifactId>mybatisartifactId>
    52. <version>${mybatis.version}version>
    53. dependency>
    54. <dependency>
    55. <groupId>mysqlgroupId>
    56. <artifactId>mysql-connector-javaartifactId>
    57. <version>${mysql.version}version>
    58. dependency>
    59. <dependency>
    60. <groupId>com.github.pagehelpergroupId>
    61. <artifactId>pagehelperartifactId>
    62. <version>${pagehelper.version}version>
    63. dependency>
    64. <dependency>
    65. <groupId>org.mybatisgroupId>
    66. <artifactId>mybatis-springartifactId>
    67. <version>${mybatis.spring.version}version>
    68. dependency>
    69. <dependency>
    70. <groupId>org.apache.commonsgroupId>
    71. <artifactId>commons-dbcp2artifactId>
    72. <version>${commons.dbcp2.version}version>
    73. dependency>
    74. <dependency>
    75. <groupId>org.apache.commonsgroupId>
    76. <artifactId>commons-pool2artifactId>
    77. <version>${commons.pool2.version}version>
    78. dependency>
    79. <dependency>
    80. <groupId>org.apache.logging.log4jgroupId>
    81. <artifactId>log4j-coreartifactId>
    82. <version>${log4j2.version}version>
    83. dependency>
    84. <dependency>
    85. <groupId>org.apache.logging.log4jgroupId>
    86. <artifactId>log4j-apiartifactId>
    87. <version>${log4j2.version}version>
    88. dependency>
    89. <dependency>
    90. <groupId>org.apache.logging.log4jgroupId>
    91. <artifactId>log4j-webartifactId>
    92. <version>${log4j2.version}version>
    93. dependency>
    94. <dependency>
    95. <groupId>junitgroupId>
    96. <artifactId>junitartifactId>
    97. <version>${junit.version}version>
    98. <scope>testscope>
    99. dependency>
    100. <dependency>
    101. <groupId>javax.servletgroupId>
    102. <artifactId>javax.servlet-apiartifactId>
    103. <version>${servlet.version}version>
    104. <scope>providedscope>
    105. dependency>
    106. <dependency>
    107. <groupId>org.projectlombokgroupId>
    108. <artifactId>lombokartifactId>
    109. <version>${lombok.version}version>
    110. <scope>providedscope>
    111. dependency>
    112. dependencies>
    113. <resources>
    114. <resource>
    115. <directory>src/main/javadirectory>
    116. <includes>
    117. <include>**/*.xmlinclude>
    118. includes>
    119. resource>
    120. <resource>
    121. <directory>src/main/resourcesdirectory>
    122. <includes>
    123. <include>jdbc.propertiesinclude>
    124. <include>*.xmlinclude>
    125. includes>
    126. resource>
    127. resources>
    128. <plugin>
    129. <groupId>org.apache.maven.pluginsgroupId>
    130. <artifactId>maven-compiler-pluginartifactId>
    131. <version>${maven.compiler.plugin.version}version>
    132. <configuration>
    133. <source>${maven.compiler.source}source>
    134. <target>${maven.compiler.target}target>
    135. <encoding>${project.build.sourceEncoding}encoding>
    136. configuration>
    137. plugin>
    138. <plugin>
    139. <groupId>org.mybatis.generatorgroupId>
    140. <artifactId>mybatis-generator-maven-pluginartifactId>
    141. <version>1.3.2version>
    142. <dependencies>
    143. <dependency>
    144. <groupId>mysqlgroupId>
    145. <artifactId>mysql-connector-javaartifactId>
    146. <version>${mysql.version}version>
    147. dependency>
    148. dependencies>
    149. <configuration>
    150. <overwrite>trueoverwrite>
    151. configuration>
    152. plugin>

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

     SSM整合

    1、添加所有的pom依赖

    2、添加并配置整合的配置文件

            Spring:spring-context.xml

            Mybatis:mybatis.cfg.xml

            spring-mybatis.xml

                    1、扫描注解驱动

                    2、添加并管理数据源->管理sqlsession

                    3、扫描所有的mapper接口

                    4、添加事务管理器

                    

    添加applicationContext-mybatis.xml也就是  spring-mybatis.xml

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    4. xmlns:aop="http://www.springframework.org/schema/aop"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    6. <context:annotation-config/>
    7. <context:component-scan base-package="com.zwc.ssm"/>
    8. <context:property-placeholder location="classpath:jdbc.properties"/>
    9. <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    10. destroy-method="close">
    11. <property name="driverClassName" value="${jdbc.driver}"/>
    12. <property name="url" value="${jdbc.url}"/>
    13. <property name="username" value="${jdbc.username}"/>
    14. <property name="password" value="${jdbc.password}"/>
    15. <property name="initialSize" value="10"/>
    16. <property name="maxTotal" value="100"/>
    17. <property name="maxIdle" value="50"/>
    18. <property name="minIdle" value="10"/>
    19. <property name="maxWaitMillis" value="-1"/>
    20. bean>
    21. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    22. <property name="dataSource" ref="dataSource"/>
    23. <property name="mapperLocations" value="classpath*:com/zwc/ssm/**/mapper/*.xml"/>
    24. <property name="typeAliasesPackage" value="com/javaxl/ssm/**/model"/>
    25. <property name="plugins">
    26. <array>
    27. <bean class="com.github.pagehelper.PageInterceptor">
    28. <property name="properties">
    29. <value>
    30. helperDialect=mysql
    31. value>
    32. property>
    33. bean>
    34. array>
    35. property>
    36. bean>
    37. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    38. <property name="basePackage" value="com/javaxl/ssm/**/mapper"/>
    39. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    40. bean>
    41. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    42. <property name="dataSource" ref="dataSource" />
    43. bean>
    44. <tx:annotation-driven transaction-manager="transactionManager" />
    45. <aop:aspectj-autoproxy/>
    46. beans>

    javaBean交给Spring进行管理?

    在BookBizimpl上方提啊你啊@service注解

    相当于

    在属性上方添加@autowised

    相当于:

    标记Mapper接口被Spring所接管

    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" />
    5. <aop:aspectj-autoproxy/>

    事务管理器,管理事务的提交、回滚

    在test类加入注解:

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

     在属性前面加入注解:@Autowired

    测试: 

     

     测试成功代表我们成功整合

    2、Aop整合分页插件

    下图中两个if是同步的

    利用pageHelper分页,

    PageHelper.start与后续结果处理即PageInfo处理代码是完全重复的

    上述图中重复的即非核心的业务代码

    根据Spring Aop所学

    共性的非核心业务代码用通知解决

    核心业务代码,前面后面都需要添加 共性的非核心的业务代码,利用环绕通知解决

    分析:

    1.找到目标对象——>*Biz.*Pager以biz结尾类或者接口,pager方法

    2.写通知

            2.1 目标对象 该方法一定携带PageBean对象

            2.2 if(pageBean!=null&&pageBean.isPagination()){ // 拿到页数和行数 PageHelper.startPage(pageBean.getPage(),pageBean.getRows()); }

            2.3执行目标对象

            2.4 if(pageBean!=null&& pageBean.isPagination()){ // 处理结果的前提,是需要分页的 // maps经过第三方插件进行处理 分页 PageInfo info = new PageInfo(maps); pageBean.setTotal(info.getTotal()+""); }

    @aspect——>代表了通知/切面

    @component——>交个Spring进行管理

    创建切面包和类 

    PagerASpect:

    1. package com.zwc.ssm.aspect;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.zwc.ssm.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. /**
    11. * @authorzwc
    12. * @site www.javazwc.com
    13. * @company xxx公司
    14. * @create  2022-08-14 23:41
    15. */
    16. @Component
    17. @Aspect
    18. public class PagerAspect {
    19. /**
    20. * 第一个*代表返回值
    21. * 第二个*:代表无限包
    22. * *Service:以service结尾接口名
    23. * *Page:以Page结尾的方法
    24. * 只要同事匹配上述四个条件,就会被列为目标对象
    25. * 上述配置要生效,代理注解不能少
    26. * @param args
    27. * @return
    28. * @throws Throwable
    29. */
    30. @Around("execution(* *..*Service.*Pager(..))")
    31. public Object invoke(ProceedingJoinPoint args) throws Throwable {
    32. Object[] params = args.getArgs();
    33. PageBean pageBean = null;
    34. for (Object param : params) {
    35. if(param instanceof PageBean){
    36. pageBean = (PageBean)param;
    37. break;
    38. }
    39. }
    40. if(pageBean != null && pageBean.isPagination())
    41. PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    42. //执行目标方法
    43. Object list = args.proceed(params);
    44. if(null != pageBean && pageBean.isPagination()){
    45. PageInfo pageInfo = new PageInfo((List) list);
    46. pageBean.setTotal(pageInfo.getTotal()+"");
    47. }
    48. return list;
    49. }
    50. }

    test:

     

     

  • 相关阅读:
    ME21N 采购订单新增页签增强
    libevent、libev框架介绍
    vue.js毕业设计,基于vue.js前后端分离订座预约系统(H5移动项目) 开题报告
    JavaScript进阶 第四天笔记——深浅拷贝、this绑定、防抖节流
    gma 2 成书计划
    2022牛客暑期多校训练营4 个人题解
    从零开始搭建SpringBoot项目,并且用Mybatis进行数据查询(包含所用数据库)
    基于token进行登录,每次请求携带token
    前后端分离的大数据毕设项目之基于Spark+springboot+vue的共享单车数据存储系统的设计与实现
    ​k8s常用命令 ​
  • 原文地址:https://blog.csdn.net/qq_65345936/article/details/126291946