• springboot2.3+mybatis+pageHelper


    系统环境:

    操作系统: win10

    jdk版本:

    openjdk version "12" 2019-03-19
    OpenJDK Runtime Environment (build 12+33)
    OpenJDK 64-Bit Server VM (build 12+33, mixed mode, sharing)

    idea版本:

    IntelliJ IDEA 2020.2.1 (Ultimate Edition)
    Build #IU-202.6948.69, built on August 25, 2020
    Licensed to hello
    Subscription is active until September 11, 2021
    For educational use only.
    Runtime version: 11.0.8+10-b944.31 amd64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
    Windows 10 10.0
    GC: ParNew, ConcurrentMarkSweep
    Memory: 966M
    Cores: 8
    Non-Bundled Plugins: Lombook Plugin, com.intellij.kubernetes, training

    maven版本:3.6.3

    表结构和数据

    -- --------------------------------------------------------
    -- 主机:                           127.0.0.1
    -- 服务器版本:                        8.0.21 - MySQL Community Server - GPL
    -- 服务器操作系统:                      Win64
    -- HeidiSQL 版本:                  11.0.0.5919
    -- --------------------------------------------------------
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET NAMES utf8 */;
    /*!50503 SET NAMES utf8mb4 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    
    -- 导出  表 test.user 结构
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE IF NOT EXISTS `user` (
      `id` bigint NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL DEFAULT '',
      `update_at` bigint unsigned NOT NULL DEFAULT '0',
      `create_at` bigint NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    
    -- 正在导出表  test.user 的数据:~2 rows (大约)
    DELETE FROM `user`;
    /*!40000 ALTER TABLE `user` DISABLE KEYS */;
    INSERT INTO `user` (`id`, `name`, `update_at`, `create_at`) VALUES
        (19, '这个被我改动过', 1600150902, 1600150901),
        (20, '我插入了一个数据', 0, 1600150902),
        (107, '第三个', 0, 123);
    /*!40000 ALTER TABLE `user` ENABLE KEYS */;
    
    /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
    /*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

    项目结构:

    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─com
    │  │  │      └─rurjs
    │  │  │          └─mybatisxml
    │  │  │              │  MybatisxmlApplication.java
    │  │  │              │
    │  │  │              ├─dao
    │  │  │              │      RoleDao.java
    │  │  │              │
    │  │  │              ├─dto
    │  │  │              ├─entity
    │  │  │              │      BaseEntity.java
    │  │  │              │      RoleEntity.java
    │  │  │              │
    │  │  │              ├─enums
    │  │  │              ├─service
    │  │  │              │  │  IUsers.java
    │  │  │              │  │
    │  │  │              │  └─impl
    │  │  │              └─utils
    │  │  │                      RjsTimeUtils.java
    │  │  │
    │  │  └─resources
    │  │      │  application.yml
    │  │      │
    │  │      ├─mapper
    │  │      │      RoleMapper.xml
    │  │      │
    │  │      ├─static
    │  │      └─templates
    │  └─test
    │      └─java
    │          └─com
    │              └─rurjs
    │                  └─mybatisxml
    │                          MybatisxmlApplicationTests.java
    │                          TestRoleModel.java

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.rurjs</groupId>
        <artifactId>mybatisxml</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mybatisxml</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>14</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.3</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
    
    
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    application.yml

    spring:
      #  profiles:
      #    active: dev
      datasource:
        username: root
        password: root
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
        driver-class-name: com.mysql.cj.jdbc.Driver
    server:
      port: 8080
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.example.mybatisdemo.entity
      configuration:
        map-underscore-to-camel-case: true
    
    # Logger Config
    logging:
      level:
        com.baomidou.mybatisplus.samples: debug
        com.rurjs.mybatisxml: debug

    RoleEntity

    package com.rurjs.mybatisxml.entity;
    
    public class RoleEntity extends BaseEntity{
    }

    BaseEntity

    package com.rurjs.mybatisxml.entity;
    
    import lombok.Data;
    
    @Data
    public class BaseEntity {
        private Long id;
        private String name;
        private Long createAt;
        private Long updateAt;
    
    }

    RoleMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.rurjs.mybatisxml.dao.RoleDao">
    
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="com.rurjs.mybatisxml.entity.RoleEntity">
            <result column="id" property="id" />
            <result column="name" property="name" />
            <result column="create_at" property="createAt" />
            <result column="update_at" property="updateAt" />
        </resultMap>
        <!--表名-->
        <sql id="tName">
            user
        </sql>
    
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            id,
            `name`,
            create_at,
            update_at
        </sql>
        <!--根据id查询一个实体-->
        <select id="find" resultMap="BaseResultMap">
            SELECT
                <include refid="Base_Column_List"/>
            FROM
                <include refid="tName"/>
            WHERE
                id=#{id}
        </select>
        <!--根据条件查询一个-->
        <select id="getFirst" resultMap="BaseResultMap">
            SELECT
                <include refid="Base_Column_List"/>
            FROM
                <include refid="tName"/>
            <where>
                <if test="name!=null">
                    ,`name`=#{name}
                </if>
            </where>
            LIMIT 1
        </select>
    <!--    简单查询-->
        <select id="getList" resultMap="BaseResultMap">
            SELECT
                <include refid="Base_Column_List" />
            FROM
                <include refid="tName"/>
            <where>
                <if test="name!=null">
                  and  `name` like concat(#{name},'%')
                </if>
            </where>
        </select>
    <!--    分页查询-->
        <!--添加一个(useGeneratedKeys:使用自增id,keyProperty:回写到实体类属性:id-->
        <insert id="insert" useGeneratedKeys="true" keyProperty="id">
            <bind name="timeNow" value='@com.rurjs.mybatisxml.utils.RjsTimeUtils@unixNow()'/>
            INSERT INTO
              <include refid="tName"/>
              (`name`,create_at,update_at) VALUES (#{name},#{timeNow},0)
    
        </insert>
        <!--更新一个-->
        <update id="update">
            UPDATE
            <include refid="tName"/>
            <set>
                <if test="name!=null">
                    ,name=#{name}
                </if>
                ,update_at=${@com.rurjs.mybatisxml.utils.RjsTimeUtils@unixNow()}
            </set>
            WHERE
            id=#{id}
        </update>
        <!--删除一个(根据主键)-->
        <delete id="delete" parameterType="long">
            DELETE FROM
                <include refid="tName"/>
            WHERE
                id=#{id}
        </delete>
    </mapper>

    RoleDao

    package com.rurjs.mybatisxml.dao;
    
    import com.rurjs.mybatisxml.entity.RoleEntity;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface RoleDao {
    
        public RoleEntity find(Long id);
    
        public RoleEntity getFirst(RoleEntity entity);
    
        public List<RoleEntity> getList(RoleEntity entity);
    
        public int insert(RoleEntity entity);
    
        public int update(RoleEntity entity);
    
        public int delete(Long id);
    
    }

    单元测试(最后一个测试方法)

    package com.rurjs.mybatisxml;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.rurjs.mybatisxml.dao.RoleDao;
    import com.rurjs.mybatisxml.entity.RoleEntity;
    import lombok.extern.slf4j.Slf4j;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.util.Assert;
    
    import java.util.List;
    
    @Slf4j
    @SpringBootTest
    public class TestRoleModel {
        @Autowired
        private RoleDao roleDao;
    
        @Transactional
        @Test
        void insert(){
            RoleEntity role = new RoleEntity();
            role.setName("我插入了一个数据");
            roleDao.insert(role);
            Assert.notNull(role.getId(),"回写id");
            log.debug(role.toString());
        }
    
        @Transactional
        @Test
        void update(){
            insert();
            RoleEntity role = roleDao.getFirst(new RoleEntity());
            Assert.notNull(role,"有一条数据");
            role.setName("这个被我改动过");
            roleDao.update(role);
    
            RoleEntity rq = roleDao.find(role.getId());
            Assert.isTrue(rq.getName().equals("这个被我改动过"),"更新成功");
        }
    
        @Transactional
        @Test
        void delete(){
            insert();
            RoleEntity role = roleDao.getFirst(null);
            roleDao.delete(role.getId());
            RoleEntity r2 = roleDao.find(role.getId());
            Assert.isNull(r2,"已删除");
    
    
        }
    
        @Transactional
        @Test
        void getList(){
            for (int i = 0 ;i<10;i++){
                RoleEntity role = new RoleEntity();
                role.setName("r"+i);
                roleDao.insert(role);
            }
            List<RoleEntity> list = roleDao.getList(null);
            Assert.notNull(list,"插入成功");
            RoleEntity roleQuery = new RoleEntity();roleQuery.setName("r");
            List<RoleEntity> list1 = roleDao.getList(roleQuery);
            Assert.isTrue(list1.size()==10,"插入10条");
        }
        @Transactional
        @Test
        void getListByPage(){
            PageHelper.startPage(2,2);
            PageInfo<RoleEntity> pageInfo = new PageInfo<>(roleDao.getList(null));
            log.debug(pageInfo.toString());
        }
    
    
    
    }
  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/tu13/p/springboot_mybatis_pagehelper.html
Copyright © 2020-2023  润新知