• Mybatis整合spring


    目录

    一,Mybatis与spring集成

    二,Aop整合pagehelper插件


    一,Mybatis与spring集成


    导入pom依赖
    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)

           lombok(1.18.2)

    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逆向工程生成模型层层代码
    编写配置文件applicationContext-mybatis.xml

    3.1 注解式开发

       开启注解

       

       

       

       

       component-scan base-package="com.javaxl.ssm"/>

       3.2 引入外部jdbc配置文件

       

       3.3 配置dbcp2数据库连接池

       3.4 spring和mybatis整合

      

       3.5 注解式事物配置

       

           

       

       

       3.6 开启动态代理

       

    3.7 注解式开发

       @Repository:将DAO类声明为Bean

       @Service:通常作用在业务层

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

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

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

       @Autowired:将自动在代码上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方

       @Resource:

       1)@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配

       2)指定了name或者type则根据指定的类型去匹配bean

       3)指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

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

       1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配

       2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了

       Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

       @Transactional

    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.javaxl.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/javaxl/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>

     

    Spring Test+junit完美组合
    在工程的pom文件中增加spring-test的依赖

         

           org.springframework

           spring-test

           ${spring.version}

         

       

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

       @RunWith(SpringJUnit4ClassRunner.class)

       @ContextConfiguration(locations={"classpath:applicationContext.xml"})

    相关代码

    Service层

    1. package com.javaxl.ssm;
    2.  
    3. import com.javaxl.ssm.model.Book;
    4. import com.javaxl.ssm.model.PageBean;
    5. import org.junit.Before;
    6. import org.junit.runner.RunWith;
    7. import org.springframework.test.context.ContextConfiguration;
    8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    9.  
    10.  
    11. @RunWith(SpringJUnit4ClassRunner.class)
    12. @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    13. public class SpringJunitBaseTest {
    14.     protected Book book;
    15.     protected PageBean pageBean;
    16.  
    17.     @Before
    18.     public void setUp(){
    19.         book = new Book();
    20.         pageBean = new PageBean();
    21.     }
    22.  
    23.  
    1. package com.javaxl.ssm.service.impl;
    2. import com.javaxl.ssm.SpringJunitBaseTest;
    3. import com.javaxl.ssm.service.BookService;
    4. import org.junit.Test;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import static org.junit.Assert.*;
    7. public class BookServiceImplTest extends SpringJunitBaseTest {
    8. @Autowired
    9. private BookService bookService;
    10. @Test
    11. public void insert() {
    12. book.setBid(10006);
    13. book.setBname("www.javaxl.com");
    14. book.setPrice(666f);
    15. bookService.insert(book);
    16. }
    17. @Test
    18. public void selectByPrimaryKey() {
    19. System.out.println(bookService.selectByPrimaryKey(10006));
    20. }
    21. }

    二,Aop整合pagehelper插件


    注意:记得开动态代理

    使用AOP编程解决分页代码重复的问题

       @Around("execution(* *..*Service.*pager(..))")

       public Object invoke(ProceedingJoinPoint args)

    语法结构:execution(方法修饰符  方法返回值  方法所属类 匹配方法

    1. package com.javaxl.ssm.component;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.javaxl.ssm.model.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. @Around("execution(* *..*Service.*Pager(..))")
    14. public Object invoke(ProceedingJoinPoint args) throws Throwable {
    15. Object[] params = args.getArgs();
    16. PageBean pageBean = null;
    17. for (Object param : params) {
    18. if(param instanceof PageBean){
    19. pageBean = (PageBean)param;
    20. break;
    21. }
    22. }
    23. if(pageBean != null && pageBean.isPagination())
    24. PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    25. Object list = args.proceed(params);
    26. if(null != pageBean && pageBean.isPagination()){
    27. PageInfo pageInfo = new PageInfo((List) list);
    28. pageBean.setTotal(pageInfo.getTotal()+"");
    29. }
    30. return list;
    31. }
    32. }

    名 (  方法中的形参表 )  方法申明抛出的异常  )

    "*"  :代表一个任意类型的参数;

    “..”:代表零个或多个任意类型的参数。
     

     今天的分享就到这啦~我们下期再见!!!

  • 相关阅读:
    Ansible学习笔记09-剧本中使用变量2
    《Java》private、protected、public区别及解析
    [附源码]java毕业设计网上鞋店管理系统
    python使用openpyxl添加图片到excel文件中
    CSDN竞赛第四期题解
    Ubuntu 20.04中docker-compose部署Nightingale
    c 理解创建多进程
    Hibernate EntityManager 指南
    【线性代数】为什么 AA* = |A|E
    浏览器不能访问阿里云ECS
  • 原文地址:https://blog.csdn.net/weixin_63544775/article/details/126339298