IT@程序员猿媛SpringBoot精选Java架构技术进阶

STS 整合 mybatis generator 生成文件

2019-06-25  本文已影响8人  程就人生

最近在使用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>

总结
可能遇到的问题,如果项目名称不存在时,会提示错误信息

图-11

另外,和mybatis的版本有关系,mysql-connector-java使用5.1.3的版本时,targetProject不需要加项目名称,5.1.4版本时,就需要加版本的名称,这个是需要注意的。
包名不存在没关系,在生成文件的时候可以自动生成。

mybatis的使用才刚刚开始,有规则的代码无需手写,自动生成即可。更多的使用技巧和原理还有待探索,且不说什么高大上的原理,先学会使用,学会了使用再细细探究原理吧。

mybatis不仅仅是轻量级的数据库中间件,配置使用简单轻巧,据说它的设计理念也胜人一筹,好期待。在sql语句优化上,mybatis更是把其他中间件远远地抛在了身后...... 到底有没有传说中的那么好,只有用了才知道,那就尽快用起来吧,用的多了,有了比较,才知道哪一款是适合自己业务场景的,抛开了业务场景,就不好谈论优劣,站在使用场景的角度,才能更好地认识一款优秀的框架。

有帮助,微信扫一扫,关注一下呗
上一篇下一篇

猜你喜欢

热点阅读