Mybatis逆向生成使用扩展类的实例代码详解

 更新时间:2019年05月27日 11:36:45   作者:一个写烂代码的  
这篇文章主要介绍了Mybatis逆向生成使用扩展类的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下

1.背景介绍

用的mybatis自动生成的插件,然而每次更改数据库的时候重新生成需要替换原有的mapper.xml文件,都要把之前业务相关的sql重新写一遍,感觉十分麻烦,就想着把自动生成的作为一个基础文件,然后业务相关的写在扩展文件里面,这样更改数据库后只需要把所有基础文件替换掉就可以了

2.代码

2.1 BaseMapper.java

把自动生成的方法都抽到一个base类,然后可以写一些公共的方法

/**
 * @author 吕梁山
 * @date 2019/4/23
 */
public interface BaseMapper<T> {
 int deleteByPrimaryKey(Integer id);
 int insert(T entity);
 int insertSelective(T entity);
 int updateByPrimaryKeySelective(T entity);
 int updateByPrimaryKey(T entity);
 T selectByPrimaryKey(Integer id);
}

2.2 UserMapper.java

自动生成的mapper文件,里面基本都是空的了

public interface UserMapper extends BaseMapper<User> { }

2.3 ExtUserMapper.java

mapper的扩展类,业务相关的

/**
 * @author 吕梁山
 * @date 2019/4/25
 */
public interface ExtUserMapper extends UserMapper {

 ExtUser selectUserByOpenId(String openId);

 int existUserByOpenId(String openId);

 int updateByOpenId(User user);
}

2.4 UserMapper.xml

自动生成的mapper.xml文件,没有改动,不同的生成器生成的可能不同

注意namespace要写正确

<?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.pikaqiu.barber.dao.base.UserMapper">
 <resultMap id="BaseResultMap" type="com.pikaqiu.barber.entity.base.User">
  <id column="id" property="id" jdbcType="INTEGER"/>
  <result column="user_name" property="userName" jdbcType="VARCHAR"/>
  <result column="user_img" property="userImg" jdbcType="VARCHAR"/>
  <result column="open_id" property="openId" jdbcType="VARCHAR"/>
  <result column="phone" property="phone" jdbcType="VARCHAR"/>
  <result column="sex" property="sex" jdbcType="INTEGER"/>
  <result column="province" property="province" jdbcType="VARCHAR"/>
  <result column="country" property="country" jdbcType="VARCHAR"/>
  <result column="city" property="city" jdbcType="VARCHAR"/>
  <result column="birth_date" property="birthDate" jdbcType="VARCHAR"/>
  <result column="subscribe_date" property="subscribeDate" jdbcType="TIMESTAMP"/>
  <result column="subscribe_scene" property="subscribeScene" jdbcType="VARCHAR"/>
  <result column="create_date" property="createDate" jdbcType="TIMESTAMP"/>
 </resultMap>
 <sql id="Base_Column_List">
  id, user_name, user_img, open_id, phone, sex, province, country, city, birth_date,
  subscribe_date, subscribe_scene, create_date
 </sql>
 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
  select
  <include refid="Base_Column_List"/>
  from t_user
  where id = #{id,jdbcType=INTEGER}
 </select>
 <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
  delete from t_user
  where id = #{id,jdbcType=INTEGER}
 </delete>
 <insert id="insert" parameterType="com.pikaqiu.barber.entity.base.User">
  insert into t_user (id, user_name, user_img,
       open_id, phone, sex,
       province, country, city,
       birth_date, subscribe_date, subscribe_scene,
       create_date)
  values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{userImg,jdbcType=VARCHAR},
          #{openId,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{sex,jdbcType=INTEGER},
          #{province,jdbcType=VARCHAR}, #{country,jdbcType=VARCHAR},
          #{city,jdbcType=VARCHAR},
          #{birthDate,jdbcType=VARCHAR}, #{subscribeDate,jdbcType=TIMESTAMP},
    #{subscribeScene,jdbcType=VARCHAR},
    #{createDate,jdbcType=TIMESTAMP})
 </insert>
 <insert id="insertSelective" parameterType="com.pikaqiu.barber.entity.base.User">
  insert into t_user
  <trim prefix="(" suffix=")" suffixOverrides=",">
   <if test="id != null">
    id,
   </if>
   <if test="userName != null">
    user_name,
   </if>
   <if test="userImg != null">
    user_img,
   </if>
   <if test="openId != null">
    open_id,
   </if>
   <if test="phone != null">
    phone,
   </if>
   <if test="sex != null">
    sex,
   </if>
   <if test="province != null">
    province,
   </if>
   <if test="country != null">
    country,
   </if>
   <if test="city != null">
    city,
   </if>
   <if test="birthDate != null">
    birth_date,
   </if>
   <if test="subscribeDate != null">
    subscribe_date,
   </if>
   <if test="subscribeScene != null">
    subscribe_scene,
   </if>
   <if test="createDate != null">
    create_date,
   </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="userImg != null">
    #{userImg,jdbcType=VARCHAR},
   </if>
   <if test="openId != null">
    #{openId,jdbcType=VARCHAR},
   </if>
   <if test="phone != null">
    #{phone,jdbcType=VARCHAR},
   </if>
   <if test="sex != null">
    #{sex,jdbcType=INTEGER},
   </if>
   <if test="province != null">
    #{province,jdbcType=VARCHAR},
   </if>
   <if test="country != null">
    #{country,jdbcType=VARCHAR},
   </if>
   <if test="city != null">
    #{city,jdbcType=VARCHAR},
   </if>
   <if test="birthDate != null">
    #{birthDate,jdbcType=VARCHAR},
   </if>
   <if test="subscribeDate != null">
    #{subscribeDate,jdbcType=TIMESTAMP},
   </if>
   <if test="subscribeScene != null">
    #{subscribeScene,jdbcType=VARCHAR},
   </if>
   <if test="createDate != null">
    #{createDate,jdbcType=TIMESTAMP},
   </if>
  </trim>
 </insert>
 <update id="updateByPrimaryKeySelective" parameterType="com.pikaqiu.barber.entity.base.User">
  update t_user
  <set>
   <if test="userName != null">
    user_name = #{userName,jdbcType=VARCHAR},
   </if>
   <if test="userImg != null">
    user_img = #{userImg,jdbcType=VARCHAR},
   </if>
   <if test="openId != null">
    open_id = #{openId,jdbcType=VARCHAR},
   </if>
   <if test="phone != null">
    phone = #{phone,jdbcType=VARCHAR},
   </if>
   <if test="sex != null">
    sex = #{sex,jdbcType=INTEGER},
   </if>
   <if test="province != null">
    province = #{province,jdbcType=VARCHAR},
   </if>
   <if test="country != null">
    country = #{country,jdbcType=VARCHAR},
   </if>
   <if test="city != null">
    city = #{city,jdbcType=VARCHAR},
   </if>
   <if test="birthDate != null">
    birth_date = #{birthDate,jdbcType=VARCHAR},
   </if>
   <if test="subscribeDate != null">
    subscribe_date = #{subscribeDate,jdbcType=TIMESTAMP},
   </if>
   <if test="subscribeScene != null">
    subscribe_scene = #{subscribeScene,jdbcType=VARCHAR},
   </if>
   <if test="createDate != null">
    create_date = #{createDate,jdbcType=TIMESTAMP},
   </if>
  </set>
  where id = #{id,jdbcType=INTEGER}
 </update>
 <update id="updateByPrimaryKey" parameterType="com.pikaqiu.barber.entity.base.User">
  update t_user
  set user_name  = #{userName,jdbcType=VARCHAR},
   user_img  = #{userImg,jdbcType=VARCHAR},
   open_id   = #{openId,jdbcType=VARCHAR},
   phone   = #{phone,jdbcType=VARCHAR},
   sex    = #{sex,jdbcType=INTEGER},
   province  = #{province,jdbcType=VARCHAR},
   country   = #{country,jdbcType=VARCHAR},
   city   = #{city,jdbcType=VARCHAR},
   birth_date  = #{birthDate,jdbcType=VARCHAR},
   subscribe_date = #{subscribeDate,jdbcType=TIMESTAMP},
   subscribe_scene = #{subscribeScene,jdbcType=VARCHAR},
   create_date  = #{createDate,jdbcType=TIMESTAMP}
  where id = #{id,jdbcType=INTEGER}
 </update>
</mapper>

2.5 ExtUserMapper.xml

业务相关的sql,这里用不了自动生成mapper.xml里面的BaseResultMap这些东西

