前言
每天进步一点点,今天又学到一个骚操作,来做个记录,关闭Mybatis的,代码生成器,可以帮助我们生成pojo以及mapper文件,真的是又减少了代码量,懒人必备。
(本文DEMO下载:戳我前往)
1.准备工作
1) 准备jar包。
Mybatis-Generator的,我在Git上拿的,地址https://github.com/mybatis/generator/releases
其他包,我是在Maven仓库下载的:https://mvnrepository.com/
2)准备逆向的配置文件,见代码,命名为Config.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="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 ,false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test"
userId="root"
password="root">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,
为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成POJO类的位置 -->
<javaModelGenerator targetPackage="cc.buyfree.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="cc.buyfree.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cc.buyfree.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表,生成几个写几个 -->
<table schema="" tableName="orders"></table>
<table schema="" tableName="users"></table>
</context>
</generatorConfiguration>
3)准备java文件,创建新web工程,将刚刚的config文件,放到项目路径下,然后右击运行java文件即可生成,为防止控制台一片空白,控制台会出现“OJBK”字样,运行后刷新项目(如果是项目需要,只要把两个包拷贝走即可)
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;
/**
* 逆向生成 pojo和mapper
*/
public class GeneratorSqlmap {
/**
* 生成的方法
*/
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("config.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
/**
* 程序入口
*/
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
System.out.println("OJBK");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.测试效果
1) 运行成功后,一定要刷新项目(F5),不然不会显示。刷新后的目录,如下:
2) 测试效果,看看是不是和自己写的一样。(新建测试类,导入mybatis配置文件,以及jdbc的外部文件)
import java.io.IOException;
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.Before;
import org.junit.Test;
import cc.buyfree.mapper.UsersMapper;
import cc.buyfree.pojo.Users;
public class UserTest {
private SqlSessionFactory factory;
@Before
public void Before() throws IOException {
factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
}
/**
* 通过ID查找
*/
@Test
public void selectById() {
SqlSession session = factory.openSession();
UsersMapper mapper = session.getMapper(UsersMapper.class);
//查询ID为50的用户,相当于select * from users where id=50
Users u = mapper.selectByPrimaryKey(50);
//生成的pojo没有toString方法,需要的话可以去对应类加一个
System.out.println(u);
}
}
控制台输出:
3.XxxExample实例测试
1) XxxExample文件,手写的时候重来都没有写过这个文件,里面有三个字段,最有意思的是oredCriteria字段,自定义查询。
2)关于oredCriteria的操作演示:
相比较于上面的那个查询,他俩是一样的,上面那个使用mapper接口里面的方法,这个使用XxxExample类中方法,大多都相同。
4.Mapper接口方法解析
其实,我对那几个BLOS的方法,并不是很了解,望大佬指点。
方法 | 功能 |
---|---|
long countByExample(UsersExample example) | 按条件计数 |
int deleteByExample(UsersExample example) | 按条件删除 |
int deleteByPrimaryKey(Integer id) | 按主键删除 |
int insert(Users record) | 插入全部字段 |
int insertSelective(Users record) | 选择性插入 |
List selectByExampleWithBLOBs(UsersExample example) | 按条件查询(含BLOB字段) |
List selectByExample(UsersExample example) | 按条件查询 |
Users selectByPrimaryKey(Integer id) | 按主键查询 |
int updateByExampleSelective(@Param(“record”) Users record, @Param(“example”) UsersExample example) | 按条件更新不为null字段 |
int updateByExampleWithBLOBs(@Param(“record”) Users record, @Param(“example”) UsersExample example) | 按条件更新(含BLOB字段) |
int updateByExample(@Param(“record”) Users record, @Param(“example”) UsersExample example) | 按条件更新 |
int updateByPrimaryKeySelective(Users record) | 按主键更新不为null字段 |
int updateByPrimaryKeyWithBLOBs(Users record) | 按主键更新(含BLOB字段) |
int updateByPrimaryKey(Users record) | 按主键更新 |