16 Star 30 Fork 7

呸呸呸 / sense-support

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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<UserInfo> {
    @Column(length = "200", desc = "用户头像")
    private String poster;

    @Column(length = "50")
    private String nickname;

    //省略get/set
}

mybatis配置文件扫描领域对象,如想使用mybatis的扫描机制,切记数据库字段和对象字段要一致,如不一致请到xml里面去配置映射关系,目前没找到其他实现方式,下一版本直接在mybatis源码扩展功能,少量改动源码。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.xxx.model"/>
    </typeAliases>
</configuration>

定义一个mapper,不需要实现方法,泛型指定返回对象

public interface UserInfoMapper extends MysqlBaseMapper<UserInfo> {}

定义一个dao接口

public interface UserInfoDao extends MySqlBaseDao<UserInfo> {}

实现dao,对mapper进行绑定,指定mapper的class,dao也可以用传统的xml方式实现自己的业务,dao绑定mapper为了调用mapper通用方法,也还原了大家经常使用mybatis的方式。

@Repository
public class UserInfoDaoImpl extends AbstractMySqlBaseDao<UserInfo> implements UserInfoDao {
    @Override
    public Class mapperClass() {
        return UserInfoMapper.class;
    }
}

spring配置里面加入如下,com.xxxx.mapper为项目定义mapper目录

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.xxxx.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
 </bean>

 <!-- myBatis Sql映射文件 -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
     <property name="dataSource" ref="multipleDataSource"/>
     <property name="configLocation">
         <value>classpath:mapper/entity-config.xml</value>
     </property>
     <!--
        依旧可以使用mybatis配置文件方式
        <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
     -->
 </bean>

##开始使用了,注意:所有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<UserInfo> userInfos = userInfoDao.list(queryBuilder);
或者
List<UserInfo> 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

最近工作较忙,欢迎大家多多技术交流,后续继续完善

空文件

简介

快速开发脚手架,包括如下模块 sense-support-mybatis sense-support-hiberntae sense-support-mongo sense-support-openapi sense-support-example 展开 收起
Java 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/lan0217/sense-support.git
git@gitee.com:lan0217/sense-support.git
lan0217
sense-support
sense-support
master

搜索帮助