<?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.pikaqiu.barber.dao.ExtUserMapper">
 <resultMap id="BaseResultMap" type="com.pikaqiu.barber.entity.ExtUser">
  <id column="id" property="id" jdbcType="INTEGER"/>
  <result column="user_name" property="userName" jdbcType="VARCHAR"/>
  <result column="user_img" property="userImg" jdbcType="VARCHAR"/>
  <result column="open_id" property="openId" jdbcType="VARCHAR"/>
  <result column="phone" property="phone" jdbcType="VARCHAR"/>
  <result column="sex" property="sex" jdbcType="INTEGER"/>
  <result column="province" property="province" jdbcType="VARCHAR"/>
  <result column="country" property="country" jdbcType="VARCHAR"/>
  <result column="city" property="city" jdbcType="VARCHAR"/>
  <result column="birth_date" property="birthDate" jdbcType="VARCHAR"/>
  <result column="subscribe_date" property="subscribeDate" jdbcType="TIMESTAMP"/>
  <result column="subscribe_scene" property="subscribeScene" jdbcType="VARCHAR"/>
  <result column="create_date" property="createDate" jdbcType="TIMESTAMP"/>
 </resultMap>
 <update id="updateByOpenId" parameterType="com.pikaqiu.barber.entity.base.User" >
  update t_user
  <set>
   <if test="userName != null">
    user_name = #{userName,jdbcType=VARCHAR},
   </if>
   <if test="userImg != null">
    user_img = #{userImg,jdbcType=VARCHAR},
   </if>
   <if test="phone != null">
    phone = #{phone,jdbcType=VARCHAR},
   </if>
   <if test="sex != null">
    sex = #{sex,jdbcType=INTEGER},
   </if>
   <if test="province != null">
    province = #{province,jdbcType=VARCHAR},
   </if>
   <if test="country != null">
    country = #{country,jdbcType=VARCHAR},
   </if>
   <if test="city != null">
    city = #{city,jdbcType=VARCHAR},
   </if>
   <if test="birthDate != null">
    birth_date = #{birthDate,jdbcType=VARCHAR},
   </if>
   <if test="subscribeDate != null">
    subscribe_date = #{subscribeDate,jdbcType=TIMESTAMP},
   </if>
   <if test="subscribeScene != null">
    subscribe_scene = #{subscribeScene,jdbcType=VARCHAR},
   </if>
   <if test="createDate != null">
    create_date = #{createDate,jdbcType=TIMESTAMP},
   </if>
  </set>
  where open_id = #{openId,jdbcType=INTEGER}
 </update>
 <select id="selectUserByOpenId" parameterType="String" resultMap="BaseResultMap">
  select *
  from t_user
  where open_id = #{openId,jdbcType=VARCHAR}
 </select>

 <select id="existUserByOpenId" parameterType="String" resultType="Integer">
  select count(0)
  from t_user
  where open_id = #{openId,jdbcType=VARCHAR}
 </select>
</mapper>

2.6 UserServiceImpl.java

service层调用的时候直接调用扩展的mapper

/**
 * @author 吕梁山
 * @date 2019/4/23
 */
@Service("userService")
public class UserServiceImpl implements UserService {

 @Resource
 private ExtUserMapper extUserMapper;

 @Override
 public ExtUser getUserByOpenId(String openId) {
  return extUserMapper.selectUserByOpenId(openId);
 }
}

注:如果生成的mapper.xml和extmapper.xml不在同一个目录,需要在application.yml将所有mapper.xml文件都添加到扫描中

mybatis:
 #扫描sql.xml文件
 mapper-locations: classpath:mapping/**/*.xml
 #自动扫描实体类
 type-aliases-package: com.pikaqiu.barber.entity

至此,每次更改数据库结构后,直接重新生成文件对base文件进行替换即可,不需要再去将业务代码复制重新粘贴

总结

以上所述是小编给大家介绍的Mybatis逆向生成使用扩展类的实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 详解springboot项目启动时如何排除用不到的bean

    详解springboot项目启动时如何排除用不到的bean

    使用springboot开发项目,我们有时候会排除一些项目里面用不到的bean,不然的话项目启动会报错,这种情况通常是发生在什么场景里呢,以及如何解决呢,今天咱们就聊一聊
    2024-01-01
  • Java之实现十进制与十六进制转换案例讲解

    Java之实现十进制与十六进制转换案例讲解

    这篇文章主要介绍了Java之实现十进制与十六进制转换案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java 读取PDF中的文本和图片的方法

    Java 读取PDF中的文本和图片的方法

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法。分别调用方法extractText()和extractImages()来读取,需要的朋友可以参考下
    2019-07-07
  • Java实现AOP代理的三种方式详解

    Java实现AOP代理的三种方式详解

    AOP是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善。本文将用Java实现AOP代理的三种方式,需要的可以参考一下
    2022-07-07
  • Java线程让步_动力节点Java学院整理

    Java线程让步_动力节点Java学院整理

    yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权。下面通过本文给大家介绍Java线程让步的相关知识,需要的朋友参考下吧
    2017-05-05
  • 深入浅析springboot中static和templates区别

    深入浅析springboot中static和templates区别

    这篇文章主要介绍了springboot中static和templates区别,本文通过图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)

    这篇文章主要介绍了使用IDEA搭建SSM框架的详细教程 spring + springMVC +MyBatis,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot 集成 Nebula的操作过程

    SpringBoot 集成 Nebula的操作过程

    这篇文章主要介绍了SpringBoot 集成 Nebula的操作过程,通过示例代码介绍了java 环境下如何对 Nebula Graph 进行操作,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • JavaWeb Maven详解相关配置

    JavaWeb Maven详解相关配置

    这篇文章主要介绍了使用maven架构管理开发的相关配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 文件上传SpringBoot后端MultipartFile参数报空问题的解决办法

    文件上传SpringBoot后端MultipartFile参数报空问题的解决办法

    这篇文章主要介绍了文件上传SpringBoot后端MultipartFile参数报空问题的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论