MyBatis 生态成熟,支持很多实用插件,大大提高了开发效率,下面将介绍其中常用的逆向工程和分页插件。
逆向工程(MyBatis Generator)
-
正向工程:先创建 Java 实体类,由框架负责根据实体类生成数据库表,Hibernate 就支持这种正向工程。
-
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:
- Java 实体类
- Mapper 接口
- Mapper 映射文件
逆向工程实际是一种代码生成器,能减少程序员的工作量。
-
引入依赖
<!-- 控制Maven在构建过程中相关配置 --> <build> <!-- 构建过程中用到的插件 --> <plugins> <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.0</version> <!-- 插件的依赖 --> <dependencies> <!-- 逆向工程的核心依赖 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> </dependencies> </plugin> </plugins> </build>
-
创建 mybatis 的核心配置文件
-
创建逆向工程的核心配置文件,文件名必须是
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="MyBatis3Simple"> <!-- 数据库的连接信息 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC" userId="root" password="root"> </jdbcConnection> <!-- javaBean的生成策略--> <javaModelGenerator targetPackage="site.penghao.mybatis.mbg.pojo" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- SQL映射文件的生成策略 --> <sqlMapGenerator targetPackage="site.penghao.mybatis.mbg.mapper" targetProject=".\src\main\resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- Mapper接口的生成策略 --> <javaClientGenerator type="XMLMAPPER" targetPackage="site.penghao.mybatis.mbg.mapper" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 逆向分析的表 --> <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName --> <!-- domainObjectName属性指定生成出来的实体类的类名 --> <table tableName="t_emp" domainObjectName="Emp"/> <table tableName="t_user" domainObjectName="User"/> </context> </generatorConfiguration>
-
在 Maven 窗口选择运行 MyBatis Generator
分页插件
SQL 查询常常需要实现分页:select ... limit index, pageSize
。通过 MyBatis 插件可以方便地实现分页功能。
-
添加依赖
<!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency>
-
设置分页插件
在 MyBatis 的核心配置文件中配置插件。
<plugins> <!--分页插件,interceptor 意为「拦截器」--> <plugin interceptor="com.github.pagehelper.PageInterceptor"/> </plugins>
-
测试分页插件
public void testPage() { SqlSession sqlSession = SqlSessionUtil.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); Page<Object> page = PageHelper.startPage(1, 4); mapper.selectByExample(null); System.out.println(page); // Page 继承了 ArrayList 类,在查询得到结果时,插件会将结果赋到 Page }
Page{count=true, pageNum=1, pageSize=4, startRow=0, endRow=4, total=5, pages=2, reasonable=false, pageSizeZero=false}[site.penghao.mybatis.mbg.pojo.Emp@5e3a39cd, site.penghao.mybatis.mbg.pojo.Emp@21f9277b, site.penghao.mybatis.mbg.pojo.Emp@201aa8c1, site.penghao.mybatis.mbg.pojo.Emp@5d58c727]
可以看到,page 对象除了包含查询到的对象,还有分页的各种信息。另外,还可以通过 PageInfo 类进一步地获取导航栏相关信息:
PageInfo<Object> pageInfo = new PageInfo<>(page); // 这里传入的 System.out.println(pageInfo);
PageInfo{pageNum=1, pageSize=4, size=4, startRow=1, endRow=4, total=5, pages=2, list=Page{count=true, pageNum=1, pageSize=4, startRow=0, endRow=4, total=5, pages=2, reasonable=false, pageSizeZero=false}[site.penghao.mybatis.mbg.pojo.Emp@5e3a39cd, site.penghao.mybatis.mbg.pojo.Emp@21f9277b, site.penghao.mybatis.mbg.pojo.Emp@201aa8c1, site.penghao.mybatis.mbg.pojo.Emp@5d58c727], prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=2, navigatepageNums=[1, 2]}
小结
- MyBatis 逆向工程能根据数据库表字段自动生成 bean 实体类和对应的 mapper 类、mapper 配置类。
- 分页插件大大简化了分页功能的开发,它通过拦截器实现。