• mybatis与spring集成和分页插件应用


    目录

    1.mybatis简介

    2. mybatis基本构成

    3. mybatis与hibernate的区别

    4. 项目中添加mybatis支持 与spring做集成

    ~我们用student实体来做一个查询的实例 使用方式 spring注解注入

    5.分页 插件 pagehelper 的实现 使用spring切面与自定义注解实现功能

    ​2.1 注解编写


    1.mybatis简介

    Mybatis是Apache的一个Java开源项目,是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中。与JDBC相比: 1)Mybatis通过参数映射方式,可以将参数灵活的配置在SQL语句中的配置文件中,避免在Java类中配置参数(JDBC) 2)Mybatis通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索(JDBC) 3)Mybatis可以通过Xml配置文件对数据库连接进行管理

    2. mybatis基本构成

    SqlSessionFactoryBuilder: 根据配置信息生成SqlSessionFactory SqlSessionFactory: 用于生成SqlSession SqlSession: SqlSession是MyBatis的关键对象,通过这个接口可以操作命令,管理事务等 SqlMapper:MyBatis的设计组件,有java接口和xml文件构成。需要给出对应的sql映射和映射规则

    3. mybatis与hibernate的区别

    两者均为ORM框架,但也有一些不同

    mybatishibernate
    轻量级重量级
    半自动化全自动化
    sqlhql(但也可以使用sql,但违背了hibernate的初衷)
    扩展性、迁移性比较差无缝移植

    4. 项目中添加mybatis支持 与spring做集成

    1) 使用maven新建一个web工程 2) idea在创建web工程时不会自动创建java,resources,test等目录,可以手动创建

     3)通过pom.xml添加必要的依赖,直接将相关依赖考到项目中的pom.xml文件即可。

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.    <modelVersion>4.0.0modelVersion>
    5.    <groupId>org.examplegroupId>
    6.    <artifactId>deomMybatisartifactId>
    7.    <version>1.0-SNAPSHOTversion>
    8.    <packaging>warpackaging>
    9.    <name>deomMybatis Maven Webappname>
    10.    
    11.    <url>http://www.example.comurl>
    12.    <properties>
    13.        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    14.        <maven.compiler.source>1.8maven.compiler.source>
    15.        <maven.compiler.target>1.8maven.compiler.target>
    16.        
    17.        <mysql-version>8.0.29mysql-version>
    18.        <mybatis-version>3.5.9mybatis-version>
    19.        <spring-version>5.3.18spring-version>
    20.    properties>
    21.    <dependencies>
    22.        <dependency>
    23.            <groupId>junitgroupId>
    24.            <artifactId>junitartifactId>
    25.            <version>4.13.1version>
    26.            <scope>testscope>
    27.        dependency>
    28.        
    29.        <dependency>
    30.            <groupId>org.springframeworkgroupId>
    31.            <artifactId>spring-contextartifactId>
    32.            <version>${spring-version}version>
    33.        dependency>
    34.        <dependency>
    35.            <groupId>org.springframeworkgroupId>
    36.            <artifactId>spring-webartifactId>
    37.            <version>${spring-version}version>
    38.        dependency>
    39.        <dependency>
    40.            <groupId>org.springframeworkgroupId>
    41.            <artifactId>spring-txartifactId>
    42.            <version>${spring-version}version>
    43.        dependency>
    44.        <dependency>
    45.            <groupId>org.springframeworkgroupId>
    46.            <artifactId>spring-aopartifactId>
    47.            <version>${spring-version}version>
    48.        dependency>
    49.        <dependency>
    50.            <groupId>org.springframeworkgroupId>
    51.            <artifactId>spring-testartifactId>
    52.            <version>${spring-version}version>
    53.        dependency>
    54.        <dependency>
    55.            <groupId>org.springframeworkgroupId>
    56.            <artifactId>spring-jdbcartifactId>
    57.            <version>${spring-version}version>
    58.        dependency>
    59.        <dependency>
    60.            <groupId>org.springframeworkgroupId>
    61.            <artifactId>spring-webmvcartifactId>
    62.            <version>${spring-version}version>
    63.        dependency>
    64.        <dependency>
    65.            <groupId>org.springframeworkgroupId>
    66.            <artifactId>spring-aspectsartifactId>
    67.            <version>${spring-version}version>
    68.        dependency>
    69.        
    70.        <dependency>
    71.            <groupId>org.mybatisgroupId>
    72.            <artifactId>mybatis-springartifactId>
    73.            <version>2.0.6version>
    74.        dependency>
    75.        
    76.        <dependency>
    77.            <groupId>org.apache.commonsgroupId>
    78.            <artifactId>commons-dbcp2artifactId>
    79.            <version>2.9.0version>
    80.        dependency>
    81.        <dependency>
    82.            <groupId>org.apache.commonsgroupId>
    83.            <artifactId>commons-pool2artifactId>
    84.            <version>2.11.1version>
    85.        dependency>
    86.        
    87.        <dependency>
    88.            <groupId>mysqlgroupId>
    89.            <artifactId>mysql-connector-javaartifactId>
    90.            <version>${mysql-version}version>
    91.        dependency>
    92.        
    93.        <dependency>
    94.            <groupId>org.mybatisgroupId>
    95.            <artifactId>mybatisartifactId>
    96.            <version>${mybatis-version}version>
    97.        dependency>
    98.        
    99.        <dependency>
    100.            <groupId>com.belerwebgroupId>
    101.            <artifactId>pinyin4jartifactId>
    102.            <version>2.5.1version>
    103.        dependency>
    104.        
    105.        <dependency>
    106.            <groupId>org.projectlombokgroupId>
    107.            <artifactId>lombokartifactId>
    108.            <version>1.18.22version>
    109.            <scope>providedscope>
    110.        dependency>
    111.        
    112.        
    113.        <dependency>
    114.            <groupId>org.slf4jgroupId>
    115.            <artifactId>slf4j-apiartifactId>
    116.            <version>1.7.36version>
    117.        dependency>
    118.        <dependency>
    119.            <groupId>ch.qos.logbackgroupId>
    120.            <artifactId>logback-classicartifactId>
    121.            <version>1.2.10version>
    122.        dependency>
    123.      
    124.        <dependency>
    125.            <groupId>javax.servletgroupId>
    126.            <artifactId>javax.servlet-apiartifactId>
    127.            <version>3.1.0version>
    128.            <scope>providedscope>
    129.        dependency>
    130.        
    131.        <dependency>
    132.            <groupId>com.github.pagehelpergroupId>
    133.            <artifactId>pagehelperartifactId>
    134.            <version>5.1.2version>
    135.        dependency>
    136.        
    137.        <dependency>
    138.            <groupId>jstlgroupId>
    139.            <artifactId>jstlartifactId>
    140.            <version>1.2version>
    141.        dependency>
    142.        <dependency>
    143.            <groupId>taglibsgroupId>
    144.            <artifactId>standardartifactId>
    145.            <version>1.1.2version>
    146.        dependency>
    147.    dependencies>
    148.    <build>
    149.        <finalName>deomMybatisfinalName>
    150.        <pluginManagement>
    151.            <plugins>
    152.                <plugin>
    153.                    <groupId>org.apache.maven.pluginsgroupId>
    154.                    <artifactId>maven-clean-pluginartifactId>
    155.                    <version>3.1.0version>
    156.                plugin>
    157.                
    158.                <plugin>
    159.                    <groupId>org.apache.maven.pluginsgroupId>
    160.                    <artifactId>maven-resources-pluginartifactId>
    161.                    <version>3.0.2version>
    162.                plugin>
    163.                <plugin>
    164.                    <groupId>org.apache.maven.pluginsgroupId>
    165.                    <artifactId>maven-compiler-pluginartifactId>
    166.                    <version>3.8.0version>
    167.                plugin>
    168.                <plugin>
    169.                    <groupId>org.apache.maven.pluginsgroupId>
    170.                    <artifactId>maven-surefire-pluginartifactId>
    171.                    <version>2.22.1version>
    172.                plugin>
    173.                <plugin>
    174.                    <groupId>org.apache.maven.pluginsgroupId>
    175.                    <artifactId>maven-war-pluginartifactId>
    176.                    <version>3.2.2version>
    177.                plugin>
    178.                <plugin>
    179.                    <groupId>org.apache.maven.pluginsgroupId>
    180.                    <artifactId>maven-install-pluginartifactId>
    181.                    <version>2.5.2version>
    182.                plugin>
    183.                <plugin>
    184.                    <groupId>org.apache.maven.pluginsgroupId>
    185.                    <artifactId>maven-deploy-pluginartifactId>
    186.                    <version>2.8.2version>
    187.                plugin>
    188.                
    189.                <plugin>
    190.                    <groupId>org.apache.maven.pluginsgroupId>
    191.                    <artifactId>maven-surefire-pluginartifactId>
    192.                    <configuration>
    193.                        <testFailureIgnore>truetestFailureIgnore>
    194.                    configuration>
    195.                plugin>
    196.            plugins>
    197.        pluginManagement>
    198.    build>
    199. project>

    4)将mybatis 配置到spring中的 核心配置文件(applicationContext-base.xml),jdbc.properties 连接参数, logback.xml日志考到项目的resources目录下,并修改数据库的连接。

    applicationContext-base.xml spring核心配置文件

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    4.       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    5.       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    6. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
    8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    9.    
    10.    
    11.    
    12.    
    13.    <context:component-scan base-package="com.zking.mybatis01"/>
    14.    
    15.    
    16.    
    17.    
    18.    <context:property-placeholder location="classpath:jdbc.properties" ignore-resource-not-found="true"/>
    19.    
    20.    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    21.          destroy-method="close">
    22.        <property name="driverClassName" value="${driver.name}"/>
    23.        <property name="url" value="${db.url}"/>
    24.        <property name="username" value="${db.user}"/>
    25.        <property name="password" value="${db.password}"/>
    26.        
    27.        <property name="initialSize" value="10"/>
    28.        
    29.        <property name="maxTotal" value="100"/>
    30.        
    31.        <property name="maxIdle" value="50"/>
    32.        
    33.        <property name="minIdle" value="10"/>
    34.        
    35.        
    36.        <property name="maxWaitMillis" value="-1"/>
    37.          
    38.        <property name="testWhileIdle" value="true">property>
    39.        <property name="validationQuery" value="select 1">property>
    40.    bean>
    41.    
    42.    
    43.    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    44.        
    45.        <property name="dataSource" ref="dataSource"/>
    46.        
    47.        
    48.        
    49.        <property name="mapperLocations" value="classpath:/mapper/**/*.xml"/>
    50.        <property name="plugins">
    51.            <list>
    52.                <bean class="com.github.pagehelper.PageInterceptor">
    53.                    <property name="properties">
    54.                        
    55.                        <value>
    56.                           helperDialect=mysql
    57.                        value>
    58.                    property>
    59.                bean>
    60.            list>
    61.        property>
    62.    bean>
    63.    
    64.    
    65.    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    66.        
    67.        
    68.        <property name="basePackage" value="com/zking/**/mapper"/>
    69.        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    70.    bean>
    71.    
    72.    
    73.    <aop:aspectj-autoproxy/>
    74.    
    75.   <bean id="transactionManager"
    76.          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    77.        <property name="dataSource" ref="dataSource"/>
    78.    bean>
    79.    
    80.    <tx:annotation-driven transaction-manager="transactionManager"/>
    81. beans>

    jdbc.properties mysql 8.0 连接配置文件

    1. driver.name=com.mysql.cj.jdbc.Driver
    2. db.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=true
    3. db.user=root
    4. db.password=123456

    logback.xml 配置日志文件

    1. "1.0" encoding="UTF-8"?>
    2. <configuration debug="false">
    3.    
    4.    <property name="LOG_HOME" value="d:\\temp\\mylogs" />
    5.    
    6.    <property name="LOG_NAME" value="mybatisdemo"/>
    7.    
    8.    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    9.        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    10.            
    11.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
    12.        encoder>
    13.    appender>
    14.    
    15.    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    16.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    17.            
    18.            <FileNamePattern>${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.logFileNamePattern>
    19.            
    20.            <MaxHistory>30MaxHistory>
    21.        rollingPolicy>
    22.        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    23.            
    24.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
    25.        encoder>
    26.        
    27.        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    28.            <MaxFileSize>10MBMaxFileSize>
    29.        triggeringPolicy>
    30.    appender>
    31.    
    32.    
    33.    
    34.    
    35.    <root level="INFO">
    36.        <appender-ref ref="STDOUT" />
    37.        <appender-ref ref="FILE"/>
    38.    root>
    39. configuration>

    5) 在src/main/resources目录下创建mapper用于方式mybatis的映射文件

     6)创建包的目录结构,如下图所示:

     7)ssh2与ssm的对应关系

    ssh2ssm
    actioncontroller
    serviceservice
    daomapper
    IXxxDao.javaXxxMapper
    XxxDao.javaXxxMapper.xml
    entitymodel
    Xxx.javaXxx.java
    Xxx.hbm.xml

    8)编写model,即存放数据的对象,在ssh2时叫做entity。

    这里就可以看到 我们所用的lombok的强大的 @Data 会自动生成 get set 与tostring 等等。。。。

    使用lombok需要有的插件

     

    9)mapper编写(相当于dao)。

    编写之前我们需下载一个插件方便编写mybatis 如下图

    10)在目录结构中加入一个mapper包,在该包中创建一个TestMapper接口

    创建好接口后 ----可直接使用插件生成 mybatis的xml配置文件

    注意 :第一次创建的时候会提示你选择地址 我们直接选择 resources 中我们创建的mapper文件

    ~我们用student实体来做一个查询的实例 使用方式 spring注解注入

    1.mapper中定义的接口

    1. package com.zking.mybatis01.mapper;
    2. import com.zking.mybatis01.dto.StudentDto;
    3. import com.zking.mybatis01.model.Student;
    4. import org.springframework.stereotype.Repository;
    5. import java.util.List;
    6. @Repository("studentMapper")
    7. public interface IStudentMapper {
    8.    /**
    9.     * 查询所有学生
    10.     * @param stu 根据姓名 模糊查询
    11.     * @return 返回 学生集合
    12.     */
    13.    public List<Student> listStudent(Student stu);
    14.    /**
    15.     * 增加学生
    16.     * @param stu 学生实体
    17.     */
    18.   public Integer addStudent(Student stu);
    19.    /**
    20.     * 修改学生信息
    21.     * @param upd
    22.     * @return
    23.     */
    24.   public Integer updStudent(Student upd);
    25.    /**
    26.     * 根据学生id 进行删除
    27.     * @param stu
    28.     * @return
    29.     */
    30.   Integer delStudent(Student stu);
    31.    /**
    32.     * 根据 用户多个id查询
    33.     * @return
    34.     */
    35.   List<Student> listStudentByid(StudentDto dto);
    36. }

    注意:在xml中注释的方法要在对应的java接口中注释掉,(注释掉只是为了少写点代码,尽快测试)

    注:#{} 与 ${} 的区别 #{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 “4,44,514”就会变成“ ‘4,44,514’ ”

    ${ }是字符串替换, MyBatis在处理${ }时,它会将sql中的${ }替换为变量的值,传入的数据不会加两边加上单引号。

    使用${ }会导致sql注入,不利于系统的安全性!

    SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的有匿名登录(在登录框输入恶意的字符串)、借助异常获取数据库信息等

    2.如数据库与实体的属性名不一致 需要配置映射关系 如图:👇

     2.1 .我们配置好的 增删改查

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.zking.mybatis01.mapper.IStudentMapper">
    4.    
    5.    <select id="listStudent" resultType="com.zking.mybatis01.model.Student">
    6.       select sid,sname,birthday,ssex
    7.       FROM t_student
    8.      <where>
    9.          <if test="sname !=null and ''!=sname ">
    10.               sname like concat(#{sname},'%')
    11.          if>
    12.      where>
    13.    select>
    14.    
    15.    <select id="listStudentByid" resultType="com.zking.mybatis01.model.Student">
    16.       select sid,sname,birthday,ssex from t_student
    17. <where>
    18.    <choose>
    19.       <when test="listSid != null and listSid.size != 0">
    20.           and sid in
    21.          
    22.         <foreach collection="listSid" item="sid" open="(" close=")" separator=",">
    23.             #{sid}
    24.         foreach>
    25.       when>
    26.    choose>
    27. where>
    28.    select>
    29.    
    30.    <insert id="addStudent" parameterType="com.zking.mybatis01.model.Student">
    31.   Insert into t_student (sname,birthday,ssex)
    32.   values (#{sname},#{birthday},#{ssex})
    33.    insert>
    34.  
    35.    <update id="updStudent"  parameterType="com.zking.mybatis01.model.Student">
    36.     update t_student
    37.     <set>
    38.       <if test="sname !=null and ''!=sname">
    39.           sname = #{sname},
    40.       if>
    41.         <if test="birthday !=null">
    42.             birthday = #{birthday},
    43.         if>
    44.         <if test="ssex !=null and ''!=ssex">
    45.             ssex = #{ssex,jdbcType=NUMERIC}
    46.         if>
    47.     set>
    48.      <where>
    49.           sid = #{sid}
    50.      where>
    51.    update>
    52.    <delete id="delStudent" parameterType="com.zking.mybatis01.model.Student">
    53.       delete from t_student <where>
    54.       sid = #{sid}
    55.    where>
    56.    delete>
    57. mapper>

    3.接下来我们编写service 事务层

    定义我们的service接口 ↓

    1. package com.zking.mybatis01.service;
    2. import com.zking.mybatis01.dto.StudentDto;
    3. import com.zking.mybatis01.model.Student;
    4. import com.zking.mybatis01.utils.PageBean;
    5. import java.util.List;
    6. public interface IStudentService {
    7.    /**
    8.     * 查询所有学生信息
    9.     * @param stu 模糊查询
    10.     * @return 学生集合
    11.     */
    12.    List<Student> listStudentpaging(Student stu , PageBean pge);
    13.    /**
    14.     * 增加学生
    15.     * @param stu 学生实体
    16.     */
    17.    Integer addStudent(Student stu);
    18.    /**
    19.     * 修改学生信息
    20.     * @param upd
    21.     * @return
    22.     */
    23.    public Integer updStudent(Student upd);
    24.    /**
    25.     * 根据学生id 进行删除
    26.     * @param stu
    27.     * @return
    28.     */
    29.    Integer delStudent(Student stu);
    30.    /**
    31.     * 根据 用户多个id查询
    32.     * @return
    33.     */
    34.    List<Student> listStudentByid(StudentDto dto );
    35. }
    定义实现类
    1. package com.zking.mybatis01.service;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.zking.mybatis01.dto.StudentDto;
    5. import com.zking.mybatis01.interfaces.Paging;
    6. import com.zking.mybatis01.mapper.IStudentMapper;
    7. import com.zking.mybatis01.model.Student;
    8. import com.zking.mybatis01.utils.PageBean;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.beans.factory.annotation.Qualifier;
    11. import org.springframework.stereotype.Service;
    12. import javax.annotation.Resource;
    13. import java.util.List;
    14. @Service
    15. public class StudentServiceImpl implements IStudentService {
    16.   //类型判断 注入
    17.    @Autowired
    18.    private IStudentMapper stu;
    19.  
    20.    @Override
    21.    public List<Student> listStudentpaging(Student stu, PageBean pge) {
    22.        return  this.stu.listStudent(stu);
    23.   }
    24.    @Override
    25.    public Integer addStudent(Student stu) {
    26.       return   this.stu.addStudent(stu);
    27.   }
    28.    @Override
    29.    public Integer updStudent(Student upd) {
    30.        return this.stu.updStudent(upd);
    31.   }
    32.    @Override
    33.    public Integer delStudent(Student stu) {
    34.        return this.stu.delStudent(stu);
    35.   }
    36.    @Override
    37.    public List<Student> listStudentByid(StudentDto dto) {
    38.        return this.stu.listStudentByid(dto);
    39.   }
    40. }

    编写测试用例 测试功能

    部分测试

    1. package com.zking.mybatis01.service;
    2. import com.zking.mybatis01.dto.StudentDto;
    3. import com.zking.mybatis01.model.Student;
    4. import com.zking.mybatis01.utils.PageBean;
    5. import org.junit.Test;
    6. import org.junit.runner.RunWith;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.test.context.ContextConfiguration;
    9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    10. import java.util.Arrays;
    11. import java.util.Date;
    12. import java.util.List;
    13. //帮我们去生成spring 上下文对象
    14. @RunWith(SpringJUnit4ClassRunner.class)
    15. @ContextConfiguration(locations={"classpath*:applicationContext*.xml"})
    16. public class StudentServiceImplTest {
    17.    @Autowired
    18.    private IStudentService studentService;
    19.    @Test
    20.    public void listStudent() {
    21.        Student st=new Student();
    22.        st.setBirthday(new Date());
    23.        st.setSname("小黑");
    24.        st.setSsex(1);
    25.        /*List<Student> students = studentService.listStudent(st);
    26.        students.forEach(t->System.out.println(t));*/
    27.      Integer i=  studentService.addStudent(st);
    28.        System.out.println(i);
    29.   }
    30.    @Test
    31.    public void updStudent(){
    32.        Student st=new Student();
    33.        st.setSid(1);
    34.        st.setBirthday(new Date());
    35.        st.setSname("小名");
    36.        st.setSsex(1);
    37.        Integer integer = studentService.updStudent(st);
    38.        System.out.println(integer);
    39.   }
    40.    @Test
    41.   public void delStudent(){
    42.       Student st=new Student();
    43.       st.setSid(18);
    44.       Integer integer = studentService.delStudent(st);
    45.       System.out.println(integer);
    46.   }
    47.   @Test
    48. public void listStudentByid(){
    49.       StudentDto studentDto = new StudentDto();
    50.       studentDto.setListSid(Arrays.asList(1,2,3,5,6));
    51.       List<Student> students = studentService.listStudentByid(studentDto);
    52.       students.forEach(System.out::println);
    53.   }
    54. }

    5.分页 插件 pagehelper 的实现 使用spring切面与自定义注解实现功能

    引入pagehelper 包 如果复制了上方的pom的 可不需要加入

    1. <dependency>
    2.    <groupId>com.github.pagehelpergroupId>
    3.    <artifactId>pagehelperartifactId>
    4.    <version>5.1.2version>
    5. dependency>

    1.编写分页实体便于分页

    1. package com.zking.mybatis01.utils;
    2. import com.mysql.cj.util.StringUtils;
    3. import java.util.Map;
    4. import javax.servlet.http.HttpServletRequest;
    5. public class PageBean {
    6. /**
    7. * 页码
    8. */
    9. private int page = 1;
    10. /**
    11. * 每页显示的记录数
    12. */
    13. private int rows = 10;
    14. /**
    15. * 总记录数
    16. */
    17. private int total = 0;
    18. /**
    19. * 是否分页
    20. */
    21. private boolean pagination = true;
    22. /**
    23. * 记录查询的url,以便于点击分页时再次使用
    24. */
    25. private String url;
    26. /**
    27. * 存放请求参数,用于生成隐藏域中的元素
    28. */
    29. private Map parameterMap;
    30. /**
    31. * 根据传入的Request初始化分页对象
    32. * @param request
    33. */
    34. public void setRequest(HttpServletRequest request) {
    35. if(!StringUtils.isNullOrEmpty(request.getParameter("page"))) {
    36. this.page = Integer.valueOf(request.getParameter("page"));
    37. }
    38. if(!StringUtils.isNullOrEmpty(request.getParameter("rows"))) {
    39. this.rows = Integer.valueOf(request.getParameter("rows"));
    40. }
    41. if(!StringUtils.isNullOrEmpty(request.getParameter("pagination"))) {
    42. this.pagination = Boolean.valueOf(request.getParameter("pagination"));
    43. }
    44. this.url = request.getRequestURI();
    45. this.parameterMap = request.getParameterMap();
    46. request.setAttribute("pageBean", this);
    47. }
    48. public int getPage() {
    49. return page;
    50. }
    51. public void setPage(int page) {
    52. this.page = page;
    53. }
    54. public int getRows() {
    55. return rows;
    56. }
    57. public void setRows(int rows) {
    58. this.rows = rows;
    59. }
    60. public int getTotal() {
    61. return total;
    62. }
    63. public void setTotal(int total) {
    64. this.total = total;
    65. }
    66. public boolean isPagination() {
    67. return pagination;
    68. }
    69. public void setPagination(boolean pagination) {
    70. this.pagination = pagination;
    71. }
    72. public String getUrl() {
    73. return url;
    74. }
    75. public void setUrl(String url) {
    76. this.url = url;
    77. }
    78. public Map getParameterMap() {
    79. return parameterMap;
    80. }
    81. public void setParameterMap(Map parameterMap) {
    82. this.parameterMap = parameterMap;
    83. }
    84. //计算起始页码
    85. public int getStartIndex() {
    86. return (this.page - 1) * this.rows;
    87. }
    88. //获取总页数
    89. public int getTotalPage() {
    90. if (this.getTotal() % this.rows == 0) {
    91. return this.getTotal() / this.rows;
    92. } else {
    93. return this.getTotal() / this.rows + 1;
    94. }
    95. }
    96. //上一页
    97. public int getPreviousPage() {
    98. return this.page - 1 > 0 ? this.page - 1 : 1;
    99. }
    100. //下一页
    101. public int getNextPage() {
    102. return this.page + 1 > getTotalPage() ? getTotalPage() : this.page + 1;
    103. }
    104. }

    2.在aop包中定义分页切面 定义切面前需要 架包 spring-aspects

    1. package com.zking.mybatis01.aop;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.zking.mybatis01.utils.PageBean;
    5. import org.aspectj.lang.ProceedingJoinPoint;
    6. import org.aspectj.lang.annotation.After;
    7. import org.aspectj.lang.annotation.Around;
    8. import org.aspectj.lang.annotation.Aspect;
    9. import org.springframework.stereotype.Component;
    10. import java.util.List;
    11. @Component
    12. @Aspect
    13. public class PaginAop {
    14.    //环绕通知 自定义注解 分辨是否调用
    15.    @Around("@annotation(com.zking.mybatis01.interfaces.Paging)")
    16.    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
    17.       //获取目标方法的所有参数
    18.        Object[] args = joinPoint.getArgs();
    19.        PageBean pag =null;
    20.        for (Object arg : args) {
    21.            if(arg instanceof PageBean){
    22.                 pag=(PageBean) arg;
    23.                if(pag!=null && pag.isPagination()){
    24.                    PageHelper.startPage(pag.getPage(),pag.getRows());
    25.               }
    26.           }
    27.       }
    28.        Object proceed = joinPoint.proceed();
    29.        if(pag!=null && pag.isPagination()){
    30.            PageInfo info=new PageInfo((List) proceed);
    31.            pag.setTotal((int)info.getTotal());
    32.       }
    33.        return  proceed;
    34.   }
    35. }

    ​2.1 注解编写

    接下来我们就可以去使用注解了

    1.我们将自定义注解标记在我们需要分页的方法上 在service中实现

    2.测试用例中添加

    1.   @Test
    2.  public void listStudentPage(){
    3.       PageBean page=new PageBean();
    4.       page.setRows(3);
    5.       List<Student> students = studentService.listStudentpaging(null, page);
    6.       students.forEach(System.out::println);
    7.   }

    3.运行结果

  • 相关阅读:
    电脑找不到vcruntime140_1.dll丢失的解决方法-一键修复教程
    玩转nginx的配置文件3
    47.【Java 基础之面向对象】
    两年“换芯”期限将至,苹果芯片工程师又被挖,微软加速开发定制芯片
    我把 CPU 三级缓存的秘密,藏在这 8 张图里
    ​LeetCode解法汇总2525. 根据规则将箱子分类
    【混合编程】Matlab和C++混编
    tomcat 搭建博客 及破解数据库密码
    在windows中使用mysql workbench连接vmware windows虚拟机中的mysql
    Xilinx约束学习笔记—— 时序约束
  • 原文地址:https://blog.csdn.net/qq_62898618/article/details/126589573