mybatis的逆向工程生成
一、引入jar包
MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。 这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍然需要为连接查询或存储过程手动编写SQL和对象代码。
官方地址: http://www.mybatis.org/generator, mybatis的逆向工程需要引入数据库驱动包,mybatis包,以及逆向工程jar包,本文案例使用当前版本最新的jar包,数据库使用mysql,由于jar少就不再创建maven工程,查看官方地址可使用谷歌浏览器自带翻译功能,虽然是机译,但是看懂还是可以的。
jar下载地址:https://mvnrepository.com/
数据库连接包:mysql-connector-java-8.0.15.jar
逆向工程核心包:mybatis-generator-core-1.3.7.jar
mybatis核心包:mybatis-3.5.0.jar
二、配置xml文件
创建简单的java项目,引入jar包如下,在src目录下创建generatorConfig.xml,xml文件名字自定义,xml文件中需要配置:
(1)数据库连接
(2)使用的表名
(3)生成mapper接口、pojo类及 mapper.xml文件的包名
(4)字段类型进行对应配置
完整的xml文件如下:
1 2 DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 56 7 428 9 11 1210 13 connectionURL="jdbc:mysql://localhost:3306/goods" 14 userId="root" 15 password="www1928..com"> 16 17 1819 21 2220 23 24 28 2925 26 27 30 31 33 3432 35 targetPackage="com.idt.mybatis.mapper" targetProject=".\src"> 36 37 39 4038 41
三、建立工程类
package com.idt.generator; import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorExcute { public static void main(String[] args) { String path = GeneratorExcute.class.getClassLoader().getResource("generatorConfig.xml").getPath(); //由于绝对路径中出现了%20代替空格,所以替换一下空格 path = path.replaceAll("%20", " "); ListlistStr = new ArrayList (); try { ConfigurationParser cp = new ConfigurationParser(listStr); Configuration config = cp.parseConfiguration(new File(path)); DefaultShellCallback callback = new DefaultShellCallback(true); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, listStr); myBatisGenerator.generate(null); } catch (Exception e) { e.printStackTrace(); } } }
执行代码,refresh刷新项目,便可以到生成代码,拷贝到需要的工程下面即可。
最终项目结构如图:
PS: 在测试工程类的时候,发现控制台打印了
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
该原因是由于mysql的驱动升级造成的,将驱动从com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver即可,
四、测试
查看生成的代码文件,我们会发现与我们以前自定义使用pojo类有些不同,pojo包下有正常定义的TUser.java类和TUserExample.java两个类。TUserExample这个类是专门用来对这个单表进行条件查询的类,大家可以用下面的例子来测试:
创建mybatisConfig.xml文件
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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/goods" /> <property name="username" value="root" /> <property name="password" value="www1928..com" /> dataSource> environment> environments> <mappers> <mapper resource="com/idt/mybatis/mapper/TUserMapper.xml"/> mappers> configuration>
创建测试类:
package com.idt; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; import java.util.function.Consumer; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.idt.mybatis.mapper.TUserMapper; import com.idt.mybatis.pojo.TUser; import com.idt.mybatis.pojo.TUserExample; import com.idt.mybatis.pojo.TUserExample.Criteria; public class TestExample { private static SqlSessionFactory sqlSessionFactory = null; private static SqlSession session = null; static { InputStream in = null; try { //此处由于我的文件夹名有中文,所以直接写绝对路径 //如果没有中文,可用TestExample.class.getClassLoader().getResourceAsInputStreat("mybatisConfig.xml"); in = new FileInputStream(new File("D:\\20181112项目\\eclipse\\eclispeworkspace\\mybatisgenerator\\bin\\mybatisConfig.xml")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); session = sqlSessionFactory.openSession(); } public void queryList() { TUserMapper tUserMapper = session.getMapper(TUserMapper.class); TUserExample example = new TUserExample(); Criteria criteria = example.createCriteria(); criteria.andLoginnameEqualTo("张三"); ListuserList = tUserMapper.selectByExample(example); userList.forEach(new Consumer () { @Override public void accept(TUser user) { System.out.println(user.getLoginname()); } }); } public static void main(String[] args) { TestExample example = new TestExample(); example.queryList(); } }
可以看出通过内部Criteria类可以将where的各种条件查询,根据条件和字段,Criteria会提供很多方法,就需要小伙伴们自己手动去测试验证。
五、使用eclipse插件直接生成
除了手动代码生成,高版本eclipse还提供逆行工程的mybatis generator插件,具体工具使用方法,请移步博客
https://blog.csdn.net/itltx1024/article/details/80021637