本贴最后更新于 766 天前,其中的信息可能已经时移俗易

优点?

支持单表操作, 两张表联查操作, 不支持大于两张表操作

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);

  • ORM
    6 引用 • 27 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2393 引用 • 6857 回帖 • 1156 关注
  • myabtis
    1 引用
感谢    关注    收藏    赞同    反对    举报    分享