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逆向生成使用扩展类的更多相关文章
- 「小程序JAVA实战」Springboot版mybatis逆向生成工具(32)
转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootbanmybatisnixiangshengchenggongju32/ ...
- myBatis逆向生成及使用
引入数据库驱动 <!-- mybatis逆向生成包 --><dependency> <groupId>org.mybatis.generator</group ...
- eclipse从数据库逆向生成Hibernate实体类
做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...
- [转]eclipse借助hibernate tool从数据库逆向生成Hibernate实体类
如何从数据库逆向生成Hibernate实体类呢??? 1. 首先,要在eclipse中采用自带的数据库管理器(Data Management),连通你的数据库: 然后选择数据库,这里用的oracle, ...
- (转) Eclipse通过HibernateTools实现逆向生成Hibernate实体类
背景:工作中使用Hibernate进行持久化的开发工作,所以有必要详细了解这方面的知识. ps:这里有个问题就是刷新表的时候速度太慢了.还不如自己手动去创建.如果表太多倒是可以采取批量生成的策略. 在 ...
- MyBatis逆向工程生成的Example类的方法总结
很早之前就在项目开发中多次使用MyBatis逆向工程生成的Example类,但一直没有对其下的方法做一个简单的总结,现总结如下:一.mapper接口中的方法解析mapper接口中的部分常用方法及功能如 ...
- 【SSM 4】Mybatis逆向生成工具
在上一篇博客中说到,Mybatis是灵活的SQL语句应用,不想Hibernate一样有其封装好的方法,那么,当我们用Mybatis的时候(Hibernate),我们都需要编写其实体类,和配置文件.本篇 ...
- Springboot学习与mybatis逆向生成工具
最近H2数据库越用越觉得方便,在不同办公处无缝继续demo的感觉就是爽. 今天接上一篇Springboot简洁整合mybatis,补上sts(即eclipse)使用mybatis generato ...
- Mybatis逆向生成
在已经有了数据库的表的时候,为了方便起见,我们可以逆向生成javabean,xml,dao接口等,当然,下载mybaits-generation的工具,我这里用的是eclipse插件,然后准备一 个x ...
随机推荐
- 小谈python里 列表 的几种常用用法
在python中列表的常用方法主要包括增加,删除,查看和修改.下面以举例子的方法具体说明,首先我们创建两个列表,列表是用[ ]表示的,里面的元素用逗号隔开. a=[‘hello’,78,15.6,‘你 ...
- cs229课程索引
重要说明 这个系列是以cs229为参考,梳理下来的有关机器学习传统算法的一些东西.所以说cs229的有些内容我会暂时先去掉放在别的部分里面,也会加上很多重要的,但是cs229没有讲到的东西.而且本系列 ...
- 由浅入深学习PBR的原理和实现
目录 一. 前言 1.1 本文动机 1.2 PBR知识体系 1.3 本文内容及特点 二. 初阶:PBR基本认知和应用 2.1 PBR的基本介绍 2.1.1 PBR概念 2.1.2 与物理渲染的差别 2 ...
- loj2028 「SHOI2016」随机序列
定义区间是内部只含有乘号的区间. 对于区间左端点是 \(l \geq 2\) 的情况,左端点前头是加号的情况和前头是减号的情况的个数是相同的.因此这些区间不对答案产生贡献. 所以区间左端点必定是 \( ...
- python - log日志
# -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_logging.py @ide: PyCharm Comm ...
- python - web自动化测试 - 文件上传操作
# 12. 上传操作## (1)如果是input可以直接输入路径的,直接使用send_keys输入路径# (2)非input标签的,需要借助第三方工具:# A. AutoIt : 调用其生成的au3或 ...
- php 操作excel
<?php $dir=dirname(__FILE__);//查找当前脚本所在路径 require $dir."/db.php";//引入mysql操作类文件 require ...
- 《机器学习实战》笔记——regression
本章介绍了不同场景下使用的线性回归方法 一般情况:简单的线性回归 欠拟合:局部加权线性回归 特征数大于样本数:岭回归 或 lasso法 最后引出交叉验证,用来定量地找到最佳参数值 # _*_ codi ...
- Django数据库的查看、删除,创建多张表并建立表之间关系
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试: settings里面的设置: #可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGI ...
- 2018 “百度之星”程序设计大赛 - 初赛(B)
degree Accepts: 1581 Submissions: 3494 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 1310 ...