MyBatis---逆向工程

mbg简介

  • 正常开发中使用MyBatis的开发流程为

    1. 创建数据库的数据表
    2. 根据数据表创建对应的实体java类
    3. 创建操作数据库的DAO接口
    4. 创建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则表示成功

在这里插入图片描述

  • 生成的文件

在这里插入图片描述

测试代码

  • 注意如果要重新生成代码,则最好将原先生成的代码文件删除掉,否则容易出现重复内容
  1. 测试简单查询
  • 编写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";
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值