优点?
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);
欢迎来到黑客派
注册 关于