逆向工程
概念
正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:
- Java实体类
- Mapper接口
- Mapper映射文件
1.添加依赖
| |
| <dependencies> |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis</artifactId> |
| <version>3.5.7</version> |
| </dependency> |
| </dependencies> |
| |
| <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> |
| |
| <dependency> |
| <groupId>com.mchange</groupId> |
| <artifactId>c3p0</artifactId> |
| <version>0.9.2</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>mysql</groupId> |
| <artifactId>mysql-connector-java</artifactId> |
| <version>5.1.8</version> |
| </dependency> |
| </dependencies> |
| </plugin> |
| </plugins> |
| </build> |
2.创建核心文件(如前面提到的)
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> |
| |
| |
| |
| |
| |
| <context id="DB2Tables" targetRuntime="MyBatis3"> |
| |
| <jdbcConnection driverClass="com.mysql.jdbc.Driver" |
| connectionURL="jdbc:mysql://localhost:3306/mybatis" |
| userId="root" |
| password="1234"> |
| </jdbcConnection> |
| |
| <javaModelGenerator targetPackage="bean" |
| targetProject=".\src\main\java"> |
| <property name="enableSubPackages" value="true" /> |
| <property name="trimStrings" value="true" /> |
| </javaModelGenerator> |
| |
| <sqlMapGenerator targetPackage="mapper" |
| targetProject=".\src\main\resources"> |
| <property name="enableSubPackages" value="true" /> |
| </sqlMapGenerator> |
| |
| <javaClientGenerator type="XMLMAPPER" |
| targetPackage="cmapper" |
| targetProject=".\src\main\java"> |
| <property name="enableSubPackages" value="true" /> |
| </javaClientGenerator> |
| |
| |
| |
| <table tableName="t_emp" domainObjectName="Emp"/> |
| <table tableName="t_dept" domainObjectName="Dept"/> |
| </context> |
| </generatorConfiguration> |
4.执行MBG插件的generate目标(双击执行)

QBC(根据条件查询)
选择性修改添加,如果修改为null,则对应的值为=不做修改
| @Test |
| public void testMBG() throws IOException { |
| InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); |
| SqlSession sqlSession = new |
| SqlSessionFactoryBuilder().build(is).openSession(true); |
| EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); |
| EmpExample empExample = new EmpExample(); |
| |
| empExample.createCriteria().andEnameLike("a").andAgeGreaterThan(20).andDidIsNot |
| Null(); |
| |
| empExample.or().andSexEqualTo("男"); |
| List<Emp> list = mapper.selectByExample(empExample); |
| for (Emp emp : list) { |
| System.out.println(emp); |
| } |
| } |
分页查询
添加依赖
| |
| <dependency> |
| <groupId>com.github.pagehelper</groupId> |
| <artifactId>pagehelper</artifactId> |
| <version>5.2.0</version> |
| </dependency> |
配置分页插件
在MyBatis的核心配置文件中配置插件
| <plugins> |
| |
| <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> |
| </plugins> |
程序实现
| @Test |
| public void test() throws IOException { |
| InputStream resourceAsStream = Resources.getResourceAsStream("myBatis.xml"); |
| SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream); |
| SqlSession sqlSession = factory.openSession(true); |
| EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); |
| |
| |
| Page<Object> objects = PageHelper.startPage(1, 3); |
| |
| System.out.println(objects); |
| List<Emp> emps = mapper.selectByExample(null); |
| PageInfo<Emp> pageInfo = new PageInfo<>(emps,3); |
| |
| emps.forEach(System.out::println); |
| |
| System.out.println(pageInfo); |
| } |
| |
| //输出一 |
| Page{count=true, pageNum=1, pageSize=3, startRow=0, endRow=3, total=0, pages=0, reasonable=null, pageSizeZero=null}[] |
| //输出二 |
| Emp{eid=1, empName='2', age=23, sex='null', email='null', did=2} |
| Emp{eid=2, empName='李四', age=32, sex='女', email='123@qq.com', did=3} |
| Emp{eid=3, empName='王五', age=43, sex='女', email='123@qq.com', did=2} |
| |
| //输出三 |
| PageInfo{ |
| pageNum=1, pageSize=3, size=3, startRow=1, endRow=3, total=11, pages=4, |
| list=Page{ |
| count=true, pageNum=1, pageSize=3, startRow=0, endRow=3, total=11, pages=4, |
| reasonable=false, pageSizeZero=false} |
| [Emp{eid=1, empName='2', age=23, sex='null', email='null', did=2}, Emp{eid=2, empName='李四', age=32, sex='女', email='123@qq.com', did=3}, Emp{eid=3, empName='王五', age=43, sex='女', email='123@qq.com', did=2} ], |
| prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, |
| hasNextPage=true, navigatePages=3, navigateFirstPage=1, navigateLastPage=3, |
| navigatepageNums=[1, 2, 3] |
| } |
| |
数据格式
| pageNum:当前页的页码 |
| pageSize:每页显示的条数 |
| size:当前页显示的真实条数 |
| total:总记录数 |
| pages:总页数 |
| prePage:上一页的页码 |
| nextPage:下一页的页码 |
| isFirstPage/isLastPage:是否为第一页/最后一页 |
| hasPreviousPage/hasNextPage:是否存在上一页/下一页 |
| navigatePages:导航分页的页码数 |
| navigatepageNums:导航分页的页码,[1,2,3,4,5] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!