首页 > 编程 > Java > 正文

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

2019-11-26 08:59:47
字体:
来源:转载
供稿:网友

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逆向生成使用扩展类的实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表