热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

这篇文章主要介绍了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要写正确

<&#63;xml version="1.0" encoding="UTF-8" &#63;>


 
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
  id, user_name, user_img, open_id, phone, sex, province, country, city, birth_date,
  subscribe_date, subscribe_scene, create_date
 
 
 
  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这些东西

<&#63;xml version="1.0" encoding="UTF-8" &#63;>


 
  
  
  
  
  
  
  
  
  
  
  
  
  
 
 
  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}
 
 

 

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


推荐阅读
  • MyBatis 开发技巧:延迟加载与查询缓存详解
    本文详细探讨了 MyBatis 中的延迟加载和查询缓存机制,旨在帮助开发者更好地理解和利用这些特性来优化数据库访问性能。 ... [详细]
  • 本项目展示了如何利用Java技术构建一个高效的考勤数据管理系统,特别适用于处理大量数据的情况,如企业员工考勤记录等。项目包括完整的源代码和详细的文档说明,适合用于毕业设计或实际工作场景。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 本文探讨了在H2内存数据库中使用to_char函数遇到的问题,包括别名创建失败和堆栈内存溢出的情况,并提供了解决方案。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
  • GBase 8s SQL 指南:多列约束详解
    本文档详细介绍了如何在GBase 8s中使用多列约束格式,将其应用于现有表的一列或多列。这种格式类似于CREATE TABLE语句中的多列约束,但提供了一些额外的选项,如INDEX DISABLED关键字。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 今天发现Mysql的主从数据库没有同步先上Master库:mysqlshowprocesslist;查看下进程是否Sleep太多。发现很正常。showmaster ... [详细]
  • 本文总结了WebSphere应用服务器出现宕机问题的解决方法,重点讨论了关键参数的调整,包括数据源连接池、线程池设置以及JVM堆大小等,旨在提升系统的稳定性和性能。 ... [详细]
  • 本文探讨了Java编程中MVC模式的优势与局限,以及如何利用Java开发一款基于鸟瞰视角的赛车游戏。 ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
  • 基于Java的学生宿舍管理系统设计
    本论文探讨了如何利用Java技术设计和实现一个高效的学生宿舍管理系统。该系统旨在提高宿舍管理的效率,减少人为错误,同时增强用户体验。通过集成用户认证、数据管理和查询功能,系统能够满足学校宿舍管理的多样化需求。 ... [详细]
  • 本文介绍了MySQL数据库的安全权限管理思想及其制度流程,涵盖从项目开发、数据库更新到日常运维等多个方面的详细流程控制,旨在通过严格的流程管理和权限控制,有效预防数据安全隐患。 ... [详细]
  • 本文详细解析了 SUCTF 2019 中的 EasySQL 题目,重点探讨了堆叠注入与 UNION 注入的区别及其应用条件。 ... [详细]
author-avatar
sannyi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有