# cnbbx-mybatis **Repository Path**: cnbbx_com/cnbbx-mybatis ## Basic Information - **Project Name**: cnbbx-mybatis - **Description**: 继承Mapper实现的方法,无需编写太多mapper.xml文件,即可获得CRUD功能。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 0 - **Created**: 2017-08-29 - **Last Updated**: 2025-07-24 ## Categories & Tags **Categories**: database-dev **Tags**: None ## README # Cnbbx_MyBatis通用Mapper ~~~ com.cnbbx cnbbx-mybatis 1.3.1 ~~~ ## 方便的使用MyBatis单表的增删改查 100%业务不需要再写sql以及配置文件,支持多操作符,最重要一点,不需要太复杂的使用,可以xml+mapper混合使用,并且代码方式和传统使用mybatis的区别就是绑定了通用mapper而已。如果有特殊业务,也支持在dao基础上进行配置文件方式进代码编写工作 ## 优点? 1.支持多种语句操作,如eq,neq,ge,gt,le,lt,is null,not null,is empty,not empty,in,not in,exp以上操作都为AND,目前不支持OR 2.支持多张表联查,依旧不写sql,同时也支持以上多种操作符。只需要简单配置一下注解即可。 3.支持字段別名,cas需求就很好处理了哦。对同一个字段可以取别名多次set。 4.有工具类,直接生成数据库建表文件,对象建模。 ## 缺点? 目前不支持OR,不过可以通过exp实现OR。 ## 使用方式 参考如下几个实现类 1.QueryBuilder 实现查询业务 2.UpdateBuilder 实现更新业务,支持根据查询条件更新数据 3.InsertBuilder 实现插入业务 4.DeleteBuilder 实现删除业务 ## 准备开始 定义领域对象 @Table(table = "user_info")//数据库表名 public class UserInfo implements Serializable { @Column(length = "20") private Long uid; @Column(length = "50", desc = "用户昵称") private String uname; @Column(length = "50", desc = "用户手机") private String uphone; @Column(length = "50") private String uaddress; //省略get/set } 多个链表查询定义方式 @Table(table = "more", moreTable = "user_info as uinfo,user_order as uorder", moreOn = "uinfo.uid=uorder.uid") 只是单独两个链表查询 @Table(table = "user_info", tableAs = "uinfo", joinTable = "user_order", joinTableAs = "uorder", tableOn = "uid", joinTableOn = "uid", joinType = JoinType.inner) 定义一个mapper,不需要实现方法,泛型指定返回对象 public interface UserInfoMapper extends MysqlBaseMapper {} 定义一个dao接口 public interface UserInfoDao extends MySqlBaseDao {} 实现dao,对mapper进行绑定,指定mapper的class,dao也可以用传统的xml方式实现自己的业务,dao绑定mapper为了调用mapper通用方法,也还原了大家经常使用mybatis的方式。 @Service public class UserInfoDaoImpl extends AbstractMySqlBaseDao implements UserInfoDao { @Override public Class mapperClass() { return UserInfoMapper.class; } } ## 开始使用了,注意:所有property字符串都为java类字段定义,非数据库字段。 查询单个对象 QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("uid",1); UserInfo userInfo = userInfoDao.one(queryBuilder); 查询list QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("uname","jinge"); List userInfos = userInfoDao.list(queryBuilder); 查询总数 QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("uphone","134********"); int count = userInfoDao.count(queryBuilder); 查询当前页数据 QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).page(1).size(10).eq("uid",1); PageData page = userInfoDao.page(queryBuilder); 更新数据 UpdateBuilder update = UpdateBuilder.build(UserInfo.class).set("uphone",mobile).set("token", token).eq("uid", 1); int r = userInfoDao.update(update); 插入数据 UserInfo userInfo = new UserInfo(); userInfo.setId(UUIDUtils.uuid()); 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); InsertBuilder insert = InsertBuilder.build(UserInfo.class).set(userInfo); int r = userInfoDao.insert(insert); 删除数据 DeleteBuilder delete = DeleteBuilder.build(UserInfo.class).eq("uid", 1); int r = userInfoDao.delete(delete); ## 作者信息 因项目需求,为了快速开发,花了几天时间简单封装了mybatis3,支持多种操作符的查询和写入,欢迎提出意见!