首页 > 其他分享 >简单、快速、有效的mybatis开发框架:Fast MyBatis

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

时间:2022-12-08 20:02:32浏览次数:34  
标签:return param mybatis Fast Query MyBatis query Param user


开源地址: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); // 该条件下总记录数


标签:return,param,mybatis,Fast,Query,MyBatis,query,Param,user
From: https://blog.51cto.com/u_15906694/5923310

相关文章

  • day46 6-14 mybatis#{}与$的区别、一二级缓存 & 6-15 事务管理 & SSM三大框架简单回顾
    mybatis——OGNL表达式(mapperxml文件内if标签内)OGNL全称Object-GraphNavigationLanguage,是Java中的一个开源的表达式语言,用于访问对象数据。也是mybatis实现动态......
  • 整合MyBatis-Plus和Druid
         ......
  • MybatisPlus实现高效的多对多查询
    1、前置事先声明一下代码中蕴含了大量的Stream和Lambda表达式操作,还不清楚的小伙伴可以去参考一下Java8新特性Stream流,而却我是用的是MybatisPlus这方面不清楚的也可以参......
  • Mybatis自定义拦截器实现自动记录操作人信息
    1.前言Mybatis有四大核心对象,分别是Executor,StatementHandler,ParamterHandler,ResultSetHandler。在很多时候,对表中的数据都需要记录插入时间,修改时间,插入人和修改人,若每......
  • mybatis中的事务管理
    mybatis中的事务控制mybatis中执行sql是从SqlSession开始的,SqlSession中提供了各种操作数据库的方法SqlSession中持有执行器Executor对象,通过执行器来执行sqlmybatis......
  • 【开源项目】震惊JDBC查询比MyBatis查询慢
    震惊JDBC查询比MyBatis查询快?文章编写起始原因,在编写项目的时候碰到一个深坑,JDBC获取5000条数据,居然耗时261s,MyBatis同样的操作,耗时12s左右,震惊。看到这里下巴都快掉下来......
  • mybatis-plus基础知识-实体类
    实体类(数据库表的映射类),先上图:@TableId:指定数据库表的主键,包含type和value两种属性,value指定列名,通过type指定主键策略,目前我用到的版本支持五种主键策略IdType.AUTO......
  • 黑马程序员2022新版SSM框架Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实
    Spring为什么要学Spring?1.专业角度:简化开发,降低企业级开发的复杂性框架整合,高效整合其他计算,提高企业级应用开发与运行效率2.学什么?简化开发IOCAOP事务......
  • 5、mybatis连接sqlserver数据库
    1          在idea的maven项目下,使用mybatis连接sqlserver数据库 2          下载Sqljdbc4.jar包2.1         地址:​​http://mvnrepository......
  • 4、整合mybatis-spring-springMvc
    1          前面我们整合了spring和mybaits,现在我们开始在前一步的基础上将springmvc整合在一起 2          先在Modules(项目模块)中新增一个web服务(......