JAVA:Fastmybatis 简化开发框架

1、简介

fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效。
零配置快速上手
无需编写xml文件即可完成CRUD操作
支持mysql,sqlserver,oracle,postgresql,sqlite
支持自定义sql,sql语句可写在注解中或xml中
支持与spring-boot集成,依赖starter即可
轻量级,无侵入性,是官方mybatis的一种扩展
文档介绍地址:https://durcframework.gitee.io/fastmybatis/#/?t=1670849880047
GitHub地址:https://gitee.com/durcframework/fastmybatis

2、Maven引用

新建一个springboot项目,在pom.xml添加fastmybatis-spring-boot-starter

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

3、Mapper详解

fastmybatis中的Mapper提供了一系列增删改查的方法,满足日常所需,完整方法说明如下表所示:

方法 说明
E getByColumn(String column, Object value) 根据字段查询一条记录
E getById(I id) 根据主键查询
E getByQuery(Query query) 根据条件查找单条记录
E getBySpecifiedColumns(List columns, Query query) 查询单条数据并返回指定字段
T getBySpecifiedColumns(List columns, Query query, Class clazz) 查询单条数据返回指定字段并转换到指定类中
T getColumnValue(String column, Query query, Class clazz) 查询某一行某个字段值
long getCount(Query query) 查询总记录数
List list(Query query) 查询结果集
List listByArray(String column, Object[] values) 根据多个字段值查询结果集
List listByCollection(String column, Collection<?> values) 根据字段多个值查询结果集
List listByColumn(String column, Object value) 根据字段查询结果集
List listByIds(Collection ids) 根据多个主键查询
List listBySpecifiedColumns(List columns, Query query) 查询返回指定的列,返回实体类集合
List listBySpecifiedColumns(List columns, Query query, Class clazz) 查询返回指定的列,返指定类集合
List listColumnValues(String column, Query query, Class clazz) 查询指定列,返指定列集合
PageInfo page(Query query) 分页查询
PageInfo page(Query query, Function<E, R> converter) 查询结果集,并转换结果集中的记录,转换处理每一行
PageInfo page(Query query, Supplier target, Consumer format) 查询结果集,并转换结果集中的记录,并对记录进行额外处理
PageInfo page(Query query, Supplier target) 查询结果集,并转换结果集中的记录
PageInfo pageAndConvert(Query query, Function<List, List> converter) 查询结果集,并转换结果集中的记录,转换处理list
PageInfo pageBySpecifiedColumns(List columns, Query query, Class clazz) 查询返回指定的列,返回分页数据
PageEasyui pageEasyui(Query query) 查询返回easyui结果集
PageEasyui pageEasyui(Query query, Class clazz) 查询返回easyui结果集,并转换结果集中的记录
E forceById(I id) 根据主键查询强制查询,忽略逻辑删除字段
int save(E entity) 保存,保存所有字段
int saveBatch(Collection entitys) 批量保存
int saveIgnoreNull(E entity) 保存,忽略null字段
int saveMultiSet(Collection entitys) 批量保存,兼容更多的数据库版本,忽略重复行,此方式采用union的方式批量insert
int saveOrUpdate(E entity) 保存或修改,当数据库存在记录执行UPDATE,否则执行INSERT
int saveOrUpdateIgnoreNull(E entity) 保存或修改,忽略null字段,当数据库存在记录执行UPDATE,否则执行INSERT
int saveUnique(Collection entitys) 批量保存,去除重复行,通过对象是否相对判断重复数据,实体类需要实现equals方法
int saveUnique(Collection entitys, Comparator comparator) 批量保存,去除重复行,指定比较器判断
int updateByQuery(E entity, Query query) 根据条件更新
int updateIgnoreNull(E entity) 更新,忽略null字段
int updateByMap(Map<String, Object> map, Query query) 根据条件更新,map中的数据转化成update语句set部分,key为数据库字段名
int delete(E entity) 删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByColumn(String column, Object value) 根据指定字段值删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteById(I id) 根据id删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByIds(Collection ids) 根据多个主键id删除,在有逻辑删除字段的情况下,做UPDATE操作
int deleteByQuery(Query query) 根据条件删除,在有逻辑删除字段的情况下,做UPDATE操作
int forceDelete(E entity) 强制删除(底层根据id删除),忽略逻辑删除字段,执行DELETE语句
int forceDeleteById(I id) 根据id强制删除,忽略逻辑删除字段,执行DELETE语句
int forceDeleteByQuery(Query query) 根据条件强制删除,忽略逻辑删除字段,执行DELETE语句
Map<K, E> getMap(Query query, Function<E, K> keyGetter) 查询结果并转换成Map对象
<T extends TreeNode<T, I>> List listTreeData(Query query, I rootId) 查询列表并将结果转换成树结构

