Mybatis-smart:

  为干掉 if else 而生 ~!绝不改变mybatis!绝不混肴 sql 和 java 代码!绝不新增思想!绝不新增学习难度!

  绝对让你丢掉 mybatis代码生成器!绝对省略70%的mapper.xml配置,除了复杂的sql,连xml配置文件都不用!

  绝对不是mybatis-plus!绝对不是JPA!

开始使用:

1、spring框架,已经搭建好mybatis,这里只介绍spring-boot

2、maven 引入:

<!-- https://mvnrepository.com/artifact/com.github.ljinlin/mybatis-smart -->
<dependency>
<groupId>com.github.ljinlin</groupId>
<artifactId>mybatis-smart</artifactId>
<version>1.0.0-beta1</version>
</dependency>

  3、yml配置

#配置 sqlSessionFactory  和 需要扫描的实体类包
mybatis-smart:
tablePackages:
# 包名: sqlSessionFactory bean的name , mybatis的sqlSessionFactory默认bean的name就是“sqlSessionFactory”,所以可以省略不写,直接写"包名:"
com.ljinlin.admin.entity: sqlSessionFactory
com.ljinlin.order.entity: sqlSessionFactory
     #其他写法,不同的包,不同的sqlSessionFactory,支持多数据源
#com.ljinlin.*.entity:
#com.ljinlin.*.entity: readSqlSessionFactory
#com.ljinlin.*.entity: writeSqlSessionFactory
sqlPrint:
isPrint: true #输出打印sql语句,看看sql语句你会非常了解mybatis-smart

4、配置实体类:(这里是核心,给我们干掉了if else,干掉了xml)

// 这些配置只对使用mybatis-smart有效,与自己写的mapper无关
@SmartTable("sys_user") // 这里是不是一看就懂,对应的表
public class SysUser { //映射 id 列,isUpdate=false 就是不更新,即调用mybatis-smart的update方法时,该字段无论有值还是null、"",都不会更新该,但是可以作为where条件
@SmartColumn(isUpdate = false)
protected String id;
//映射 account 列,若要映射 user_id 列 则 value = "user_id"
@SmartColumn(isUpdate = false)
protected String account;
// 表里有 type列时,则与之映射
protected Integer type;
//映射 nickname 列,updateValType = ObjTypeEnum.ALL,即该字段值是null、""也会更新,默认是值为null、"" 不会去更新。insertValtype同此
@SmartColumn(updateValType = ObjTypeEnum.ALL)
protected String nickname;
protected String pwd;
//映射 update_user 列,isInsert = false 就是不新增,即调用mybatis-smart的insert方法时,该字段无论有值还是null、"",都不会新增
@SmartColumn(isInsert = false)
protected String updateUser; // @SmartColumn 还有时间日期相关配置,dateFormart .... 今晚懒得写了,可以联系我
// 省略get set ...
}

  5、Mapper接口:继承SmartMapper

public interface SysUserMapper extends SmartMapper<SysUser> {

}

    Service:

@Service
public class SysUserService { @Autowired
private SysUserMapper sysUserMapper; public void inset(SysUser sysUser) {
sysUserMapper.insert(sysUser);
} /**
* 插入支持Collection集合
*/
public void insetList(Collection<SysUser> sysUserList) {
sysUserMapper.insert(sysUserList);
} public void selectByWhere() {
WhereSql where = new WhereSql();
where.andEq("user_account", "laowang");// user_account = 'laowang'
where.andLikeL("user_account", "lao");// user_account like '%laowang'
where.andLikeR("user_account", "wang");// user_account like 'laowang%'
// ...... List<SysUser> list = sysUserMapper.selectForWhere(SysUser.class, where); SysUser param = new SysUser();
param.setAge(23);
where = new WhereSql();
where.andEq("user_account");// user_account = #{xxx.account} account字段值为''或null ,没有该条件
where.andIsNull("user_account");// user_account is null
where.andEq("email");// email = #{xxx.email} email字段值为''或null ,没有该条件
where.andEq("age");// age = 23
// ..... list = sysUserMapper.selectByWhere(param, where);
where.andEq("user_account", "尘无尘");// user_account = #{}
} /*
* ... 省略 更新 删除
*/
}

Hibernate:
 我用了Hibernate一年多,可以说是饱经风雨,感受极深,Hibernate看似一个很好的框架,我简单说一下它的使用痛点,
  1、作为开发人员,我们应该全新全意关注我们的功能业务,不能够让业务跟着技术走,应该让技术跟着业务走
  2、ORM mapping映射文件,对象关系(一对一、对多、多对一)配置、与java类强耦合,一点不灵活
  3、有QBC,HQL,SQL三种查询方式,经常式混合使用,有的代码写QBC、有的写HQL、有的写SQL,还有很多地方经常对象直接操作,
  因为同一个功能你有多种方式去实现,这就会迫使你面临选择,到底用那种方式,你会去权衡,这种情况是非常痛苦的。有义务稍有
  变更,咔嚓!可能对象操作不好用了,你就改HQL,后面可能HQL都不好用,搞得很复杂,然后你又不想用SQL,有的也有可能用SQL,
  整个项目java代码混合好多sql、HQL、对象操作、sql配置文件、映射配置... 到处都是围绕着这个框架转...... 代码多又难看
Mybatis:
  1、就是个JDBC封装,加强,只有sql,尽管写sql,只要熟悉sql语句
  2、ORM映射,也很简单,resutMap 或者 autoMapping ,这种配置、跟个小孩说都懂
  3、痛点来了:resutMap、if else 标签、很多复用模式的sql, 
  那么多resultMap 写得累吧,虽然思路简单,那么多if else 写得累吧,那么多服用模式的sql。
  有很大一部分配置都是吻合java实体类字段的 insert update delete select, 当然了,各种关联查询、更新、删除还是应该写的。
  4、解决mybatis这个痛点的方式来了,代码生成器:Mybatis-Generator。代码是生成了,也确实节省了很多工作,可是代码量并没有减少、
  生成的代码还那么难看、还要去维护和修改代码,于是,Mybatis-smart 诞生了。

 实在时间有限,今晚到此为止,希望谅解,源码及更多相关请关注我,接下来再发布,联系我 QQ:594255598

mybatis-smart

Mybatis-smart(Mybatis最终优化方案)的更多相关文章

  1. 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    [转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...

  2. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  3. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  4. [转帖] 数据库用优化方案 https://segmentfault.com/a/1190000006158186

    Mysql大表优化方案     当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部 ...

  5. 轻量级封装DbUtils&Mybatis之四MyBatis主键

    MyBatis主键 不支持对象列表存储时对自增id字段的赋值(至少包括3.2.6和3.3.0版本),如果id不是采用底层DB自增主键赋值,不必考虑此问题 温馨提示:分布式DB环境下,DB主键一般会采用 ...

  6. Tomcat 配置详解/优化方案

     转自:http://blog.csdn.net/cicada688/article/details/14451541 Service.xml Server.xml配置文件用于对整个容器进行相关的配置 ...

  7. 一个网站完整详细的SEO优化方案

    根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水... 一个完整的SEO优化方案主要由四个小组组成: 一.前端/页编人员 二.内容编辑人员 三.推广人员 四.数据分析 ...

  8. tomcat配置详解/优化方案

    Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性:className: ...

  9. SEO网站优化方案

    学习许多前辈的经验,看到一些比较有价值的seo优化方案,特记录一下,对照自己的操作之路,新人也可借鉴一二,下面是从卢松松博客看到的文章.高手直接跳过,请勿喷水. 一个完整的SEO优化方案主要由四个小组 ...

随机推荐

  1. 【MFC】CDialogBar中按钮不可用

    现象展示: 具体原因: A button in a CDialogBar object is disabled automatically if the command routing does no ...

  2. 结对编程项目总结(core2组)

    结对编程项目总结(core2组) 作业---四则运算(Core 第二组)   ----by 吴雪晴 PB16061514 齐天杨 PB16060706 一.项目简介 项目的任务为制作一个给(貌似是?) ...

  3. google学习

    https://developers.google.com/machine-learning/crash-course/ https://developers.google.com/machine-l ...

  4. Layui - Xtree 3.0 http://acmeworker.com/BlogContent?type=1038

    2018年1月11日升级 Layui - Xtree 3.0 此版本包含了前两个版本所有的功能,同时修复了一些问题,增加了一些功能,之前的版本可以直接抛弃啦!本次升级改动较多,参数也有所更改,尽量别直 ...

  5. Win10开启PIN码使用教程

    很多电脑爱好者对于Win10内置的PIN码功能不太了解,很多朋友都还没有使用.其实,创建PIN码可以提到密码使用,当你登录到Windows和其它应用服务时,可以通过PIN码替代输入账户密码,提升安全性 ...

  6. oracle sql练习 菜鸟入门!

    进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...

  7. CentOS使用PXE网络启动自动安装操作系统

    PXE工作原理简介 PXE (Preboot Excution Environment) 预启动执行环境 工作环境介绍: 要实现PXE自动网络安装CentOS至少需要两台主机 1)PXE服务器PXE ...

  8. 类库文件引用web服务报错解决方法-在 ServiceModel 客户端配置部分中,找不到引用协定的默认终结点元素

    由于需求,需要改造原有应用,因原有应用是写在console下面的,现在需要开放至web下, 想到BIZ层应用代码都是一样的,又不想在web下在添加引用,而重复写代码,故将原有的console下的服务和 ...

  9. js图形库

    SVG.js viz.js graphviz的js实现版 raphael d3 (http://d3js.org/) JavaScript InfoVis Toolkit Flotr2 and Env ...

  10. Eclipse 连接真实机器调试

    一.手机开启调试模式 二.安装adb.exe 1.确信 \android-sdk-windows\tools\下有 adb.exe     AdbWinApi.dll     AdbWinUsbApi ...