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

网友投稿 281 2023-01-06


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

1.背景介绍

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

2.代码

2.1 BaseMapper.java

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

/**

* @author 吕梁山

* @date 2019/4/23

*/

public interface BaseMapper {

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 { }

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要写正确

id, user_name, user_img, open_id, phone, sex, province, country, city, birth_date,

subscribe_date, subscribe_scene, create_date

select

from t_user

where id = #{id,jdbcType=INTEGER}

delete from t_user

where id = #{id,jdbcType=INTEGER}

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 into t_user

id,

user_name,

user_img,

open_id,

phone,

sex,

province,

country,

city,

birth_date,

subscribe_date,

subscribe_scene,

create_date,

#{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},

update t_user

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 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}

2.5 ExtUserMapper.xml

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

update t_user

user_name = #{userName,jdbcType=VARCHAR},

user_img = #{userImg,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 open_id = #{openId,jdbcType=INTEGER}

select *

from t_user

where open_id = #{openId,jdbcType=VARCHAR}

<select id="existUserByOpenId" parameterType="String" resultType="Integer">

select count(0)

from t_user

where open_id = #{openId,jdbcType=VARCHAR}

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文件进行替换即可,不需要再去将业务代码复制重新粘贴

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot使用Mybatis(xml和注解)过程全解析
下一篇:做接口测试参数配置(接口测试参数类型有哪些)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~