STS 整合 mybatis generator 生成文件
最近在使用mybatis数据库中间件,主要是看重它是一个轻量级的数据库中间件,在新增修改时可以动态的添加自己要操作的数据,从这一点上相对于hibernate方便了不少;另外,在xml中手写SQL语句,也为后面sql语句的优化,提供了优化空间。
使用mybatis时,有对应的xml和dao文件,这些如果一个个手写也是挺麻烦的,好在mybatis提供了自动生成的插件,下面就看看如何使用STS开发工具自动生成对应的文件。
首先,需要安装插件;
第一步,点击菜单栏的help->eclipse marketplace
第二步,在find后的输入框,输入mybatis generator后按下回车键
第三步,点击install,安装插件
图-1第四步,在弹出的对话框中,选择第一个单选框,然后按下finish,安装需要一点时间,这个需要耐心等待
图-2第五步,检查是否安装成功,选中一个项目,点击右键Run As-> Run configuration,可以在图中看到mybatis的小鸟时,代表安装成功了。
图-3安装好了插件,下面就可以生成文件了;
第一步,选择一个要生成xml文件的项目,在src/main/resources目录下,点击右键new->other->mybatis
图-4 图-5第二步,点击next->finish
图-6 图-7第三步,对新生成的generatorConfig.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>
<context id="context1">
<jdbcConnection connectionURL="???" driverClass="???" password="???" userId="???" />
<javaModelGenerator targetPackage="???" targetProject="???" />
<sqlMapGenerator targetPackage="???" targetProject="???" />
<javaClientGenerator targetPackage="???" targetProject="???" type="XMLMAPPER" />
<table schema="???" tableName="???">
<columnOverride column="???" property="???" />
</table>
</context>
</generatorConfiguration>
编辑后的:
<?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>
<!-- 数据库驱动包位置 -->
<classPathEntry location="D:/Repositories/Maven/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar" />
<context id="context" >
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库连接配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="123456" >
<property name="useInformationSchema" value="true"/>
</jdbcConnection>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.example.demo.entity" targetProject="src/main/java" >
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!-- 生成的<u>xml</u>映射文件包名和位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/java" >
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator targetPackage="com.example.demo.dao" targetProject="src/main/java" type="XMLMAPPER" >
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的那些表, tableName表名,domainObjectName生成后的对象名称 -->
<table tableName="t_test" domainObjectName="Test" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
第四步,选中该文件,点击右键Run As-> Run Mybatis Generator,生成的结果报错了,找不到src…
图-8解决问题,经过搜索网上的资料发现,这个问题和选择的mybatis架包的版本有关系,把生成实体类和bean的targetProject改成项目名称,把生成xml的targetProject改成项目名称+路径,就OK了 , 或者都改成路径,也是可以的;
图-9最终的生成结果如下:
图-10生成mapper文件:
package com.example.demo.dao;
import com.example.demo.entity.Test;
public interface TestMapper {
int deleteByPrimaryKey(Integer id);
int insert(Test record);
int insertSelective(Test record);
Test selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Test record);
int updateByPrimaryKey(Test record);
}
生成的实体类:
package com.example.demo.entity;
public class Test {
private Integer id;
private String name;
private Byte sex;
private String mobile;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Byte getSex() {
return sex;
}
public void setSex(Byte sex) {
this.sex = sex;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
生成的xml文件:
<?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.example.demo.dao.TestMapper">
<resultMap id="BaseResultMap" type="com.example.demo.entity.Test">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="sex" jdbcType="TINYINT" property="sex" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
</resultMap>
<sql id= "Base_Column_List" >
id, name, sex, mobile
</sql>
<select id= "selectByPrimaryKey" parameterType= "java.lang.Integer" resultMap= "BaseResultMap" >
select
<include refid="Base_Column_List" />
from t_test
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from t_test
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.example.demo.entity.Test">
insert into t_test (id, name, sex,
mobile)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{sex,jdbcType=TINYINT},
#{mobile,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.example.demo.entity.Test">
insert into t_test
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="sex != null">
sex,
</if>
<if test="mobile != null">
mobile,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="sex != null">
#{sex,jdbcType=TINYINT},
</if>
<if test="mobile != null">
#{mobile,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.demo.entity.Test">
update t_test
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="sex != null">
sex = #{sex,jdbcType=TINYINT},
</if>
<if test="mobile != null">
mobile = #{mobile,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.demo.entity.Test">
update t_test
set name = #{name,jdbcType=VARCHAR},
sex = #{sex,jdbcType=TINYINT},
mobile = #{mobile,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
总结
可能遇到的问题,如果项目名称不存在时,会提示错误信息
另外,和mybatis的版本有关系,mysql-connector-java使用5.1.3的版本时,targetProject不需要加项目名称,5.1.4版本时,就需要加版本的名称,这个是需要注意的。
包名不存在没关系,在生成文件的时候可以自动生成。
mybatis的使用才刚刚开始,有规则的代码无需手写,自动生成即可。更多的使用技巧和原理还有待探索,且不说什么高大上的原理,先学会使用,学会了使用再细细探究原理吧。
mybatis不仅仅是轻量级的数据库中间件,配置使用简单轻巧,据说它的设计理念也胜人一筹,好期待。在sql语句优化上,mybatis更是把其他中间件远远地抛在了身后...... 到底有没有传说中的那么好,只有用了才知道,那就尽快用起来吧,用的多了,有了比较,才知道哪一款是适合自己业务场景的,抛开了业务场景,就不好谈论优劣,站在使用场景的角度,才能更好地认识一款优秀的框架。
有帮助,微信扫一扫,关注一下呗