# sense-support **Repository Path**: yoqu/sense-support ## Basic Information - **Project Name**: sense-support - **Description**: 快速开发脚手架,包括如下模块 sense-support-mybatis sense-support-hiberntae sense-support-mongo sense-support-openapi sense-support-example - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2018-03-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #为什么要做一个“sense”脚手架 java开发中常用的框架其实就是几个,spring(mvc),hibernate,mybatis,lucene,使用的数据库也就那么几种,mysql,redis,memcahced,mongodb。在遥远的“远古时代”,我们习惯了用jsp+servlet,进化到了struts,然后ejb->spring。。。就没有然后了,我只能说我们习惯了。老外总结了开发的难点并且把重复的工作封装后提供我们使用,而我们就习惯了别人的那套方式,这样到底好吗? 不可否认,老外在软件开发以及软件过程方面的总结确实有一套,并且能进化成产物,但是他们封装框架的时候考虑的是大而全,什么叫大而全,颗粒度适中,但是结合业务的时候还是有一些粗。 所以我不会去重复造轮子,只是考虑基于常用框架(spring(mvc),mybatis,lucene,hibernate),适当的再进行一次薄封装,把原本颗粒度较粗的代码,细化一点。能让java也能快速开发.缩短我们的开发周期。 #支持哪些功能? sense-support-core 基础模块,通用方法在这里 sense-support-hibernate 基于hibernate封装,简化hibernate查询方式,使用增强OBC查询 sense-support-lucene 基于lucene封装,简化lucene查询调用api sense-support-mongodb 基于spring-data-mongodb封装,简化查询api调用 sense-support-mybatis 基于mybatis封装,简化mybatis使用,减少大量重复性sql编写。专注业务。 sense-support-open-api 基于spring-mvc封装,简化移动接口开发,专注业务模型。 #sense-mybatis-support使用说明 ##方便的使用MyBatis单表的增删改查 为啥要写这个? 因为我最近做了个项目,必须用mybatis,重点是我不想写重复的sql 通用mapper有好多了,为啥要重新写一个? 本来是不想写的,但是我看了很多通用mapper,我觉得不满足需求,只支持=号操作,咋个弄呢。。。。遇到复杂点点的业务就蛋疼了。。。 写这个目的是什么? 80%业务不需要再写sql以及配置文件,支持多操作符,最重要一点,不需要太复杂的使用,可以xml+mapper混合使用,并且代码方式和传统使用mybatis的区别就是绑定了通用mapper而已。如果有特殊业务,也支持在dao基础上进行配置文件方式进代码编写工作 后续规划是什么? 1.先做一个扩展简化mybatis开发 2.看是不是有必要直接搞个mybatis分支,在源码上扩展,简化开发 3.重复造个轮子???实现orm,mvc,ioc,aop,cache这些。。。 4.至少要维护个一年吧。。。 ##优点? ##支持单表操作,两张表联查操作,不支持大于两张表操作 1.支持多种语句操作,如eq,ne,ge,gt,le,lt,is null,not null,is empty,not empty,in,not in,between,not between,以上操作都为AND,目前不支持OR 2.支持两张表联查,依旧不写sql,同时也支持以上多种操作符。只需要简单配置一下注解即可。 3.支持字段別名,cas需求就很好处理了哦。对同一个字段可以取别名多次set。 4.有工具类,直接生成数据库建表文件,对象建模。 ##缺点? 目前id方案支持数据库自增,UUID. ##使用方式 参考如下几个实现类 DBBuilder 实现查询,更新,插入,删除业务 ##准备开始 定义领域对象 @Alias("user_info") @Table(table = "user_info") public class UserInfo extends BasicModel { @Column(length = "200", desc = "用户头像") private String poster; @Column(length = "50") private String nickname; //省略get/set } mybatis配置文件扫描领域对象,如想使用mybatis的扫描机制,切记数据库字段和对象字段要一致,如不一致请到xml里面去配置映射关系,目前没找到其他实现方式,下一版本直接在mybatis源码扩展功能,少量改动源码。 定义一个mapper,不需要实现方法,泛型指定返回对象 public interface UserInfoMapper extends MysqlBaseMapper {} 定义一个dao接口 public interface UserInfoDao extends MySqlBaseDao {} 实现dao,对mapper进行绑定,指定mapper的class,dao也可以用传统的xml方式实现自己的业务,dao绑定mapper为了调用mapper通用方法,也还原了大家经常使用mybatis的方式。 @Repository public class UserInfoDaoImpl extends AbstractMySqlBaseDao implements UserInfoDao { @Override public Class mapperClass() { return UserInfoMapper.class; } } spring配置里面加入如下,com.xxxx.mapper为项目定义mapper目录 classpath:mapper/entity-config.xml ##开始使用了,注意:所有property字符串都为java类字段定义,非数据库字段。 查询单个对象 DBBuilder queryBuilder = DBBuilder.build(UserInfo.class).eq("id",1); UserInfo userInfo = userInfoDao.one(queryBuilder); 或者 UserInfo userInfo = DBBuilder.build(UserInfo.class).eq("status",1).one(); 查询list DBBuilder queryBuilder = DBBuilder.build(UserInfo.class).eq("status",1); List userInfos = userInfoDao.list(queryBuilder); 或者 List userInfos = DBBuilder.build(UserInfo.class).eq("status",1).list(); 查询总数 DBBuilder queryBuilder = DBBuilder.build(UserInfo.class).eq("status",1); int count = userInfoDao.count(queryBuilder); 或者 int count = DBBuilder.build(UserInfo.class).eq("status",1).count(); 查询当前页数据 DBBuilder queryBuilder = DBBuilder.build(UserInfo.class).page(1).size(10).eq("status",1); PageData page = userInfoDao.page(queryBuilder); 或者 PageData page= DBBuilder.build(UserInfo.class).page(1).size(10).eq("status",1).page(); 更新数据 DBBuilder update = DBBuilder.build(UserInfo.class).set("last_login_time",time).set("token", token).eq("id", 1); int r = userInfoDao.update(update); 或者 DBBuilder update = DBBuilder.build(UserInfo.class).set("last_login_time",time).set("token", token).eq("id", 1).update(); 插入数据 UserInfo userInfo = new UserInfo(); userInfo.setToken(token); userInfo.setChannel(channel); userInfo.setStatus_at(StatusAt.active.getCode()); userInfo.setClient_version(clientVersion); userInfo.setCredit(0); userInfo.setIp(ip); userInfo.setPhone(phone); userInfo.setPassword(sourcePwd); userInfo.setSalt(salt); userInfo.setCreate_at(now()); userInfo.setUpdate_at(now()); userInfo.setOs(os); DBBuilder insert = DBBuilder.build(UserInfo.class).set(userInfo); int r = userInfoDao.insert(insert); 或者 DBBuilder.build(UserInfo.class).set(userInfo).save(); 删除数据 DBBuilder delete= DBBuilder.build(UserInfo.class).eq("id", 1); int r = userInfoDao.delete(delete); 或者 DBBuilder.build(UserInfo.class).eq("id", 1).delete(); ##作者信息 因项目处于beta阶段,欢迎提出意见! 作者邮箱: lanjian860217@126.com 作者QQ:397415689 作者blog: http://blog.weixiaola.cn 最近工作较忙,欢迎大家多多技术交流,后续继续完善