简单、快速、有效的mybatis开发框架:Fast MyBatis

开源地址:https://gitee.com/durcframework/fastmybatis
相关文档:https://durcframework.gitee.io/fastmybatis/#/

fastmybatis 是一个 mybatis 开发框架,其宗旨为:简单、快速、有效。零配置快速上手,无需编写 xml 文件即可完成 CRUD 操作。同时支持 mysql、sqlserver、oracle、postgresql、sqlite。

支持自定义 SQL,对于基本的增删改查不需要写 SQL,对于其它特殊 SQL(如统计 SQL )可写在 xml 中,支持与 Spring-Boot 集成,依赖 starter 即可,支持插件编写,支持 ActiveRecord 模式,提供通用 Service,轻量级,无侵入性,是官方 MyBatis 的一种扩展。

快速开始(springboot)

新建一个 Spring boot 项目
pom.xml 添加 fastmybatis-spring-boot-starter:


<dependency>
    <groupId>net.oschina.durcframework</groupId>
    <artifactId>fastmybatis-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

增删改查例子:
假设数据库有张 t_user 表,添加对应的实体类 TUser.java和 Mapper 类:

TUserMapper.java:

/**
 * 增删改查例子
 */
@RestController
public class CrudController {

    @Autowired
    private UserService userService;
    /**
     * 分页查询
     * http://localhost:8080/user/page?id=10
     * http://localhost:8080/user/page?pageIndex=1&pageSize=5
     *
     * @param param
     * @return
     */
    @GetMapping("/user/page")
    public Result<PageInfo<TUser>> page(UserParam param) {
        Query query = param.toQuery();
        PageInfo<TUser> pageInfo = userService.page(query);
        return Result.ok(pageInfo);
    }

    /**
     * 新增记录,这里为了方便演示用了GET方法,实际上应该使用POST
     * http://localhost:8080/user/save?username=jim
     *
     * @param user
     * @return
     */
    @GetMapping("/user/save")
    public Result<Integer> save(TUser user) {
        userService.saveIgnoreNull(user);
        // 返回添加后的主键值
        return Result.ok(user.getId());
    }

    /**
     * 修改记录,这里为了方便演示用了GET方法,实际上应该使用POST
     * http://localhost:8080/user/update?id=10&username=jim
     *
     * @param user 表单数据
     * @return
     */
    @GetMapping("/user/update")
    public Result<?> update(TUser user) {
        userService.updateIgnoreNull(user);
        return Result.ok();
    }

    /**
     * 删除记录,这里为了方便演示用了GET方法,实际上应该使用DELETE
     * http://localhost:8080/user/delete?id=10
     *
     * @param id 主键id
     * @return
     */
    @GetMapping("/user/delete")
    public Result<?> delete(Integer id) {
        userService.deleteById(id);
        return Result.ok();
    }
}

UserService.java:

// 实现通用接口
@Service
public class UserService implements IService<TUser/*实体类*/, Integer/*主键类型*/> {

}

TUserMapper.java:

public interface TUserMapper extends CrudMapper<TUser/*实体类*/, Integer/*主键类型*/> {

}

service和mapper不用写一行代码就能实现各种数据库操作,非常方便。

Mapper方法列表

/**
 * 根据主键查询
 * 
 * @param id
 * @return 返回实体对象,没有返回null
 */
T getById(I id);

/**
 * 根据条件查找单条记录
 * @param query 查询条件
 * @return 返回实体对象,没有返回null
 */
T getByQuery(@Param("query")Query query);

/**
 * 根据字段查询一条记录
 * @param column 数据库字段名
 * @param value 字段值
 * @return 返回实体对象,没有返回null
 */
T getByColumn(@Param("column")String column,@Param("value")Object value);

/**
 * 查询总记录数
 * 
 * @param query 查询条件
 * @return 返回总记录数
 */
long getCount(@Param("query")Query query);  

/**
 * 根据字段查询集合
 * @param column 数据库字段名
 * @param value 字段值
 * @return 返回实体对象集合,没有返回空集合
 */
List<T> listByColumn(@Param("column")String column,@Param("value")Object value);

/**
 * 条件查询
 * 
 * @param query 查询条件
 * @return 返回实体对象集合,没有返回空集合
 */
List<T> list(@Param("query")Query query);

/**
 * 查询指定字段结果
 * @param columns 返回的字段
 * @param query 查询条件
 * @return 返回结果集
 */
List<Map<String, Object>> listMap(@Param("columns")List<String> columns, @Param("query")Query query);

/**
 * 新增,新增所有字段
 * 
 * @param entity
 * @return 受影响行数
 */
int save(T entity);

/**
 * 新增(忽略null数据)
 * @param entity
 * @return 受影响行数
 */
int saveIgnoreNull(T entity);

/**
 * 批量添加,只支持mysql,sqlserver2008及以上数据库.<br>
 * <strong>若要兼容其它版本数据库,请使用saveMulti()方法</strong>
 * @param entitys
 * @return
 */
int saveBatch(@Param("entitys")List<T> entitys);

/**
 * 批量保存,兼容更多的数据库版本.<br>
 * 此方式采用union all的方式批量insert,如果是mysql或sqlserver2008及以上推荐saveBatch()方法.
 * 
 * @param entitys
 * @return 受影响行数
 */
int saveMulti(@Param("entitys") List<T> entitys);

/**
 * 修改,修改所有字段
 * 
 * @param entity
 * @return 受影响行数
 */
int update(T entity);

/**
 * 根据主键更新不为null的字段
 * 
 * @param entity
 * @return 受影响行数
 */
int updateIgnoreNull(T entity);

/**
 * 根据条件批量更新
 * 
 * @param entity 待更新的数据,可以是实体类,也可以是Map{@literal<String,Object>}
 * @param query 更新条件
 * @return 受影响行数
 */
int updateByQuery(@Param("entity") Object entity, @Param("query") Query query);

/**
 * 删除
 * 
 * @param entity
 * @return 受影响行数
 */
int delete(T entity);

/**
 * 根据id删除
 * 
 * @param id 主键id
 * @return 受影响行数
 */
int deleteById(I id);

/**
 * 根据条件删除
 * 
 * @param query
 * @return 受影响行数
 */
int deleteByQuery(@Param("query")Query query);

Query查询对象

查询姓名为张三,并且年龄为22岁的用户:
Query query = new Query().eq("username","张三").eq("age",22);
List<User> users = mapper.list(query);

查询年龄为10,20,30的用户:
Query query = new Query().in("age",Arrays.asList(10,20,30));
List<User> users = mapper.list(query);

查询注册日期大于2017-11-11的用户:
Date regDate = ...
Query query = new Query().gt("reg_date",regDate);
List<User> users = mapper.list(query);

查询性别为男的,年龄大于等于20岁的用户,按年龄降序:
Query query = new Query().eq("gender",1).ge("age",20).orderby("age",Sort.DESC);
List<User> users = mapper.list(query);

分页查询:
Query query = new Query().eq("age",10).page(1,10); // 第一页,每页10条数据
List<User> users = mapper.list(query);

查询总记录数:
Query query = new Query().eq("age",10).page(1,10); // 第一页,每页10条数据
long total = mapper.getCount(query); // 该条件下总记录数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值