简介
Mybatis Generator(MBG),下面我们统称为MBG,是一个Mybatis和iBatis的代码生成器。他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。这样减少了项目新建时各种配置对象,配置文件和数据库交互的麻烦。 MBG的解决了一些数据库中比较重要的操作,如CRUD(插入,查询,更新,删除)。
有关Mybatis具体生成事项,可以参考官方文档。
核心包下载地址:进入下载。
使用MBG生成文件
1.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>
<!-- 配置数据库中链接的包 -->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"
/> -->
<context id="MyGenerator" targetRuntime="MyBatis3">
<!-- 这个标签可以去掉 -->
<commentGenerator>
<!--去掉注释 -->
<property name="suppressAllComments" value="true"/>
<!-- 去掉时间戳 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库连接信息 -->
<!-- ?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_ssm_mybatis?useUnicode=true&characterEncoding=utf8"
userId="root"
password="123456" >
</jdbcConnection>
<!-- Java JDBC数据类型转换 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- javaModelGenerator Javabean 配置 -->
<!-- targetPackage 输出包名 输出路径 -->
<!-- targetProject输出项目位置 -->
<javaModelGenerator
targetPackage="pers.goodwin.mybatis.bean" targetProject="src">
<!-- enableSubPackages是否开启子包名称 是否在包名后面加上scheme名称 -->
<property name="enableSubPackages" value="false" />
<!-- 在set中加入.trim -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- mapper.xml配置 -->
<sqlMapGenerator targetPackage="pers.goodwin.mybatis.mapper"
targetProject="src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- Java接口配置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="pers.goodwin.mybatis.mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 数据表 根据数据库中的表生成 -->
<table tableName="t_user" />
<table tableName="t_country" />
<!--
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
-->
</context>
</generatorConfiguration>
2.核心代码
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/generatorConfig.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);
3.生成文件
运行核心代码生成Java bean 文件、mapper.java 文件和mapper.xml。
使用生成的文件对数据库进行操作
示例1
@Test
public void Test1() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder ssb = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = ssb.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
TUser user = mapper.selectByPrimaryKey(1);
System.out.println(user);
}
输出:
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@dd0c991]
==> Preparing: select u_id, u_username, u_password, u_gender, u_cid from t_user where u_id = ?
==> Parameters: 1(Integer)
<== Total: 1
TUser [uId=1, uUsername=隔壁老王, uPassword=6666666, uGender=0, uCid=1]
示例2
@Test
//按条件查询
public void Test2() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder ssb = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = ssb.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
TUserExample example = new TUserExample();
// example.createCriteria().andUGenderEqualTo(0);
example.createCriteria().andUGenderEqualTo(0).andUUsernameLike("%王%");
List<TUser> list = mapper.selectByExample(example);
for (TUser tUser : list) {
System.out.println(tUser);
}
}
输出:
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1b1426f4]
==> Preparing: select u_id, u_username, u_password, u_gender, u_cid from t_user WHERE ( u_gender = ? and u_username like ? )
==> Parameters: 0(Integer), %王%(String)
<== Total: 2
TUser [uId=1, uUsername=隔壁老王, uPassword=6666666, uGender=0, uCid=1]
TUser [uId=5, uUsername=王八, uPassword=3232, uGender=0, uCid=4]
示例3
@Test
public void Test3() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder ssb = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = ssb.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
TUser user = new TUser();
user.setuUsername("关羽");
user.setuPassword("123");
user.setuGender(0);
user.setuCid(1);
mapper.insertSelective(user);
sqlSession.commit();
}
输出:
==> Preparing: insert into t_user ( u_username, u_password, u_gender, u_cid ) values ( ?, ?, ?, ? )
==> Parameters: 关羽(String), 123(String), 0(Integer), 1(Integer)
<== Updates: 1
Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@69e153c5]