1.前言
今天开发零销量系统,按照我自己的开发习惯,表设计出来了之后就是写dao层mapper了。以前自己学习的时候都是自己一个一个的敲出来。也听过过像hibernate反向工具一样的自动生成dao层的工具,之前没有使用过,今天正好用了一下generator,感觉很好用,可以逆向生成持久层的基本代码节省了大量的时间。而且使用起来很方便,只需要在一个配置文件里面改几个配置信息就可以了。
2.介绍
MyBatis Generator github https://github.com/mybatis/generator
MyBatis Generator的详细介绍http://mybatis.github.io/generator/index.html
MyBatis Generator With Maven http://mybatis.github.io/generator/running/runningWithMaven.html
3.开始使用
1)百度网盘下载:http://pan.baidu.com/s/1bni2JON
2)将文件夹放在桌面(目录自己制定)
3)配置generator.xml,在这个文件中加了注释,需要改动的地方。(我用mac上的文本编辑器写入的引号总是不能识别,采用了将文件复制到idea中,更改完成后在粘贴回原文件)
4)定位到generator文件夹下,执行java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
注:配置文件中得targetProject的路径必须存在
5)将生成的文件分别拷贝到自己的项目相应的目录中
4.生成的文件
1)domain下得java文件
package com.sankuai.meituan.crm.domain.zerosale; import java.util.Date; public class ZeroSaleClueRemark { private Integer remarkId; private String remarkTitle; private Date createTime; private Integer clueId; public Integer getRemarkId() { return remarkId; } public void setRemarkId(Integer remarkId) { this.remarkId = remarkId; } public String getRemarkTitle() { return remarkTitle; } public void setRemarkTitle(String remarkTitle) { this.remarkTitle = remarkTitle == null ? null : remarkTitle.trim(); } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Integer getClueId() { return clueId; } public void setClueId(Integer clueId) { this.clueId = clueId; } } |
2)mapper.java
package com.sankuai.meituan.crm.dao.mapper.zerosale; import com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark; public interface ZeroSaleClueRemarkMapper { int deleteByPrimaryKey(Integer remarkId); int insert(ZeroSaleClueRemark record); int insertSelective(ZeroSaleClueRemark record); ZeroSaleClueRemark selectByPrimaryKey(Integer remarkId); int updateByPrimaryKeySelective(ZeroSaleClueRemark record); int updateByPrimaryKey(ZeroSaleClueRemark record); } |
3)mapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" " <mapper namespace="com.sankuai.meituan.crm.dao.mapper.zerosale.ZeroSaleClueRemarkMapper" > <resultMap id="BaseResultMap" type="com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark" > <id column="remark_id" property="remarkId" jdbcType="INTEGER" /> <result column="remark_title" property="remarkTitle" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <result column="clue_id" property="clueId" jdbcType="INTEGER" /> </resultMap> <sql id="Base_Column_List" > remark_id, remark_title, create_time, clue_id </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" > select <include refid="Base_Column_List" /> from zero_sale_clue_remark where remark_id = #{remarkId,jdbcType=INTEGER} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > delete from zero_sale_clue_remark where remark_id = #{remarkId,jdbcType=INTEGER} </delete> <insert id="insert" parameterType="com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark" > insert into zero_sale_clue_remark (remark_id, remark_title, create_time, clue_id) values (#{remarkId,jdbcType=INTEGER}, #{remarkTitle,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{clueId,jdbcType=INTEGER}) </insert> <insert id="insertSelective" parameterType="com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark" > insert into zero_sale_clue_remark <trim prefix="(" suffix=")" suffixOverrides="," > <if test="remarkId != null" > remark_id, </if> <if test="remarkTitle != null" > remark_title, </if> <if test="createTime != null" > create_time, </if> <if test="clueId != null" > clue_id, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="remarkId != null" > #{remarkId,jdbcType=INTEGER}, </if> <if test="remarkTitle != null" > #{remarkTitle,jdbcType=VARCHAR}, </if> <if test="createTime != null" > #{createTime,jdbcType=TIMESTAMP}, </if> <if test="clueId != null" > #{clueId,jdbcType=INTEGER}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark" > update zero_sale_clue_remark <set > <if test="remarkTitle != null" > remark_title = #{remarkTitle,jdbcType=VARCHAR}, </if> <if test="createTime != null" > create_time = #{createTime,jdbcType=TIMESTAMP}, </if> <if test="clueId != null" > clue_id = #{clueId,jdbcType=INTEGER}, </if> </set> where remark_id = #{remarkId,jdbcType=INTEGER} </update> <update id="updateByPrimaryKey" parameterType="com.sankuai.meituan.crm.domain.zerosale.ZeroSaleClueRemark" > update zero_sale_clue_remark set remark_title = #{remarkTitle,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=TIMESTAMP}, clue_id = #{clueId,jdbcType=INTEGER} where remark_id = #{remarkId,jdbcType=INTEGER} </update> </mapper> |
5.总结
generator只是生成了一些基本的增删改查,就像我们在hibernate中经常用的basedao一样,但是也能减少我们大量的代码编写。后续的业务只需要在它的基础上增加就可以了。
在配置文件中得<table>标签中我们将
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"
都设置成了false,要是设置为true(默认为true)则可以生成一个example,有点类似hibernateTemplate,同样我们也可以使用example中的Critertia,一种面向对象的查询方式,并且根据实体类中字段的属性,生成不同的操作。
当然你也可以根据实际需要直接使用实体类进行增删改查。
当然,这里介绍的时简单的通过命令生成文件的方式,还有一种方式是创建一个maven工程,将配置文件复制到类路径下,在pom.xml中加入
<build> <finalName>mybatis_generator</finalName> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> </plugin> </plugins> </build> |
运行,就可以了!