当前位置: 首页 > news >正文

MyBatis6-逆向工程、分页插件

逆向工程

正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表,Hibernate是支持正向工程 的

逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:

  • Java实体类
  • Mapper接口
  • Mapper映射文件

创建逆向工程的步骤:

1.添加依赖和插件

<!-- 依赖MyBatis核心包 -->
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency>
</dependencies><!-- 控制Maven在构建过程中相关配置 -->
<build><!-- 构建过程中用到的插件 --><plugins><!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><!-- 插件的依赖 --><dependencies><!-- 逆向工程的核心依赖 --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version></dependency><!-- 数据库连接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.2</version></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies></plugin></plugins>
</build>

2.创建MyBatis的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties"/><typeAliases><package name="com.qcby.pojo"/></typeAliases><environments default="mysql"><environment id="mysql"><!--配置事务的类型,使用本地事务策略--><transactionManager type="JDBC"></transactionManager><!--是否使用连接池 POOLED表示使用链接池,UNPOOLED表示不使用连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis1028"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/qcby/mapper/DeptMapper.xml"></mapper><mapper resource="com/qcby/mapper/EmpMapper.xml"></mapper></mappers>
</configuration>

3.创建逆向工程的配置文件

文件名必须是:generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><!--targetRuntime: 执行生成的逆向工程的版本MyBatis3Simple: 生成基本的CRUD(清新简洁版)MyBatis3: 生成带条件的CRUD(奢华尊享版)--><context id="DB2Tables" targetRuntime="MyBatis3"><!-- 数据库的连接信息 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatis1028"userId="root"password="123456"></jdbcConnection><!-- javaBean的生成策略--><javaModelGenerator targetPackage="com.qcby.pojo" targetProject=".\src\main\java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!-- SQL映射文件的生成策略 --><sqlMapGenerator targetPackage="com.qcby.mapper" targetProject=".\src\main\resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- Mapper接口的生成策略 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.qcby.mapper" targetProject=".\src\main\java"><property name="enableSubPackages" value="true" /></javaClientGenerator><!-- 逆向分析的表 --><!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName --><!-- domainObjectName属性指定生成出来的实体类的类名 --><table tableName="t_emp" domainObjectName="Emp"/><table tableName="t_dept" domainObjectName="Dept"/></context>
</generatorConfiguration>

4.执行MBG插件的generate目标

 效果:

测试:

    @Testpublic void testMBG() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);//查询所有数据  selectByExample根据条件查询  null:相当于查询所有List<Emp> list = mapper.selectByExample(null);for (Emp emp : list) {System.out.println(emp);}}

 

    @Testpublic void testMBG() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);//根据条件查询EmpExample example = new EmpExample();example.createCriteria().andEmpNameEqualTo("张三").andAgeGreaterThanOrEqualTo(20);//andexample.or().andDidIsNotNull();//orList<Emp> list = mapper.selectByExample(example);for (Emp emp : list) {System.out.println(emp);}}

分页插件

分页插件使用步骤:

1.添加依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version>
</dependency>

2.配置分页插件

在MyBatis的核心配置文件中配置插件:

<plugins><!--设置分页插件--><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3.

(1)在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能

  • pageNum:当前页的页码
  • pageSize:每页显示的条数

(2)在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据

  • list:分页之后的数据
  • navigatePages:导航分页的页码数

(3)分页相关数据

  • pageNum:当前页的页码
  • pageSize:每页显示的条数
  • size:当前页显示的真实条数
  • total:总记录数
  • pages:总页数
  • prePage:上一页的页码
  • nextPage:下一页的页码    
  • isFirstPage/isLastPage:是否为第一页/最后一页
  • hasPreviousPage/hasNextPage:是否存在上一页/下一页
  • navigatePages:导航分页的页码数
  • navigatepageNums:导航分页的页码,[1,2,3,4,5]
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qcby.mapper.EmpMapper;
import com.qcby.pojo.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class PageHelperTest {/*** limit index pageSize* index:当前页的起始索引* pageSize:每页显示的条数* pageNum:当前页的页码* index = (pageNum-1)*pageSize* @throws IOException*/@Testpublic void testPage() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);PageHelper.startPage(1,4);//显示第一页,每页显示4条数据List<Emp> list = mapper.selectByExample(null);PageInfo<Emp> page = new PageInfo<>(list,3);System.out.println(page);for (Emp emp : list) {System.out.println(emp);}}
}


http://www.mrgr.cn/news/69793.html

相关文章:

  • Scala中的case class
  • 谁会从新技术中受益?
  • 计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
  • 基于Cocos Creator开发的打砖块游戏
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • 在线绘制带community的蛋白质-蛋白质相互作用(PPI)网络图
  • 问:聊聊Spring IOC机制
  • npm常用函数定义手册(持续更新)
  • 使用 nsenter 进入 Docker 容器的操作
  • 逆向攻防世界CTF系列21-answer_to_everything
  • 【Rust练习】20.进一步深入特征
  • Debezium系列之:Incremental snapshotting设计原理
  • 临床预测模型-静态诺模/列线图(Nomogram)+校准曲线(Calibration)分析学习
  • 动态规划-两个数组的dp问题——718.最长重复子数组
  • 【leetcode练习·二叉树】用「分解问题」思维解题 I
  • 《PyTorch深度学习快速入门教程》学习笔记(第20周)
  • 计算机网络基本概念总结
  • cherno引擎课 -
  • 计算机网络-1.2分层结构
  • PostgreSQL 开启密码验证插件
  • 医学图像算法之基于Unet的视网膜血管分割
  • 【Lucene】从文本到索引:Lucene如何构建索引
  • 伊洛瓦底江
  • 存贷款调整 20241110
  • Linux进程信号
  • “穿梭于容器之间:C++ STL迭代器的艺术之旅”