MyBatis学习日志六
逆向工程
mybatis官方提供了mapper自动生成工具mybatis-generator-core来针对单表,生成PO类,以及Mapper接口和mapper.xml映射文件。针对单表,可以不需要再手动编写xml配置文件和mapper接口文件了,非常方便。美中不足的是它不支持生成关联查询。一般做关联查询,就自己单独写SQL就好了。
基于IDEA的mybatis逆向工程操作步骤如下
1.配置maven插件
<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <!-- 输出日志 --> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin> </plugins> </build>
2.在resources目录下创建名为generatorConfig.xml的配置文件
3.配置文件的模板如下
<?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> <!--导入属性配置--> <properties resource="properties/xx.properties"></properties> <!-- 指定数据库驱动的jdbc驱动jar包的位置 --> <classPathEntry location="C:\Users\Vergi\.m2\repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar" /> <!-- context 是逆向工程的主要配置信息 --> <!-- id:起个名字 --> <!-- targetRuntime:设置生成的文件适用于那个 mybatis 版本 --> <context id="default" targetRuntime="MyBatis3"> <!--optional,旨在创建class时,对注释进行控制--> <commentGenerator> <property name="suppressDate" value="true" /> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--jdbc的数据库连接--> <jdbcConnection driverClass="${db.driver}" connectionURL="${db.url}" userId="${db.user}" password="${db.password}"> </jdbcConnection> <!--非必须,类型处理器,在数据库类型和java类型之间的转换控制--> <javaTypeResolver> <!-- 默认情况下数据库中的 decimal,bigInt 在 Java 对应是 sql 下的 BigDecimal 类 --> <!-- 不是 double 和 long 类型 --> <!-- 使用常用的基本类型代替 sql 包下的引用类型 --> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetPackage:生成的实体类所在的包 --> <!-- targetProject:生成的实体类所在的硬盘位置 --> <javaModelGenerator targetPackage="mybatis.generator.model" targetProject=".\src\main\java"> <!-- 是否允许子包 --> <property name="enableSubPackages" value="false" /> <!-- 是否清理从数据库中查询出的字符串左右两边的空白字符 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetPackage 和 targetProject:生成的 mapper.xml 文件的包和位置 --> <sqlMapGenerator targetPackage="mybatis.generator.mappers" targetProject=".\src\main\resources"> <!-- 针对数据库的一个配置,是否把 schema 作为字包名 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage 和 targetProject:生成的 mapper接口文件的包和位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="mybatis.generator.dao" targetProject=".\src\main\java"> <!-- 针对 oracle 数据库的一个配置,是否把 schema 作为子包名 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 这里指定要生成的表 --> <table tableName="student"/> <table tableName="product"/> </context> </generatorConfiguration>
4.双击执行mybatis-generator的maven插件
执行日志如下
生成的文件如下
能看到mybatis-generator除了给我们生成了基本的PO类(上图的Student和Product),还额外生成了Example类。Example类是为了方便执行SQL时传递查询条件的。使用的示例如下
public class GeneratorTest { private SqlSessionFactory sqlSessionFactory; @Before public void init() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("mysql8-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); } @Test public void test() { SqlSession sqlSession = sqlSessionFactory.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); StudentExample example = new StudentExample(); StudentExample.Criteria criteria = example.createCriteria(); criteria.andNameLike("%o%"); List<Student> students = mapper.selectByExample(example); students.forEach(System.out::println); } }
PageHelper分页插件
使用该插件,快速实现查询结果的分页,使用步骤如下
-
pom.xml中配置依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.6</version> </dependency>
2.mybatis全局配置文件中配置<plugin>
标签
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="properties/xx.properties"></properties> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${db.driver}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.user}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments> <mappers> <package name="mybatis.generator.dao"/> </mappers> </configuration>
3.在执行查询之前,先设置分页信息
// 查询第一页,每页3条信息 PageHelper.startPage(1,3);
先看一下查所有数据
@Test public void test() { SqlSession sqlSession = sqlSessionFactory.openSession(); ProductMapper mapper = sqlSession.getMapper(ProductMapper.class); //PageHelper.startPage(1,3); List<Product> products = mapper.selectByExample(new ProductExample()); products.forEach(System.out::println); }
加上PageHelper分页
@Test public void test() { SqlSession sqlSession = sqlSessionFactory.openSession(); ProductMapper mapper = sqlSession.getMapper(ProductMapper.class); PageHelper.startPage(1,3); List<Product> products = mapper.selectByExample(new ProductExample()); products.forEach(System.out::println); }
当开启PageHelper时,查询得到的List
实际是PageHelper中自定义的一个类Page
,这个类实现了List
接口,并封装了分页的相关信息(总页数,当前页码等)。
可以通过PageInfo
来获取分页的相关信息,代码如下
@Test public void test() { SqlSession sqlSession = factory.openSession(); PageHelper.startPage(1,3); ProductMapper mapper = sqlSession.getMapper(ProductMapper.class); List<Product> list = mapper.findAll(); list.forEach(System.out::println); PageInfo<Product> pageInfo = new PageInfo<>(list); System.out.println(pageInfo.getTotal()); // 获得总数 System.out.println(pageInfo.getPageSize()); // 获得总页数 }
Mybatis Plus
mybatis虽然非常方便,但也需要编写大量的SQL语句,于是mybatis plus就应运而生了。它是一个mybatis增强工具,为了简化开发,提高效率。搭配Spring-Boot食用简直不要太爽。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报