使用mybatis-generator插件可快速生成mapper及实体类文件,使用方法如下:
一、在pom.xml文件中加入插件:
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!---此处引入数据库的驱动,根据项目实际情况而定。若是Mysql数据库则引入mysql的驱动即可->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
</dependencies>
</plugin>
二、在resources文件夹中加入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="marketing" targetRuntime="MyBatis3" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8" />
<!-- 配置生成toString()方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<commentGenerator>
<!-- 是否禁止显示日期 true:是 : false:否 -->
<property name="suppressDate" value="false" />
<!-- 是否去除自动生成的所有注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
<!-- 是否添加字段注释 true:是 false:否 -->
<property name="addRemarkComments" value="true" />
<!-- 自定义属性 作者名称 -->
<property name="author" value="zach" />
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection connectionURL="jdbc:oracle:thin:@127.0.0.1:1521/orcl" driverClass="oracle.jdbc.driver.OracleDriver" password="123456" userId="test" />
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 配置生成实体类的包名和位置 -->
<!-- 通过maven管理插件时targetProject的路径为绝对路径:D:\workspace_oxygen\mybatis3 -->
<!-- 通过自安装插件生成时的地址:mybatis3 -->
<javaModelGenerator targetPackage="com.test.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 配置生成映射文件的包名和位置 -->
<!-- 通过maven管理插件时targetProject的路径为绝对路径:D:\workspace_oxygen\mybatis3 -->
<!-- 通过自安装插件生成时的地址:mybatis3 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 配置生成mapper文件的包名和位置 -->
<!-- 通过maven管理插件时targetProject的路径为绝对路径:D:\workspace_oxygen\mybatis3 -->
<!-- 通过自安装插件生成时的地址:mybatis3 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.test.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 配置需要反向生成表的信息, tableName填写数据库表名,domainObjectName填写要生成的实体类的类名 -->
<!-- 下列包含'Example'的属性设置为false时,将只会生成最基础的实体类及CRUD语句;
为true时,将会生成实体类名+Example命名的实体类及mapper文件
-->
<table tableName="COMPANY_LIST" domainObjectName="Company"
enableCountByExample="true" enableUpdateByExample="true"
enableDeleteByExample="true" enableSelectByExample="true"
selectByExampleQueryId="true">
<property name="ignoreQualifiersAtRuntime" value="true" />
<generatedKey column="id" sqlStatement="Oracle" identity="true" />
</table>
</context>
</generatorConfiguration>
三、生成:
在IDEA中,打开窗口右侧的maven窗口。找到mybatis-genarator的插件,双击下图中的:mybatis-generator:generate即可生成实体类、dao层的mapper、resources中的xml文件。
四、关于Example如何使用
mybatis-generator用数据库表生成数据代码的时候,除了生成实体的POJO以外,会同时生成Example文件,以及在mapper.xml中生成Example的sql语句。
Example类包含一个内部静态类Criteria,利用Criteria可以在类中根据自己的需求动态生成sql where语句。
Criteria类中有对于实体类各个属性的is null、is not null,大于、小于、等于、like等动态sql,通过设置该类中对应的属性,可自动动态拼接sql。
例如:
1.模糊搜索用户名:
String name = “明”;
UserExample ex = new UserExample();
ex.createCriteria().andNameLike(’%’+name+’%’);
List userList = userDao.selectByExample(ex);
2.通过某个字段排序:
String orderByClause = "id DESC";
UserExample ex = new UserExample();
ex.setOrderByClause(orderByClause);
List<User> userList = userDao.selectByExample(ex);
3.条件搜索,不确定条件的个数:
UserExample ex = new UserExample();
Criteria criteria = ex.createCriteria();
if(StringUtils.isNotBlank(user.getAddress())){
criteria.andAddressEqualTo(user.getAddress());
}
if(StringUtils.isNotBlank(user.getName())){
criteria.andNameEqualTo(user.getName());
}
List<User> userList = userDao.selectByExample(ex);
4.分页搜索列表:
pager.setPageNum(1);
pager.setPageSize(5);
UserExample ex = new UserExample();
ex.setPage(pager);
List<User> userList = userDao.selectByExample(ex);