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

Hibernate:
 我用了Hibernate一年多,能夠說是飽經風雨,感覺極深,Hibernate看似一個很好的框架,我簡單說一下它的使用痛點,
  一、做爲開發人員,咱們應該全新全意關注咱們的功能業務,不可以讓業務跟着技術走,應該讓技術跟着業務走
  二、ORM mapping映射文件,對象關係(一對1、對多、多對一)配置、與java類強耦合,一點不靈活
  三、有QBC,HQL,SQL三種查詢方式,常常式混合使用,有的代碼寫QBC、有的寫HQL、有的寫SQL,還有不少地方常常對象直接操做,
  由於同一個功能你有多種方式去實現,這就會迫使你面臨選擇,到底用那種方式,你會去權衡,這種狀況是很是痛苦的。有義務稍有
  變動,咔嚓!可能對象操做很差用了,你就改HQL,後面可能HQL都很差用,搞得很複雜,而後你又不想用SQL,有的也有可能用SQL,
  整個項目java代碼混合好多sql、HQL、對象操做、sql配置文件、映射配置... 處處都是圍繞着這個框架轉...... 代碼多又難看
Mybatis:
  一、就是個JDBC封裝,增強,只有sql,儘管寫sql,只要熟悉sql語句
  二、ORM映射,也很簡單,resutMap 或者 autoMapping ,這種配置、跟個小孩說都懂
  三、痛點來了:resutMap、if else 標籤、不少複用模式的sql,
  那麼多resultMap 寫得累吧,雖然思路簡單,那麼多if else 寫得累吧,那麼多服用模式的sql。
  有很大一部分配置都是吻合java實體類字段的 insert update delete select, 固然了,各類關聯查詢、更新、刪除仍是應該寫的。
  四、解決mybatis這個痛點的方式來了,代碼生成器:Mybatis-Generator。代碼是生成了,也確實節省了不少工做,但是代碼量並無減小、
  生成的代碼還那麼難看、還要去維護和修改代碼,因而,我寫了Mybatis-smart。
Mybatis-smart:
 簡單使用說明:
     smartMapper操做:
    smartMapper.insert(user);
    smartMapper.updateById(user);
    smartMapper.deleteById(id,SysUser.class);
    smartMapper.selectById(id,SysUser.class);
    .... 更多操做java

    簡單寫了個demo:
  實體類:省略了簡單的基本的 CRUD mapper.xml配置sql

//@TableInfo(value = "sys_user",idFieldName="account")//對應主鍵的java字段是account(默認是id)
//@TableInfo(value = "sys_user",idtactics=IdtacticsEnum.DEFINED)//主鍵生成策略:自定義,就是java設值;還有 IdtacticsEnum.DFT 內部默認序列生成器生成, IdtacticsEnum.SQL_INCR 數據庫自增
@TableInfo(value = "sys_user")//對應sys_user 表
public class SysUser  {
    
    @ColumnInfo(value="user_account")//對應sql字段user_account,默認是駝峯規則對應:如user_id對應userId或者userid對應userid
    private String account;
    private String pwd;
    private String email;
    private String tel;
    @ColumnInfo(insertValType=ObjTypeEnum.ALL)//調用mybatis-smart smartMapper 的新增方法時、""、null、其餘值 都會insert進數據庫,默認""、null 不會insert進數據庫
    private String nickname;
    private Date lastLoginTime;
    private String lastLoginIp;
    private Integer age;
    @ColumnInfo(isUpdate = false)//調用mybatis-smart smartMapper 的更新方法時,不更新該字段
    protected Date createTime;
    
    @ColumnInfo(isInsert=false)//調用mybatis-smart smartMapper 的新增方法時,不新增該字段
    protected Date updateTime;

    protected String selectParam;//表中沒有select_param,則調用mybatis-smart smartMapper 的CRUD都會忽略該字段
        ...省略get set 方法
}

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

    /*
     * ... 省略 更新 刪除
     */
}

 

 實在時間有限,今晚到此爲止,但願諒解,源碼及更多相關請關注我,接下來再發布,聯繫我 QQ:59425559八、微信:xiangb82195   mybatis

相關文章
相關標籤/搜索