Mybatis-smart(Mybatis最終優化方案)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM