返回现场笔记
1 分钟阅读

Hello Mybatis 02 mybatis generator

介绍 mybatis generator 代码生成工具的配置与使用,通过 generatorConfig.xml 自动生成 vo 类、Dao 接口和 Mapper.xml,省去手写模板代码。

  • #java
  • #mybatis
  • #orm

接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了。

数据库准备

首先我们,还是需要在数据库中新建一个表blog

CREATE TABLE `blog`.`blog` (
  `b_id` INT NOT NULL,
  `b_title` VARCHAR(45) NULL,
  `b_content` VARCHAR(255) NULL,
  `user_id` INT NULL,
  PRIMARY KEY (`b_id`),
  INDEX `fk_blog_user_idx` (`user_id` ASC),
  CONSTRAINT `fk_blog_user`
    FOREIGN KEY (`user_id`)
    REFERENCES `blog`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

接下来,Oh~不,难道又要写一堆的xml和方法才能折腾完CRUD吗?这当然是我这种懒人不喜欢干的。还好mybatis提供了一个代码生成器mybatis generator工具。

可以去github的mybatis generator主页上下载这个工具

https://github.com/mybatis/generator/releases

我使用的是生成器版本是1.3.2

配置文件

接着只需要一个配置generator文件我们就能让上一篇里写个半死的东西全部自动生成出来了。

<?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>
  <!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
  <classPathEntry location="/home/whthomas/software/javaframework/mysql-connector-java-5.1.30/mysql-connector-java-5.1.30-bin.jar" />
  <context id="mysql_tables" targetRuntime="MyBatis3">
      <!--<plugin type="pro.plugin.PaginationPlugin" />
     为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
    <commentGenerator>
      <property name="suppressAllComments" value="true" />
      <property name="suppressDate" value="true" />
    </commentGenerator>
    <!-- 注释控制完毕 -->

    <!-- 数据库连接 -->
    <jdbcConnection driverClass="org.gjt.mm.mysql.Driver"
        connectionURL="jdbc:mysql://127.0.0.1:3306/blog"
        userId="mybatis"
        password="mybatis">
    </jdbcConnection>
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <!-- 数据表对应的model 层  -->
    <javaModelGenerator targetPackage="pro.app.model" targetProject="../src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- sql mapper 映射配置文件 -->
    <sqlMapGenerator targetPackage="pro.app.mapper"  targetProject="../src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="pro.app.inter"  targetProject="../src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- 要对那些数据表进行生成操作,必须要有一个. -->
      <table schema="blog" tableName="blog"
          enableCountByExample="false" enableUpdateByExample="false"
        enableDeleteByExample="false" enableSelectByExample="false"
        selectByExampleQueryId="false">
        <generatedKey column="b_id" sqlStatement="MySql" identity="true"/>
    </table>

  </context>
</generatorConfiguration>

mybatis generator可以生成三种类型的文件:vo类、Dao接口层和Mapper.xml文件,通过这个配置文件告诉generator你需要生成哪一些需要的文件。

在命令行界面输入

java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

这里的 -jar 和 -configfile 后面都是可以跟随相对路径的。输入这条命令之后,包括vo类、dao接口和mapper.xml文件全部都生成好了。整个人都好起来了。

新建一个BlogTest类,来测试一下生成的代码好不好用!

package pro.test;

import java.io.Reader;

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 pro.app.inter.BlogMapper;
import pro.app.model.Blog;

public class BlogTest {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static{
        try{
            reader= Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getSession(){
        return sqlSessionFactory;
    }
    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            BlogMapper blogDAO = session.getMapper(BlogMapper.class);
            //生成一个Blog实例
            Blog blog=new Blog();
            blog.setbTitle("Mybatis");
            blog.setbContent("Mybatis is good! ");
            blog.setUserId(1);
            //新增一条Blog记录到数据库
            blogDAO.insert(blog);
            //从数据库选取刚刚的那一条Blog
            Blog record=blogDAO.selectByPrimaryKey(1);
            System.out.println(record.getbTitle());
            System.out.println(record.getbContent());
            //修改数据并保存
            blog.setbTitle("mybatis update");
            blogDAO.updateByPrimaryKey(blog);
            //删除数据
            blogDAO.deleteByPrimaryKey(1);
        } finally {
            session.close();
        }
    }
}

控制台输出:

Mybatis
Mybatis is good!

ok,没有报错。CRUD全部都搞定!省去了不少时间,设想如果有很多表使用这个工具可以节约多少的时间哇~当然复杂的sql语句还是要自己完成的。

总结

使用mybatis generator完成基本的CRUD配置。