目录
1.1.1 右键New一个module ---> 选择Maven
1.1.2 选择自己自己的jdk版本 ---> 勾选Create from archetype --->
英文输入法输入webapp 找到:org.apache.maven.archetypes:maven-archetype-webapp
1.1.3 设置要建立的项目名 ---> 建立项目的位置 ---> Next
1.1.4
1、选择自己Maven的安装目录,记得要选择bin目录的上一层;
2、勾选Override,如果settings.xml的安装目录不是实际上自己的settings.xml安装目录的话,
那就手动定位选择一下;
3、点击 + 号添加一个配置,依次填入:archetypeCatalog && internal
4、Finish
1.1.5 直到出现BUILD SUCCESS,就代表你的Maven项目创建成功啦!
小笔记:idea右侧点击Maven,出现的一列命令。
test命令:
test命令:
① 用来检测当前项目所有相关pom依赖是否下载成功;
② 用来检测当前项目所有pom依赖是否有版本冲突;
maven clean命令:
清除这个依赖:
clean命令:
① 清除本地(idea)pom依赖
一般先执行clean,再执行test命令。
集成步骤:
1.2.1 导入pom依赖
1 添加spring相关依赖(5.0.2.RELEASE)
2 添加mybatis相关依赖
3 spring整合mybatis(1.3.1)
4 添加dbcp2连接池
5 添加日志配置(2.9.1)
pom依赖文件:
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>1.8maven.compiler.source>
- <maven.compiler.target>1.8maven.compiler.target>
- <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
-
-
-
- <spring.version>5.0.2.RELEASEspring.version>
-
- <mybatis.version>3.4.5mybatis.version>
-
- <mysql.version>5.1.44mysql.version>
-
- <pagehelper.version>5.1.2pagehelper.version>
-
- <mybatis.spring.version>1.3.1mybatis.spring.version>
-
- <commons.dbcp2.version>2.1.1commons.dbcp2.version>
- <commons.pool2.version>2.4.3commons.pool2.version>
-
- <log4j2.version>2.9.1log4j2.version>
-
- <junit.version>4.12junit.version>
- <servlet.version>4.0.0servlet.version>
- <lombok.version>1.18.2lombok.version>
- properties>
-
-
- <dependencies>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-ormartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-txartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aspectsartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-testartifactId>
- <version>${spring.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>${mybatis.version}version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>${pagehelper.version}version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatis-springartifactId>
- <version>${mybatis.spring.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-dbcp2artifactId>
- <version>${commons.dbcp2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-pool2artifactId>
- <version>${commons.pool2.version}version>
- dependency>
-
-
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-coreartifactId>
- <version>${log4j2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-apiartifactId>
- <version>${log4j2.version}version>
- dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-webartifactId>
- <version>${log4j2.version}version>
- dependency>
-
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>${junit.version}version>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>${servlet.version}version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>${lombok.version}version>
- <scope>providedscope>
- dependency>
-
- dependencies>
-
-
- <resources>
-
- <resource>
- <directory>src/main/javadirectory>
- <includes>
- <include>**/*.xmlinclude>
- includes>
- resource>
-
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>jdbc.propertiesinclude>
- <include>*.xmlinclude>
- includes>
- resource>
- resources>
-
-
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <version>${maven.compiler.plugin.version}version>
- <configuration>
- <source>${maven.compiler.source}source>
- <target>${maven.compiler.target}target>
- <encoding>${project.build.sourceEncoding}encoding>
- configuration>
- plugin>
- <plugin>
- <groupId>org.mybatis.generatorgroupId>
- <artifactId>mybatis-generator-maven-pluginartifactId>
- <version>1.3.2version>
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
- dependencies>
- <configuration>
- <overwrite>trueoverwrite>
- configuration>
- plugin>
数据库连接配置文件:jdbc.properties:
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8
- jdbc.username=用户名
- jdbc.password=密码
逆向生成代码插件配置文件:generatorConfig.xml
- generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
- <generatorConfiguration>
-
- <properties resource="jdbc.properties"/>
-
-
- <classPathEntry location="E:\\AnZhuangBao\\Maven\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
-
-
- <context id="infoGuardian">
-
- <commentGenerator>
- <property name="suppressAllComments" value="true"/>
- <property name="suppressDate" value="true"/>
- commentGenerator>
-
-
- <jdbcConnection driverClass="${jdbc.driver}"
- connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
-
-
- <javaTypeResolver>
-
- <property name="forceBigDecimals" value="false"/>
- javaTypeResolver>
-
-
-
-
- <javaModelGenerator targetPackage="com.leaf.model"
- targetProject="src/main/java">
-
- <property name="enableSubPackages" value="false"/>
-
- <property name="constructorBased" value="true"/>
-
- <property name="trimStrings" value="false"/>
-
- <property name="immutable" value="false"/>
- javaModelGenerator>
-
-
- <sqlMapGenerator targetPackage="com.leaf.mapper"
- targetProject="src/main/java">
-
- <property name="enableSubPackages" value="false"/>
- sqlMapGenerator>
-
-
-
-
-
- <javaClientGenerator targetPackage="com.leaf.mapper"
- targetProject="src/main/java" type="XMLMAPPER">
-
- <property name="enableSubPackages" value="false"/>
- javaClientGenerator>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <table schema="" tableName="t_mvc_Book" domainObjectName="Book"
- enableCountByExample="false" enableDeleteByExample="false"
- enableSelectByExample="false" enableUpdateByExample="false">
-
-
-
-
- table>
-
- <table schema="" tableName="t_oa_permission" domainObjectName="Permission"
- enableCountByExample="false" enableDeleteByExample="false"
- enableSelectByExample="false" enableUpdateByExample="false">
- table>
-
- context>
- generatorConfiguration>
log4j2.xml:
-
- <Configuration status="WARN" monitorInterval="30">
- <Properties>
-
- <Property name="LOG_HOME">/root/workspace/lucenedemo/logsProperty>
- <property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/errorproperty>
- <property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warnproperty>
- <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%nproperty>
- Properties>
-
- <Appenders>
-
- <Console name="Console" target="SYSTEM_OUT">
-
- <ThresholdFilter level="trace" onMatch="ACCEPT"
- onMismatch="DENY" />
-
-
- <PatternLayout pattern="${PATTERN}" />
- Console>
-
-
-
- <File name="log" fileName="logs/test.log" append="false">
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- File>
-
- <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
- filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
-
- <ThresholdFilter level="info" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
-
-
-
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
-
-
- Policies>
- RollingFile>
-
- <RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
- filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
- <ThresholdFilter level="warn" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
- <TimeBasedTriggeringPolicy />
- <SizeBasedTriggeringPolicy size="2 kB" />
- Policies>
-
- <DefaultRolloverStrategy max="20" />
- RollingFile>
-
- <RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
- filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
- <ThresholdFilter level="error" onMatch="ACCEPT"
- onMismatch="DENY" />
- <PatternLayout
- pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
- <Policies>
-
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
-
- Policies>
- RollingFile>
-
- Appenders>
-
-
- <Loggers>
-
- <logger name="org.springframework" level="INFO">logger>
- <logger name="org.mybatis" level="INFO">logger>
-
-
- <logger name="org.springframework" level="ERROR" />
- <logger name="org.hibernate" level="ERROR" />
- <logger name="org.apache.struts2" level="ERROR" />
- <logger name="com.opensymphony.xwork2" level="ERROR" />
- <logger name="org.jboss" level="ERROR" />
-
-
-
- <root level="all">
- <appender-ref ref="Console" />
- <appender-ref ref="RollingFileInfo" />
- <appender-ref ref="RollingFileWarn" />
- <appender-ref ref="RollingFileError" />
- root>
-
- Loggers>
-
- Configuration>
mybatis的配置文件:mybatis.cfg.xml
- configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="jdbc.properties"/>
-
- <settings>
- <setting name="logImpl" value="LOG4J2"/>
- settings>
-
-
- <typeAliases>
-
- typeAliases>
-
- <plugins>
-
- <plugin interceptor="com.github.pagehelper.PageInterceptor">
- plugin>
- plugins>
-
-
- <environments default="development">
- <environment id="development">
-
- <transactionManager type="jdbc"/>
-
-
-
-
-
- <dataSource type="POOLED">
- <property name="driver"
- value="${jdbc.driver}"/>
- <property name="url"
- value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
- <mapper resource="com/leaf/mapper/BookMapper.xml"/>
- mappers>
- configuration>
导入以上的配置文件后就可以测试生成代码了:
这里是直接修改添加好的命令执行的项目,具体新建命令的方式可以参考我的文章:MyBatis环境搭建&&测试增删改查__Leaf1217的博客-CSDN博客
然后建立一些测试类,
自行测试没有问题后就代表一个拥有mybatis功能的maven项目就建立好了。
1.2.4 添加并配置整合的配置文件
1.2.4.1 扫描注解驱动
1.2.4.2 添加并管理数据源 -> 管理sqlsession
1.2.4.3 扫描所有的Mapper接口
1.2.4.4 添加事务管理
编写配置文件:applicationContext-mybatis.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- 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">
-
-
- <context:annotation-config/>
-
- <context:component-scan base-package="com.leaf.ssm"/>
-
- <context:property-placeholder location="classpath:jdbc.properties"/>
-
- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
-
- <property name="initialSize" value="10"/>
-
- <property name="maxTotal" value="100"/>
-
- <property name="maxIdle" value="50"/>
-
- <property name="minIdle" value="10"/>
-
-
- <property name="maxWaitMillis" value="-1"/>
- bean>
-
-
-
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
-
- <property name="dataSource" ref="dataSource"/>
-
- <property name="mapperLocations" value="classpath*:com/leaf/ssm/**/mapper/*.xml"/>
-
- <property name="typeAliasesPackage" value="com/leaf/ssm/**/model"/>
-
- <property name="plugins">
- <array>
- <bean class="com.github.pagehelper.PageInterceptor">
- <property name="properties">
- <value>
- helperDialect=mysql
- value>
- property>
- bean>
- array>
- property>
- bean>
-
-
-
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
-
-
- <property name="basePackage" value="com/leaf/ssm/**/mapper"/>
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
- bean>
-
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- bean>
- <tx:annotation-driven transaction-manager="transactionManager" />
- <aop:aspectj-autoproxy/>
- beans>
使用注解式开发:
@Repository:将DAO类声明为Bean
@Service:通常作用在业务层
@Constroller:通常作用在控制层,将在Spring MVC中使用
@Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次
@Scope:模式声明(singleton|prototype)
@Autowired:将自动在代码上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
然后我们就可以把BookBizImpl实现类里面添加两个注解,相当于省略了set、get方法。
- package com.leaf.ssm.biz.impl;
-
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.leaf.ssm.biz.BookBiz;
- import com.leaf.ssm.mapper.BookMapper;
- import com.leaf.ssm.model.Book;
- import com.leaf.ssm.model.BookVo;
- import com.leaf.ssm.entity.PageBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
- import java.util.Map;
-
- /**
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 2:21
- */
- @Service
- public class BookBizImpl implements BookBiz {
-
- @Autowired
- private BookMapper bookMapper;
-
- //Alt+Enter 快速构建实现类,填充代码的前半部分 Ctrl+1
- //Alt+Insert 快速提供set/get/toString/构造方法
-
- /* public BookMapper getBookMapper() {
- return bookMapper;
- }
- public void setBookMapper(BookMapper bookMapper) {
- this.bookMapper = bookMapper;
- }*/
-
- @Override
- public int deleteByPrimaryKey(Integer bid) {
- return bookMapper.deleteByPrimaryKey(bid);
- }
-
- @Override
- public Book selectByPrimaryKey(Integer bid) {
- return bookMapper.selectByPrimaryKey(bid);
- }
-
- @Override
- public List
selectByIn(List bidIds) { - return bookMapper.selectByIn(bidIds);
- }
-
- @Override
- public List
selectBooksLike1(String bname) { - return bookMapper.selectBooksLike1(bname);
- }
-
- @Override
- public List
selectBooksLike2(String bname) { - return bookMapper.selectBooksLike2(bname);
- }
-
- @Override
- public List
selectBooksLike3(String bname) { - return bookMapper.selectBooksLike3(bname);
- }
-
- @Override
- public List
list1() { - return bookMapper.list1();
- }
- @Override
- public List
list2() { - return bookMapper.list2();
- }
-
- @Override
- public List
list3(BookVo vo) { - return bookMapper.list3(vo);
- }
-
- @Override
- public List
- return bookMapper.list4();
- }
-
- @Override
- public Map list5(Map map) {
- return bookMapper.list5(map);
- }
-
- @Override
- public List
- //pageHelper分页插件相关代码
- if(pageBean != null && pageBean.isPagination()){
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- }
- List
- if(pageBean != null && pageBean.isPagination()){
- //处理查询结果的前提,是需要分页的
- PageInfo info=new PageInfo(maps);
- pageBean.setTotal(info.getTotal()+"");
- }
- return maps;
- }
-
- @Override
- public List
list6(BookVo vo) { - return bookMapper.list6(vo);
- }
-
- @Override
- public List
list7(BookVo vo) { - return bookMapper.list7(vo);
- }
-
- }
管理数据源 -> 管理sqlsession
我们还要给BookMapper.java添加一个标记:
然后在测试类里面添加:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
- package com.leaf.ssm.imp;
-
- import com.leaf.ssm.biz.BookBiz;
- import com.leaf.ssm.biz.impl.BookBizImpl;
- import com.leaf.ssm.entity.PageBean;
- import com.leaf.ssm.mapper.BookMapper;
- import com.leaf.ssm.model.BookVo;
- import com.leaf.ssm.util.SessionUtil;
- import org.apache.ibatis.session.SqlSession;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- /**
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-11 2:29
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
- public class BookBizImplTest {
-
- @Autowired
- private BookBiz bookBiz;
- //private SqlSession sqlSession;
-
- @Before
- public void setUp() throws Exception {
- System.out.println("初始化方法...");
- // BookBizImpl bookBiz = new BookBizImpl();
- // //工具类中获取session对象
- // sqlSession = SessionUtil.openSession();
- // //从session对象中获取mapper对象
- // BookMapper mapper = sqlSession.getMapper(BookMapper.class);
- // //bookBiz.setBookMapper(mapper);
- // this.bookBiz = bookBiz;
- }
-
- @After
- public void tearDown() throws Exception {
- System.out.println("方法测试结束...");
- /* sqlSession.commit();
- sqlSession.close();*/
- }
-
- @Test
- public void deleteByPrimaryKey() {
- bookBiz.deleteByPrimaryKey(44);
- }
-
- @Test
- public void selectByPrimaryKey() {
- System.out.println("测试的业务方法...");
- System.out.println(bookBiz.selectByPrimaryKey(45));
- }
-
- @Test
- public void test() {
- int[] ints = {1,2,3,4,5,6};
- //将数组变成字符串 1,2,3,4,5,6
- StringBuffer sb = new StringBuffer();
- for (int i:ints){
- sb.append(",").append(i);
- }
- String s = sb.toString();
- System.out.println(s.substring(1));
- }
-
- @Test
- public void getBookMapper() {
- }
-
- @Test
- public void setBookMapper() {
- }
-
- @Test
- public void selectByIn() {
- List<Integer> bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
- bookBiz.selectByIn(bookIds).forEach(System.out::println);
- }
-
- @Test
- public void selectBooksLike1() {
- bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
- }
-
- @Test
- public void selectBooksLike2() {
- bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
- }
-
- @Test
- public void selectBooksLike3() {
- bookBiz.selectBooksLike3("圣墟").forEach(System.out::println);
- }
-
- @Test
- public void list1() {
- bookBiz.list1().forEach(System.out::println);
- }
-
- @Test
- public void list2() {
- bookBiz.list2().forEach(System.out::println);
- }
-
- @Test
- public void list3() {
- BookVo vo=new BookVo();
- vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
- bookBiz.list3(vo).forEach(System.out::println);
- }
-
- @Test
- public void list4() {
- bookBiz.list4().forEach(System.out::println);
- }
-
- @Test
- public void list5() {
- Map map=new HashMap();
- map.put("bid",32);
- System.out.println(bookBiz.list5(map));
- }
-
- @Test
- public void listPager() {
- Map map=new HashMap();
- map.put("bname","圣墟");
- bookBiz.listPager(map,null).forEach(System.out::println);
- //查询出第二页的20条数据
- PageBean pageBean=new PageBean();
- pageBean.setPage(2);
- pageBean.setRows(20);
- bookBiz.listPager(map,null).forEach(System.out::println);
- }
-
- @Test
- public void list6() {
- BookVo vo=new BookVo();
- vo.setMax(45);
- vo.setMin(35);
- bookBiz.list6(vo).forEach(System.out::println);
- }
-
- @Test
- public void list7() {
- BookVo vo=new BookVo();
- vo.setMax(45);
- vo.setMin(35);
- bookBiz.list7(vo).forEach(System.out::println);
- }
- }
2.1 为什么要整合,解决什么问题?
- @Override
- public List
- //pageHelper分页插件相关代码
- if(pageBean != null && pageBean.isPagination()){
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- }
- List
- if(pageBean != null && pageBean.isPagination()){
- //处理查询结果的前提,是需要分页的
- PageInfo info=new PageInfo(maps);
- pageBean.setTotal(info.getTotal()+"");
- }
- return maps;
- }
可以使用AOP编程解决分页代码重复的问题,省掉重复的代码。
根据Spring aop所学,我们可以利用环绕通知来解决;
1、找到目标对象 -> *Biz.*Pager
2、写通知
2.1 目标对象该方法一定携带了PageBean对象
注解:@aspect:相当于配置了环绕通知
@component:交给Spring进行管理
@excution
建立一个切面类:PageAspect
- package com.leaf.ssm.aspect;
-
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.leaf.ssm.entity.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;
-
- /**
- * @author Leaf
- * @site 2977819715
- * @company 玉渊工作室
- * @create 2022-08-15 6:43
- */
- @Component
- @Aspect
- public class PageAspect {
-
- /**
- * *:返回值
- * *..:无限包
- * *Service:以Service结尾的接口名
- * .Pager:以Pager方法
- * 只要同时匹配上诉四个条件,就会被列为目标对象
- * 上诉配置要生效,代理注释一定要打开:
- * @param args
- * @return
- * @throws Throwable
- */
- @Around("execution(* *..*Biz.*Pager(..))")
- public Object invoke(ProceedingJoinPoint args) throws Throwable {
- Object[] params = args.getArgs();
- PageBean pageBean = null;
- for (Object param : params) {
- if(param instanceof PageBean){
- pageBean = (PageBean)param;
- break;
- }
- }
-
- if(pageBean != null && pageBean.isPagination())
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
-
- Object list = args.proceed(params);
-
- if(null != pageBean && pageBean.isPagination()){
- PageInfo pageInfo = new PageInfo((List) list);
- pageBean.setTotal(pageInfo.getTotal()+"");
- }
- return list;
- }
- }
@Around:代表这是一个环绕通知
然后我们测试一下:
- @Test
- public void listPager() {
- Map map=new HashMap();
- map.put("bname","圣墟");
- //查询出第二页的20条数据
- PageBean pageBean=new PageBean();
- pageBean.setPage(2);
- pageBean.setRows(20);
- bookBiz.listPager(map,pageBean).forEach(System.out::println);
- }
查询结果:
OK