MyBatis-Generato代码生成器(独立版)

项目背景

这个是2014年2015年在mybatis大规模应用的时候自己研究出来的一个mybatis代码生成器,好久没有用了,官方也没有怎么大规模更新,毕竟好用的民间工具太多,好用的是大家的思维和sql。mybatis的强大之处在于把任何复杂的sql,包括多表关联,包括多重计算,处理之后映射到任意一个实体上,以达到查询的目的。

相关资料下载

这里写图片描述
- 百度网盘: https://pan.baidu.com/s/10h1n9PNX891O19YerX4PqQ 密码: pta3
- CSDN https://download.csdn.net/download/moshowgame/10424926

建表语句

CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(255) DEFAULT NULL COMMENT '账号',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `user_type` int(11) DEFAULT NULL COMMENT '用户类型',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `lastupdatetime` datetime DEFAULT NULL COMMENT '最后更新时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

配置Generator的xml

自动生成entity/XML/mapper/DAO的配置,注释我写得很详细了

<?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>

    <!-- MyBatis代码生成器 @author Moshow -->
    <!-- 需要修改的地方是①②③④,然后执行批处理即可 -->

    <!-- classPathEntry:数据库的JDBC驱动,①location换成你自己的mysql类库位置 -->
    <!-- maven一般在C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\,也可以自己下载一个并指定 -->
    <!-- <classPathEntry
        location="E:\MyEclipse Professional 2014\.metadata\.me_tcat7\webapps\zkungfu\WEB-INF\lib\ojdbc6.jar" /> -->
    <classPathEntry
        location="C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />
    <context id="DB2Tables" targetRuntime="MyBatis3">

        <!-- 去除自动生成的注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="false" />
        </commentGenerator>

        <!-- 数据库连接,②userId&password改成自己的配置,如果是oracle还需要修改目录下的tnsnames.ora -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
            userId="root" password="root">
        </jdbcConnection>
        <!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
            connectionURL="jdbc:oracle:thin:@localhost:1521:OrderTest"
            userId="xxx" password="xxx"> 
        </jdbcConnection>-->


        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
        </javaTypeResolver>

        <!-- targetProject:③修改自动生成代码的位置,包括DAO/entity/XML,一般生成在项目下面的src或者test -->
        <!-- 生成vo对象 -->
        <javaModelGenerator targetPackage="com.tcbj.checksys.user.domain"
            targetProject="D:\workspace\temp">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
            <!--
                targetProject 生成的Java Bean放置在哪个项目的哪个目录下 targetPackage 生成的Java Bean的包名
                一个有用的属性 <property name="trimStrings" value="true" /> 从数据库返回的值被清理前后的空格
                <property name="enableSubPackages" value="false" /> 是否在包名后加上scheme名称
            -->
        </javaModelGenerator>
        <!-- 生成用于查询的Example对象 -->
        <sqlMapGenerator targetPackage="com.tcbj.checksys.user.persistence"
            targetProject="D:\workspace\temp">
            <property name="enableSubPackages" value="true" />
             <!--
                targetProject 生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下 targetPackage 生成的
                SqlMap.xml 文件的包名 <property name="enableSubPackages" value="false" />
                是否在包名后加上scheme名称
             -->
        </sqlMapGenerator>

        <!-- 生成DAO的类文件以及配置文件 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.tcbj.checksys.user.persistence" 
            targetProject="D:\workspace\temp">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- tableName:④用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 -->
        <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />//无论字段是什么类型,生成的类属性都是varchar。  -->
        <table tableName="sys_user" domainObjectName="User"
            enableCountByExample="false" 
            enableUpdateByExample="false" 
            enableDeleteByExample="false" 
            enableSelectByExample="false" 
            selectByExampleQueryId="false" 
            />
    </context>
</generatorConfiguration>

开始生成

接下来进入到目录手工运行“@mybatisGenerator.bat”

