• Mybitis与Spring集成


    目录

    一、Mybatis与spring集成

    1、导入pom依赖

     2、利用mybatis逆向工程生成模型层层代码

    3、编写配置文件applicationContext-mybatis.xml

    4、Spring Test+junit完美组合

    二、Aop整合pagehelper插件

    1、PageAspect 

    2、BookBizImpl

    3、BookBizImplTest2


    一、Mybatis与spring集成

    1、导入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)

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

     2、利用mybatis逆向工程生成模型层层代码

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>org.examplegroupId>
    5. <artifactId>ssmartifactId>
    6. <version>1.0-SNAPSHOTversion>
    7. <packaging>warpackaging>
    8. <name>ssm Maven Webappname>
    9. <url>http://www.example.comurl>
    10. <properties>
    11. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    12. <maven.compiler.source>1.8maven.compiler.source>
    13. <maven.compiler.target>1.8maven.compiler.target>
    14. <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
    15. <spring.version>5.0.2.RELEASEspring.version>
    16. <mybatis.version>3.4.5mybatis.version>
    17. <mysql.version>5.1.44mysql.version>
    18. <pagehelper.version>5.1.2pagehelper.version>
    19. <mybatis.spring.version>1.3.1mybatis.spring.version>
    20. <commons.dbcp2.version>2.1.1commons.dbcp2.version>
    21. <commons.pool2.version>2.4.3commons.pool2.version>
    22. <log4j2.version>2.9.1log4j2.version>
    23. <junit.version>4.12junit.version>
    24. <servlet.version>4.0.0servlet.version>
    25. <lombok.version>1.18.2lombok.version>
    26. properties>
    27. <dependencies>
    28. <dependency>
    29. <groupId>org.springframeworkgroupId>
    30. <artifactId>spring-contextartifactId>
    31. <version>${spring.version}version>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframeworkgroupId>
    35. <artifactId>spring-ormartifactId>
    36. <version>${spring.version}version>
    37. dependency>
    38. <dependency>
    39. <groupId>org.springframeworkgroupId>
    40. <artifactId>spring-txartifactId>
    41. <version>${spring.version}version>
    42. dependency>
    43. <dependency>
    44. <groupId>org.springframeworkgroupId>
    45. <artifactId>spring-aspectsartifactId>
    46. <version>${spring.version}version>
    47. dependency>
    48. <dependency>
    49. <groupId>org.springframeworkgroupId>
    50. <artifactId>spring-webartifactId>
    51. <version>${spring.version}version>
    52. dependency>
    53. <dependency>
    54. <groupId>org.springframeworkgroupId>
    55. <artifactId>spring-testartifactId>
    56. <version>${spring.version}version>
    57. dependency>
    58. <dependency>
    59. <groupId>org.mybatisgroupId>
    60. <artifactId>mybatisartifactId>
    61. <version>${mybatis.version}version>
    62. dependency>
    63. <dependency>
    64. <groupId>mysqlgroupId>
    65. <artifactId>mysql-connector-javaartifactId>
    66. <version>${mysql.version}version>
    67. dependency>
    68. <dependency>
    69. <groupId>com.github.pagehelpergroupId>
    70. <artifactId>pagehelperartifactId>
    71. <version>${pagehelper.version}version>
    72. dependency>
    73. <dependency>
    74. <groupId>org.mybatisgroupId>
    75. <artifactId>mybatis-springartifactId>
    76. <version>${mybatis.spring.version}version>
    77. dependency>
    78. <dependency>
    79. <groupId>org.apache.commonsgroupId>
    80. <artifactId>commons-dbcp2artifactId>
    81. <version>${commons.dbcp2.version}version>
    82. dependency>
    83. <dependency>
    84. <groupId>org.apache.commonsgroupId>
    85. <artifactId>commons-pool2artifactId>
    86. <version>${commons.pool2.version}version>
    87. dependency>
    88. <dependency>
    89. <groupId>org.apache.logging.log4jgroupId>
    90. <artifactId>log4j-coreartifactId>
    91. <version>${log4j2.version}version>
    92. dependency>
    93. <dependency>
    94. <groupId>org.apache.logging.log4jgroupId>
    95. <artifactId>log4j-apiartifactId>
    96. <version>${log4j2.version}version>
    97. dependency>
    98. <dependency>
    99. <groupId>org.apache.logging.log4jgroupId>
    100. <artifactId>log4j-webartifactId>
    101. <version>${log4j2.version}version>
    102. dependency>
    103. <dependency>
    104. <groupId>junitgroupId>
    105. <artifactId>junitartifactId>
    106. <version>${junit.version}version>
    107. <scope>testscope>
    108. dependency>
    109. <dependency>
    110. <groupId>javax.servletgroupId>
    111. <artifactId>javax.servlet-apiartifactId>
    112. <version>${servlet.version}version>
    113. <scope>providedscope>
    114. dependency>
    115. <dependency>
    116. <groupId>org.projectlombokgroupId>
    117. <artifactId>lombokartifactId>
    118. <version>${lombok.version}version>
    119. <scope>providedscope>
    120. dependency>
    121. dependencies>
    122. <build>
    123. <finalName>ssmfinalName>
    124. <resources>
    125. <resource>
    126. <directory>src/main/javadirectory>
    127. <includes>
    128. <include>**/*.xmlinclude>
    129. includes>
    130. resource>
    131. <resource>
    132. <directory>src/main/resourcesdirectory>
    133. <includes>
    134. <include>jdbc.propertiesinclude>
    135. <include>*.xmlinclude>
    136. includes>
    137. resource>
    138. resources>
    139. <pluginManagement>
    140. <plugins>
    141. <plugin>
    142. <groupId>org.apache.maven.pluginsgroupId>
    143. <artifactId>maven-compiler-pluginartifactId>
    144. <version>${maven.compiler.plugin.version}version>
    145. <configuration>
    146. <source>${maven.compiler.source}source>
    147. <target>${maven.compiler.target}target>
    148. <encoding>${project.build.sourceEncoding}encoding>
    149. configuration>
    150. plugin>
    151. <plugin>
    152. <groupId>org.mybatis.generatorgroupId>
    153. <artifactId>mybatis-generator-maven-pluginartifactId>
    154. <version>1.3.2version>
    155. <dependencies>
    156. <dependency>
    157. <groupId>mysqlgroupId>
    158. <artifactId>mysql-connector-javaartifactId>
    159. <version>${mysql.version}version>
    160. dependency>
    161. dependencies>
    162. <configuration>
    163. <overwrite>trueoverwrite>
    164. configuration>
    165. plugin>
    166. <plugin>
    167. <artifactId>maven-clean-pluginartifactId>
    168. <version>3.1.0version>
    169. plugin>
    170. <plugin>
    171. <artifactId>maven-resources-pluginartifactId>
    172. <version>3.0.2version>
    173. plugin>
    174. <plugin>
    175. <artifactId>maven-compiler-pluginartifactId>
    176. <version>3.8.0version>
    177. plugin>
    178. <plugin>
    179. <artifactId>maven-surefire-pluginartifactId>
    180. <version>2.22.1version>
    181. plugin>
    182. <plugin>
    183. <artifactId>maven-war-pluginartifactId>
    184. <version>3.2.2version>
    185. plugin>
    186. <plugin>
    187. <artifactId>maven-install-pluginartifactId>
    188. <version>2.5.2version>
    189. plugin>
    190. <plugin>
    191. <artifactId>maven-deploy-pluginartifactId>
    192. <version>2.8.2version>
    193. plugin>
    194. plugins>
    195. pluginManagement>
    196. build>
    197. project>

    3、编写配置文件applicationContext-mybatis.xml

    3.1 注解式开发
    开启注解

    注解式开发
    注解驱动
    context:annotation-config/
    用注解方式注入bean,并指定查找范围:com.javaxl.ssm及子子孙孙包
    component-scan base-package=“com.javaxl.ssm”/>

    3.2 引入外部jdbc配置文件

    3.3 配置dbcp2数据库连接池

    3.4 spring和mybatis整合

    3.5 注解式事物配置

     

    3.6 开启动态代理
    aop:aspectj-autoproxy/

    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之间的耦合。

    applicationContext-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.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>

     

    4、Spring Test+junit完美组合

    4.1、BookBiz

    1. package com.liaoxin.ssm.biz;
    2. import com.liaoxin.ssm.model.Book;
    3. import com.liaoxin.ssm.model.BookVo;
    4. import com.liaoxin.ssm.util.PageBean;
    5. import java.util.List;
    6. import java.util.Map;
    7. public interface BookBiz {
    8. public int deleteByPrimaryKey(Integer bid);
    9. public Book selectByPrimaryKey(Integer bid);
    10. public List selectByIn(List bookIds);
    11. public List selectBooksLike1(String bname);
    12. public List selectBooksLike2(String bname);
    13. public List selectBooksLike3(String bname);
    14. List list1();
    15. List list2();
    16. List list3(BookVo vo);
    17. List list4();
    18. Map list5(Map map);
    19. List listPager(Map map, PageBean pageBean);
    20. List list6(BookVo bookVo);
    21. List list7(BookVo bookVo);
    22. }

    4.2、BookBizImpl

    1. package com.liaoxin.ssm.biz.impl;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.liaoxin.ssm.biz.BookBiz;
    5. import com.liaoxin.ssm.mapper.BookMapper;
    6. import com.liaoxin.ssm.model.Book;
    7. import com.liaoxin.ssm.model.BookVo;
    8. import com.liaoxin.ssm.util.PageBean;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.stereotype.Service;
    11. import java.util.List;
    12. import java.util.Map;
    13. @Service
    14. public class BookBizImpl implements BookBiz {
    15. @Autowired
    16. private BookMapper bookMapper;
    17. // alt+insert 快速提供set/get/tostring/构造方法
    18. // alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
    19. // public BookMapper getBookMapper() {
    20. // return bookMapper;
    21. // }
    22. // public void setBookMapper(BookMapper bookMapper) {
    23. // this.bookMapper = bookMapper;
    24. // }
    25. @Override
    26. public int deleteByPrimaryKey(Integer bid) {
    27. return bookMapper.deleteByPrimaryKey(bid);
    28. }
    29. @Override
    30. public Book selectByPrimaryKey(Integer bid) {
    31. return bookMapper.selectByPrimaryKey(bid);
    32. }
    33. @Override
    34. public List selectByIn(List bookIds) {
    35. return bookMapper.selectByIn(bookIds);
    36. }
    37. @Override
    38. public List selectBooksLike1(String bname) {
    39. return bookMapper.selectBooksLike1(bname);
    40. }
    41. @Override
    42. public List selectBooksLike2(String bname) {
    43. return bookMapper.selectBooksLike2(bname);
    44. }
    45. @Override
    46. public List selectBooksLike3(String bname) {
    47. return bookMapper.selectBooksLike3(bname);
    48. }
    49. @Override
    50. public List list1() {
    51. return bookMapper.list1();
    52. }
    53. @Override
    54. public List list2() {
    55. return bookMapper.list2();
    56. }
    57. @Override
    58. public List list3(BookVo vo) {
    59. return bookMapper.list3(vo);
    60. }
    61. @Override
    62. public List list4() {
    63. return bookMapper.list4();
    64. }
    65. @Override
    66. public Map list5(Map map) {
    67. return bookMapper.list5(map);
    68. }
    69. @Override
    70. public List listPager(Map map, PageBean pageBean) {
    71. // pageHelper分页插件相关的代码
    72. if(pageBean!=null&&pageBean.isPagination()){
    73. PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    74. }
    75. List maps = bookMapper.listPager(map);
    76. if(pageBean!=null&&pageBean.isPagination()){
    77. // 处理查询结果的前提是需要分页,是需要分页的
    78. PageInfo info = new PageInfo(maps);
    79. pageBean.setTotal(info.getTotal()+"");
    80. }
    81. return maps;
    82. }
    83. @Override
    84. public List list6(BookVo bookVo) {
    85. return bookMapper.list6(bookVo);
    86. }
    87. @Override
    88. public List list7(BookVo bookVo) {
    89. return bookMapper.list7(bookVo);
    90. }
    91. }

    4.3、BookMapper

    1. package com.liaoxin.ssm.mapper;
    2. import com.liaoxin.ssm.model.Book;
    3. import com.liaoxin.ssm.model.BookVo;
    4. import org.apache.ibatis.annotations.Param;
    5. import org.springframework.stereotype.Repository;
    6. import java.util.List;
    7. import java.util.Map;
    8. @Repository
    9. public interface BookMapper {
    10. int deleteByPrimaryKey(Integer bid);
    11. int insert(Book record);
    12. int insertSelective(Book record);
    13. Book selectByPrimaryKey(Integer bid);
    14. int updateByPrimaryKeySelective(Book record);
    15. int updateByPrimaryKey(Book record);
    16. // 通过in关键字进行查询:讲解foreach 标签的使用
    17. // 如果说参数是非实体类(book,Order,....),那么急的加上注解 @param,bookIds是对应collection属性的
    18. List selectByIn(@Param("bookIds") List bookIds);
    19. List selectBooksLike1(@Param("bname") String bname);
    20. List selectBooksLike2(@Param("bname") String bname);
    21. List selectBooksLike3(@Param("bname") String bname);
    22. // list1 list2的结论是,对于单表查询而言,可以用resultmap/resulttype接收,但是多表必须用resultmap接收
    23. List list1();
    24. List list2();
    25. // 如果要传入多个查询参数,必须以对象的方式进行传递
    26. // 举例:select * from t_mvc_book where bid in (1,2,3,4,5,6) and bname in ("圣墟","不死不休")
    27. List list3(BookVo vo);
    28. // 说明了不管返回1条数据,还是多条数据,都应该用java.util.Map进行接受
    29. // 如果是1条数据,那么返回值是Map
    30. // 如果是多条数据,那么返回值List
    31. List list4();
    32. Map list5(Map map);
    33. // 利用第三方插件进行分页
    34. List listPager(Map map);
    35. /**
    36. * 处理特殊字符
    37. * @param bookVo
    38. * @return
    39. */
    40. List list6(BookVo bookVo);
    41. /**
    42. * 处理特殊字符
    43. * @param bookVo
    44. * @return
    45. */
    46. List list7(BookVo bookVo);
    47. }

    4.4、BookBizImplTest

    1. package com.liaoxin.ssm;
    2. import com.liaoxin.ssm.biz.BookBiz;
    3. import com.liaoxin.ssm.biz.impl.BookBizImpl;
    4. import com.liaoxin.ssm.model.BookVo;
    5. import com.liaoxin.ssm.util.PageBean;
    6. import org.junit.After;
    7. import org.junit.Before;
    8. import org.junit.Test;
    9. import org.junit.runner.RunWith;
    10. import org.springframework.beans.factory.annotation.Autowired;
    11. import org.springframework.test.context.ContextConfiguration;
    12. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    13. import java.util.Arrays;
    14. import java.util.HashMap;
    15. import java.util.List;
    16. import java.util.Map;
    17. @RunWith(SpringJUnit4ClassRunner.class)
    18. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    19. public class BookBizImplTest2 {
    20. @Autowired
    21. private BookBiz bookBiz;
    22. // private SqlSession sqlSession;
    23. @Before
    24. public void setUp() throws Exception {
    25. System.out.println("初始化方法");
    26. }
    27. @After
    28. public void tearDown() throws Exception {
    29. System.out.println("方法测试结束");
    30. }
    31. @Test
    32. public void deleteByPrimaryKey() {
    33. bookBiz.deleteByPrimaryKey(44);
    34. }
    35. @Test
    36. public void selectByPrimaryKey() {
    37. System.out.println("测试的业务方法");
    38. // System.out.println(bookBiz.getBookMapper());
    39. System.out.println(bookBiz.selectByPrimaryKey(43));
    40. }
    41. @Test
    42. public void test3() {
    43. int[] ints={};
    44. // 将数组变成字符串 1,2,3,4,5,6
    45. StringBuffer sb=new StringBuffer();
    46. for (int i:ints){
    47. sb.append(",").append(i);
    48. }
    49. String s=sb.toString();
    50. System.out.println(s.substring(1));
    51. }
    52. @Test
    53. public void getBookMapper() {
    54. }
    55. @Test
    56. public void setBookMapper() {
    57. }
    58. @Test
    59. public void selectByIn() {
    60. List bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
    61. bookBiz.selectByIn(bookIds).forEach(System.out::println);
    62. }
    63. @Test
    64. public void selectBooksLike1() {
    65. bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
    66. }
    67. @Test
    68. public void selectBooksLike2() {
    69. bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
    70. }
    71. @Test
    72. public void selectBooksLike3() {
    73. bookBiz.selectBooksLike3("圣墟").forEach(System.out::println);
    74. }
    75. @Test
    76. public void list1() {
    77. bookBiz.list1().forEach(System.out::println);
    78. }
    79. @Test
    80. public void list2() {
    81. bookBiz.list2().forEach(System.out::println);
    82. }
    83. @Test
    84. public void list3() {
    85. BookVo vo=new BookVo();
    86. vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
    87. bookBiz.list3(vo).forEach(System.out::println);
    88. }
    89. @Test
    90. public void list4() {
    91. bookBiz.list4().forEach(System.out::println);
    92. }
    93. @Test
    94. public void list5() {
    95. Map map=new HashMap();
    96. map.put("bid",32);
    97. System.out.println(bookBiz.list5(map));
    98. }
    99. @Test
    100. public void listPager() {
    101. Map map=new HashMap();
    102. map.put("bname","圣墟");
    103. // bookBiz.listPager(map).forEach(System.out::println);
    104. // 查询出第二页的20条数据
    105. PageBean pageBean = new PageBean();
    106. pageBean.setPage(2);
    107. pageBean.setRows(20);
    108. bookBiz.listPager(map,pageBean).forEach(System.out::println);
    109. }
    110. @Test
    111. public void list6() {
    112. BookVo vo=new BookVo();
    113. vo.setMax(45);
    114. vo.setMin(35);
    115. bookBiz.list6(vo).forEach(System.out::println);
    116. }
    117. @Test
    118. public void list7() {
    119. BookVo vo=new BookVo();
    120. vo.setMax(45);
    121. vo.setMin(35);
    122. bookBiz.list7(vo).forEach(System.out::println);
    123. }
    124. }

    运行如下: 

     

    二、Aop整合pagehelper插件

     使用AOP编程解决分页代码重复的问题
    @Around(“execution(* *…*Service.*pager(…))”)
    public Object invoke(ProceedingJoinPoint args)

    语法结构:execution(方法修饰符 方法返回值 方法所属类 匹配方法名 ( 方法中的形参表 ) 方法申明抛出的异常 )
    “*” :代表一个任意类型的参数;
    “…”:代表零个或多个任意类型的参数。

    /**
    * *:返回值类型
    * *:无限包
    * *Service:以Service结尾接口名
    * *Pager:以Pager方法
    * 只要同时匹配上诉四个条件,就会被列为目标对象
    * 上诉配置要生效,代理注解aop:aspectj-autoproxy/ 不能少
    *
    * @param args
    * @return
    * @throws Throwable
    */

    1、PageAspect 

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

    2、BookBizImpl

    1. package com.liaoxin.ssm.biz.impl;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.liaoxin.ssm.biz.BookBiz;
    5. import com.liaoxin.ssm.mapper.BookMapper;
    6. import com.liaoxin.ssm.model.Book;
    7. import com.liaoxin.ssm.model.BookVo;
    8. import com.liaoxin.ssm.util.PageBean;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.stereotype.Service;
    11. import java.util.List;
    12. import java.util.Map;
    13. @Service
    14. public class BookBizImpl implements BookBiz {
    15. @Autowired
    16. private BookMapper bookMapper;
    17. // alt+insert 快速提供set/get/tostring/构造方法
    18. // alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
    19. // public BookMapper getBookMapper() {
    20. // return bookMapper;
    21. // }
    22. // public void setBookMapper(BookMapper bookMapper) {
    23. // this.bookMapper = bookMapper;
    24. // }
    25. @Override
    26. public int deleteByPrimaryKey(Integer bid) {
    27. return bookMapper.deleteByPrimaryKey(bid);
    28. }
    29. @Override
    30. public Book selectByPrimaryKey(Integer bid) {
    31. return bookMapper.selectByPrimaryKey(bid);
    32. }
    33. @Override
    34. public List selectByIn(List bookIds) {
    35. return bookMapper.selectByIn(bookIds);
    36. }
    37. @Override
    38. public List selectBooksLike1(String bname) {
    39. return bookMapper.selectBooksLike1(bname);
    40. }
    41. @Override
    42. public List selectBooksLike2(String bname) {
    43. return bookMapper.selectBooksLike2(bname);
    44. }
    45. @Override
    46. public List selectBooksLike3(String bname) {
    47. return bookMapper.selectBooksLike3(bname);
    48. }
    49. @Override
    50. public List list1() {
    51. return bookMapper.list1();
    52. }
    53. @Override
    54. public List list2() {
    55. return bookMapper.list2();
    56. }
    57. @Override
    58. public List list3(BookVo vo) {
    59. return bookMapper.list3(vo);
    60. }
    61. @Override
    62. public List list4() {
    63. return bookMapper.list4();
    64. }
    65. @Override
    66. public Map list5(Map map) {
    67. return bookMapper.list5(map);
    68. }
    69. @Override
    70. public List listPager(Map map, PageBean pageBean){
    71. return bookMapper.listPager(map);
    72. }
    73. // public List listPager(Map map, PageBean pageBean) {
    74. pageHelper分页插件相关的代码
    75. // if(pageBean!=null&&pageBean.isPagination()){
    76. // PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    77. // }
    78. // List maps = bookMapper.listPager(map);
    79. // if(pageBean!=null&&pageBean.isPagination()){
    80. 处理查询结果的前提是需要分页,是需要分页的
    81. // PageInfo info = new PageInfo(maps);
    82. // pageBean.setTotal(info.getTotal()+"");
    83. // }
    84. // return maps;
    85. // }
    86. @Override
    87. public List list6(BookVo bookVo) {
    88. return bookMapper.list6(bookVo);
    89. }
    90. @Override
    91. public List list7(BookVo bookVo) {
    92. return bookMapper.list7(bookVo);
    93. }
    94. }

    3、BookBizImplTest2

    1. package com.liaoxin.ssm;
    2. import com.liaoxin.ssm.biz.BookBiz;
    3. import com.liaoxin.ssm.biz.impl.BookBizImpl;
    4. import com.liaoxin.ssm.model.BookVo;
    5. import com.liaoxin.ssm.util.PageBean;
    6. import org.junit.After;
    7. import org.junit.Before;
    8. import org.junit.Test;
    9. import org.junit.runner.RunWith;
    10. import org.springframework.beans.factory.annotation.Autowired;
    11. import org.springframework.test.context.ContextConfiguration;
    12. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    13. import java.util.Arrays;
    14. import java.util.HashMap;
    15. import java.util.List;
    16. import java.util.Map;
    17. @RunWith(SpringJUnit4ClassRunner.class)
    18. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    19. public class BookBizImplTest2 {
    20. @Autowired
    21. private BookBiz bookBiz;
    22. // private SqlSession sqlSession;
    23. @Before
    24. public void setUp() throws Exception {
    25. System.out.println("初始化方法");
    26. }
    27. @After
    28. public void tearDown() throws Exception {
    29. System.out.println("方法测试结束");
    30. }
    31. @Test
    32. public void deleteByPrimaryKey() {
    33. bookBiz.deleteByPrimaryKey(44);
    34. }
    35. @Test
    36. public void selectByPrimaryKey() {
    37. System.out.println("测试的业务方法");
    38. // System.out.println(bookBiz.getBookMapper());
    39. System.out.println(bookBiz.selectByPrimaryKey(43));
    40. }
    41. @Test
    42. public void test3() {
    43. int[] ints={};
    44. // 将数组变成字符串 1,2,3,4,5,6
    45. StringBuffer sb=new StringBuffer();
    46. for (int i:ints){
    47. sb.append(",").append(i);
    48. }
    49. String s=sb.toString();
    50. System.out.println(s.substring(1));
    51. }
    52. @Test
    53. public void getBookMapper() {
    54. }
    55. @Test
    56. public void setBookMapper() {
    57. }
    58. @Test
    59. public void selectByIn() {
    60. List bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
    61. bookBiz.selectByIn(bookIds).forEach(System.out::println);
    62. }
    63. @Test
    64. public void selectBooksLike1() {
    65. bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
    66. }
    67. @Test
    68. public void selectBooksLike2() {
    69. bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
    70. }
    71. @Test
    72. public void selectBooksLike3() {
    73. bookBiz.selectBooksLike3("圣墟").forEach(System.out::println);
    74. }
    75. @Test
    76. public void list1() {
    77. bookBiz.list1().forEach(System.out::println);
    78. }
    79. @Test
    80. public void list2() {
    81. bookBiz.list2().forEach(System.out::println);
    82. }
    83. @Test
    84. public void list3() {
    85. BookVo vo=new BookVo();
    86. vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
    87. bookBiz.list3(vo).forEach(System.out::println);
    88. }
    89. @Test
    90. public void list4() {
    91. bookBiz.list4().forEach(System.out::println);
    92. }
    93. @Test
    94. public void list5() {
    95. Map map=new HashMap();
    96. map.put("bid",32);
    97. System.out.println(bookBiz.list5(map));
    98. }
    99. @Test
    100. public void listPager() {
    101. Map map=new HashMap();
    102. map.put("bname","圣墟");
    103. // bookBiz.listPager(map).forEach(System.out::println);
    104. // 查询出第二页的20条数据
    105. PageBean pageBean = new PageBean();
    106. pageBean.setPage(2);
    107. pageBean.setRows(20);
    108. bookBiz.listPager(map,pageBean).forEach(System.out::println);
    109. }
    110. @Test
    111. public void testlistPager(){
    112. Map map=new HashMap();
    113. map.put("bname","圣墟");
    114. PageBean pageBean = new PageBean();
    115. pageBean.setPage(2);
    116. pageBean.setRows(20);
    117. bookBiz.listPager(map,pageBean).forEach(System.out::println);
    118. }
    119. @Test
    120. public void list6() {
    121. BookVo vo=new BookVo();
    122. vo.setMax(45);
    123. vo.setMin(35);
    124. bookBiz.list6(vo).forEach(System.out::println);
    125. }
    126. @Test
    127. public void list7() {
    128. BookVo vo=new BookVo();
    129. vo.setMax(45);
    130. vo.setMin(35);
    131. bookBiz.list7(vo).forEach(System.out::println);
    132. }
    133. }

     

  • 相关阅读:
    vue的组件使用
    Linux Command echo
    macOS Sonoma 14.6.1 (23G93) Boot ISO 原版可引导镜像下载
    Flutter dio Http请求之Cookie管理
    错题本1:为什么往div盒子模型添加不上背景颜色和背景图片?
    我的前端成长之路:中医药大学毕业的业务女前端修炼之路
    第7章 - 多无人机系统的协同控制 --> 实验验证
    09.Json语法
    LeetCode 104. 二叉树的最大深度
    华为云云耀云服务器L实例评测|用PHP从数据库到后端到前端完整实现一个中秋节祝福语项目
  • 原文地址:https://blog.csdn.net/qq_44247968/article/details/126343309