4、Mapper

创建一个mapper接口,继承CrudMapper,可以获取mapper所有支持的接口函数。

public interface TTagMapper extends CrudMapper<Tag/*实体类*/,Integer/*主键类型*/> {
}

也可以通过自定义SQL,来实现mapper接口

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

    @Update("update blog_tag set username = #{username} where id = #{id}")
    int updateById(@Param("id") int id, @Param("username") String username);
}

指定外部模板,默认template-classpath的值为/fastmybatis/tpl/当前路径,也可以通过Application配置来指定具体的路径:

mybatis:
  ignoreLogicDeleteWithAssociatio: true
  mapper-locations: classpath*:/mapper/**/*.xml

5、Service

创建一个Service实现IService接口服务,添加@Service注解

@Service
public class TagService implements IService<Tag/*实体类*/,Integer/*主键类型*/> {
}

6、实体类

实体类注解,通过@Table来指定表名,指定主键。

@Data
@Table(name="blog_tag", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
public class Tag implements Serializable {
    private static final long serialVersionUID = 1L;

    private  Integer id;

    /**
     * 标题
     */
    private String name;
    /**
     * 标题icon
     */
    private String iconUrl;

    /**
     * create_time
     */
    private Date createTime;

    /**
     * update_time
     */
    private Date updateTime;
}

6.1 主键自增

适用于:mysql自增主键、sqlserver自增主键、oracle(触发器)

数据库主键设置自增后,这样设置:

// strategy = PkStrategy.INCREMENT 自增策略
@Table(name = "t_user", pk = @Pk(name = "id", strategy = PkStrategy.INCREMENT))
public class TUser {
}

这样在做insert后,id会自动填充自增后的值。

扫描二维码关注公众号,回复: 16209963 查看本文章

6.2 主键使用sequence(oracle)

适用于oracle表序列

– 创建表sequence,名字为t_user_seq
create sequence t_user_seq start with 1 increment by 1;
使用如下注解:

@Table(name = "t_user", pk = @Pk(name = "id", sequenceName = "t_user_seq"))
public class TUser {
}

6.3 主键使用uuid

数据库主键是varchar类型,insert后自动填充uuid,并返回。

@Table(name = "log", pk = @Pk(name = "log_id", strategy = PkStrategy.UUID/*配置主键UUID*/))
public class Log {
    private String logId;
}

这样在做insert后,id字段会自动填充uuid。

注:uuid的生成方式是调用数据库底层实现,如MySql的实现方式为: SELECT UUID()

7、Controller

简化当前Service编写代码,同时通过Query来构建多种查询条件,通过@Condition注解来生成各种查询条件。

@RestController
@RequestMapping("blog")
public class TagController {
    @Autowired
    private TagService tagService;

    /**
     * 分页查询
     * @param param
     * @return
     */
    @GetMapping("/tag/page")
    public R page(TagParam param) {
        Query query = param.toQuery();

        PageInfo<Tag> pageInfo = tagService.page(query);
        return R.ok().put("pageInfo", pageInfo);
    }

    /**
     * 保存
     * @param tag
     * @return
     */
    @GetMapping("/tag/save")
    public R save(Tag tag) {
        tagService.saveIgnoreNull(tag);
        return new R().ok().put("id", tag.getId());
    }


    /**
     * 更新
     * @param tag
     * @return
     */
    @GetMapping("/user/update")
    public R update(Tag tag) {
        tagService.updateIgnoreNull(tag);
        return R.ok();
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @GetMapping("/tag/delete")
    public R delete(Integer id) {
        tagService.deleteById(id);
        return R.ok();
    }
}

分页查询是经常使用的,Fastmybatis 自带了分页查询,可以通过param请求参数来定义传输分页和返回PageInfo包含分页的数据。

@Data
public class TagParam extends PageParam {
    /**
     * 标题
     */
    private String name;
}

在这里插入图片描述
还有更多的应用等着我们去发掘。。。。。。。。

猜你喜欢

转载自blog.csdn.net/lishangke/article/details/129613214