这里写图片描述

  • 如果提示“The specified target project directory D:\Workspaces\temp does not exist”是因为指定的生成目录不存在,记得要创建

  • 提示以下这个是因为已经生成过了,所以每次都会重新覆盖,如果是加了新字段,你可以直接copy实体,然后mapper的xml自己加就可以了。

Existing file D:\workspace\temp\com\tcbj\checksys\user\domain\User.java was overwritten
Existing file D:\workspace\temp\com\tcbj\checksys\user\persistence\UserMapper.java was overwritten
  • 如果你觉得生成一大堆注释很烦,可以调整一下,把这个suppressAllComments的值设置为true,就可以少一堆啰嗦的注释,比较干净
<!-- 去除自动生成的注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

验收生成结果

package com.tcbj.checksys.user.domain;

import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer userType;
    private Date createtime;
    private Date lastupdatetime;
    //这里对应的set、get我先删了,生成是有的,我们看下精华部分就行
}
package com.tcbj.checksys.user.persistence;

import com.tcbj.checksys.user.domain.User;

public interface UserMapper {
    int deleteByPrimaryKey(Integer id);
    int insert(User record);
    int insertSelective(User record);
    User selectByPrimaryKey(Integer id);
    int updateByPrimaryKeySelective(User record);
    int updateByPrimaryKey(User record);
}

016。018。089。065

mapper才是mybatis的精华

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tcbj.checksys.user.persistence.UserMapper">
  <resultMap id="BaseResultMap" type="com.tcbj.checksys.user.domain.User">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="user_type" jdbcType="INTEGER" property="userType" />
    <result column="createtime" jdbcType="TIMESTAMP" property="createtime" />
    <result column="lastupdatetime" jdbcType="TIMESTAMP" property="lastupdatetime" />
  </resultMap>
  <sql id="Base_Column_List">
    id, username, password, user_type, createtime, lastupdatetime
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from sys_user
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from sys_user
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.tcbj.checksys.user.domain.User">
    insert into sys_user (id, username, password, 
      user_type, createtime, lastupdatetime
      )
    values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{userType,jdbcType=INTEGER}, #{createtime,jdbcType=TIMESTAMP}, #{lastupdatetime,jdbcType=TIMESTAMP}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.tcbj.checksys.user.domain.User">
    insert into sys_user
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="username != null">
        username,
      </if>
      <if test="password != null">
        password,
      </if>
      <if test="userType != null">
        user_type,
      </if>
      <if test="createtime != null">
        createtime,
      </if>
      <if test="lastupdatetime != null">
        lastupdatetime,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=INTEGER},
      </if>
      <if test="username != null">
        #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        #{password,jdbcType=VARCHAR},
      </if>
      <if test="userType != null">
        #{userType,jdbcType=INTEGER},
      </if>
      <if test="createtime != null">
        #{createtime,jdbcType=TIMESTAMP},
      </if>
      <if test="lastupdatetime != null">
        #{lastupdatetime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.tcbj.checksys.user.domain.User">
    update sys_user
    <set>
      <if test="username != null">
        username = #{username,jdbcType=VARCHAR},
      </if>
      <if test="password != null">
        password = #{password,jdbcType=VARCHAR},
      </if>
      <if test="userType != null">
        user_type = #{userType,jdbcType=INTEGER},
      </if>
      <if test="createtime != null">
        createtime = #{createtime,jdbcType=TIMESTAMP},
      </if>
      <if test="lastupdatetime != null">
        lastupdatetime = #{lastupdatetime,jdbcType=TIMESTAMP},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.tcbj.checksys.user.domain.User">
    update sys_user
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      user_type = #{userType,jdbcType=INTEGER},
      createtime = #{createtime,jdbcType=TIMESTAMP},
      lastupdatetime = #{lastupdatetime,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=INTEGER}
  </update>
</mapper>

猜你喜欢

转载自blog.csdn.net/moshowgame/article/details/80376198