80 Star 427 Fork 136

tanghc/fastmybatis

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

fastmybatis

maven

fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效。

  • 零配置快速上手,无需依赖Spring
  • 无需编写xml文件即可完成增删改查操作,支持LambdaQuery查询、支持JPA Query Method查询(findByXxx)
  • 支持mysql、sqlserver、oracle、postgresql、sqlite、StarRocks(原DorisDB)
  • 支持自定义sql,对于基本的增删改查不需要写SQL,对于其它特殊SQL(如统计SQL)可写在xml中
  • 支持与spring-boot集成,依赖starter即可,支持Springboot3.0
  • 支持插件编写
  • 支持ActiveRecord模式
  • 支持多租户
  • 提供通用Service
  • API丰富,多达40+方法,满足日常开发需求
  • 轻量级,无侵入性,是官方mybatis的一种扩展

Query查询

使用Query对象即可实现查询/修改/删除操作

// 根据条件查询
// SELECT ... FROM t_user WHERE username = ? AND age > 30
List<TUser> list = TUser.query()
        .eq(TUser::getUsername, "张三")
        .gt(TUser:: getAge, 30)
        .list();

// 分页查询
// SELECT ... FROM t_user WHERE username = ? ORDER BY id DESC LIMIT 0, 10
PageInfo<TUser> pageInfo = this.query()
        .eq(TUser::getUsername, "张三")
        .page(1, 10)
        .orderByDesc(TUser::getId)
        .page();
long total = pageInfo.getTotal();
List<TUser> records = pageInfo.getList();

// 条件删除, 逻辑删除
// UPDATE t_user SET deleted = 1 WHERE username = ?
int cnt = this.query()
        .eq(TUser::getUsername, "张三")
        .delete();

// 条件删除,强行删除,无视逻辑删除字段
// DELETE FROM t_user WHERE username = ?
int cnt2 = this.query()
        .eq(TUser::getUsername, "张三")
        .deleteForce();

// 更新操作
// UPDATE t_user SET username = ?, add_time=now() WHERE id = ?
int update = TUser.query()
        .set(TUser::getUsername, "李四")
        .setExpression("add_time=now()")
        .eq(TUser::getId, 6)
        .update();

快速开始(springboot)

  • 新建一个springboot项目
  • pom.xml添加fastmybatis-spring-boot-starter
<dependency>
    <groupId>io.gitee.durcframework</groupId>
    <artifactId>fastmybatis-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

最新版本:maven

  • 增删改查例子

假设数据库有张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.save(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.update(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 LambdaService<TUser> {

}
  • TUserMapper.java
public interface TUserMapper extends BaseMapper<TUser> {

}

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

Mapper结构图

Lambda查询

List<TUser> list = mapper.query()
    .eq(TUser::getId, 1)
    .ge(TUser::getId, 1)
    .in(TUser::getId, Arrays.asList(1,2))
    .between(TUser::getId, 1, 2)
    .sql("id=1")
    .list();

// 查询部分字段
// SELECT id, username FROM t_user WHERE id = ?
List<TUser> tUsers1 = userLambdaService.query()
        // 只查询id, username两列
        .select(TUser::getId, TUser::getUsername)
        .eq(TUser::getId, 6)
        .list();

子条件查询示例:

// WHERE (id = ? OR id between ? and ?) AND ( money > ? OR state = ? )
List<TUser> list = Query.query(TUser.class)
    .andLambda(q -> q.eq(TUser::getId, 3).orBetween(TUser::getId, 4, 10))
    .andLambda(q -> q.gt(TUser::getMoney, 1).orEq(TUser::getState, 1))
    .list();

条件更新

int i = mapper.query()
    .set(TUser::getUsername, "王五")
    .setExpression("update_time=now()")
    .eq(TUser::getId, 6)
    .update(); // 执行跟新操作,返回影响行数
System.out.printlin("更新了" + i + "条数据");
// 对应SQL:UPDATE `t_user` SET username = ?, update_time=now()  WHERE id = ?

JPA查询

List<Student> users = mapper.findByLastnameAndFirstname("张", "三");
Assert.assertEquals(1, users.size());
users.forEach(System.out::println);


List<Student> users = mapper.findByAgeNotIn(Arrays.asList(30, 40));
Assert.assertEquals(1, users.size());
users.forEach(System.out::println);

List<Student> users = mapper.findByAgeOrderByLastnameDesc(40);
Assert.assertEquals(2, users.size());
users.forEach(System.out::println);

工程介绍

利用 code-gen 生成代码

相关文档

MIT License Copyright (c) 2019 tanghc Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

一个mybatis开发框架,其宗旨为:简单、快速、有效 展开 收起
Java 等 3 种语言
MIT
取消

发行版 (3)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/durcframework/fastmybatis.git
git@gitee.com:durcframework/fastmybatis.git
durcframework
fastmybatis
fastmybatis
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891