优点?
1.支持多种语句操作,如eq,ne,ge,gt,le,lt,is null,not null,is empty,not empty,in,not in,以上操作都为AND,目前不支持OR
2.支持两张表联查,依旧不写sql,同时也支持以上多种操作符。只需要简单配置一下注解即可。
3.支持字段別名,cas需求就很好处理了哦。对同一个字段可以取别名多次set。
4.有工具类,直接生成数据库建表文件,对象建模。
缺点?
目前id方案不支持数据库自增,采取编码setId的方案,后续会实现id生成器。
没实现oracle。。。只实现了mysql数据库支持。
使用方式
参考如下几个实现类
1.QueryBuilder 实现查询业务
2.UpdateBuilder 实现更新业务,支持根据查询条件更新数据
3.InsertBuilder 实现插入业务
4.DeleteBuilder 实现删除业务
准备开始
定义领域对象
@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类字段定义,非数据库字段。
查询单个对象
QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("id",1);
UserInfo userInfo = userInfoDao.one(queryBuilder);
查询list
QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("status",1);
List<UserInfo> userInfos = userInfoDao.list(queryBuilder);
查询总数
QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).eq("status",1);
int count = userInfoDao.count(queryBuilder);
查询当前页数据
QueryBuilder queryBuilder = QueryBuilder.build(UserInfo.class).page(1).size(10).eq("status",1);
PageData page = userInfoDao.page(queryBuilder);
更新数据
UpdateBuilder update = UpdateBuilder.build(UserInfo.class).set("last_login_time",time).set("token", token).eq("id", 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("id", 1);
int r = userInfoDao.delete(delete);
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于