mbg简介
-
正常开发中使用MyBatis的开发流程为
- 创建数据库的数据表
- 根据数据表创建对应的实体java类
- 创建操作数据库的DAO接口
- 创建Mapper映射文件,为接口方法设置对应的sql语句.
-
而逆向工程为为程序员自动生成实体类,操作接口,映射文件.减少程序员的工作量.
-
MyBatis的GITHUB主页:https://github.com/mybatis
-
找到generator项目
- 代码生成器的使用说明官方访文档
- Maven项目开发包导入坐标
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
mbg配置文件编写
- 在mybatis-generator官方文档说明中:http://www.mybatis.org/generator/quickstart.html,有对mbg配置文件编写的说明
- 在类路径下创建mbg.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>
<!-- 当前电脑的数据库驱动程序jar包的全路径 -->
<classPathEntry location="E:\DevRepository\MavenRepository\mysql\mysql-connector-java\5.0.4\mysql-connector-java-5.0.4.jar"/>
<context id="context" targetRuntime="MyBatis3">
<!--是否在代码中显示注释-->
<commentGenerator>
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatisdb" userId="root" password="mysqladmin">
</jdbcConnection>
<!--...-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成pojo类存放位置
targetPackage表明要生成的文件要存放的文件夹
targetProject表明具体路径
比如我这里连起来就是:D:\spring\shiroTest\src\main\java下的com.byh.shiro.pojo文件夹保存生成的pojo文件
下面生成xml和mapper同理
-->
<javaModelGenerator targetPackage="mao.shu.pojo" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成xml映射文件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成mapper类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="mao.shu.dao" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--指定逆向分析哪张数据表
tableName:要生成的数据表
domainObjectName:生成的实体类名称
-->
<table tableName="emp" domainObjectName="Emp" />
<table tableName="department" domainObjectName="Dept" />
</context>
</generatorConfiguration>
运行代码构造器
- 运行MyBatis-generator有以下几种方式
- 可以作为maven项目的插件使用
- 可以作为java代码运行
- 通过Java代码方式运行,前提是已经定义了mbg.xml配置文件
@Test
public void test() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//描述mbg.xml文件
File configFile = new File("src/main/resource/mbg.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);
}
-
生成的代码
-
接口和实体类
- sql映射文件
- maven插件版
- 加入代码生成器坐标
<!--代码生成器-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
- 加入代码生成器插件
- 注意文件路径不要写错,否则插件无法加载对应的文件
<!--代码构造器的maven插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>src/main/resources/mbg.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
- 编写mbg.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>
<!-- 当前电脑的数据库驱动程序jar包的全路径 -->
<classPathEntry location="E:\DevRepository\MavenRepository\mysql\mysql-connector-java\5.0.4\mysql-connector-java-5.0.4.jar"/>
<context id="context" targetRuntime="MyBatis3Simple">
<!--是否在代码中显示注释-->
<commentGenerator>
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatisdb" userId="root" password="mysqladmin">
</jdbcConnection>
<!--...-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成pojo类存放位置
targetPackage表明要生成的文件要存放的文件夹
targetProject表明具体路径
比如我这里连起来就是:D:\spring\shiroTest\src\main\java下的com.byh.shiro.pojo文件夹保存生成的pojo文件
下面生成xml和mapper同理
-->
<javaModelGenerator targetPackage="mao.shu.pojo" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成xml映射文件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成mapper类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="mao.shu.dao" targetProject="E:\IdeaProjects\SSM-Maven\SSM1\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--指定逆向分析哪张数据表
tableName:要生成的数据表
domainObjectName:生成的实体类名称
-->
<table tableName="emp" domainObjectName="Emp" />
<table tableName="department" domainObjectName="Dept" />
</context>
</generatorConfiguration>
- 在IDEA中选择 [RUN]—>[edit configurations]
-
添加maven
-
添加命令:mybatis-generator:generate -e
-
选择刚才配置的命令,点击run
- 控制台出现:build success则表示成功
- 生成的文件
测试代码
- 注意如果要重新生成代码,则最好将原先生成的代码文件删除掉,否则容易出现重复内容
- 测试简单查询
- 编写EmpService类
@Service
public class EmpService {
@Autowired
private EmpMapper empMapper;
public List<Emp> getEmps(){
return this.empMapper.selectAll();
}
}
- 编写EmpController 控制器
@Controller
public class EmpController {
@Autowired
private EmpService empService;
@RequestMapping("/emps")
public String emps(Map<String,Object> map){
map.put("allEmps",this.empService.getEmps());
return "emp_list";
}
}
- 定义雇员列表链接
<a href="emps">雇员列表</a>
- 定义"emp_list.jsp"页面显示雇员信息
<table border="1px">
<tr>
<td>雇员编号</td>
<td>雇员姓名</td>
<td>雇员职位</td>
<td>入职日期</td>
<td>基本工资</td>
<td>雇员佣金</td>
<td>所在部门</td>
</tr>
${allEmps}
<c:forEach items="${allEmps}" var="emp">
<tr>
<td>${emp.empno}</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.hiredate}</td>
<td>${emp.sal}</td>
<td>${emp.comm}</td>
<td>${emp.deptno}</td>
</tr>
</c:forEach>
</table>
- 测试复杂查询
- mbg也支持生成复杂的查询方法
- 修改mbg.xml配置文件,将<context >标签之中的targetRuntime属性修改为 “MyBatis3”,就会生成复杂的查询方法
<context id="context" targetRuntime="MyBatis3">
- 删除原先自动生成的代码文件,重新生成代码
- 其中*Example类是提供复杂查询,拼凑条件使用的
- MyBatis自动生成的复杂插叙类似Hibernate中的QBL查询方式
- 测试复杂查询
@Autowired
private EmpMapper empMapper;
/**
* 根据雇员的姓名,工作职位,以及工资来进行模糊查询
* @param ename
* @param job
* @param sal
* @return
*/
public List<Emp> getEmpsLikes(String ename,String job,Integer sal){
EmpExample empExample = new EmpExample();//创建条件
EmpExample.Criteria criteria = empExample.createCriteria();
criteria.andEnameLike("%"+ename+"%");//添加ename like 模糊判断
criteria.andJobLike("%"+job+"%");//添加 job模糊判断
//创建第二个条件
EmpExample.Criteria criteria1 = empExample.createCriteria();
criteria1.andSalGreaterThan(sal);//添加 sal 大于某数的判断
//两个条件成 "或"的关系
empExample.or(criteria1);
//执行复杂查询
return this.empMapper.selectByExample(empExample);
}
- 控制器代码
@Autowired
private EmpService empService;
@RequestMapping("/emps")
public String emps(Map<String, Object> map) {
//要查询的雇员的姓名包含"测试"字符
//雇员的职位 包含 "测试"字符
//雇员的工资 大于 3000
//WHERE ename LIKE ''
map.put("allEmps", this.empService.getEmpsLikes("测试","测试",3000));
return "emp_list";
}