- 授权协议: Apache
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: https://gitee.com/limeng32/mybatis.flying
- 软件文档: http://flying-doc.limeng32.com/
软件介绍
flying 是一个可以极大增加 mybatis 开发速度的插件组,它提供了一种全新的操作数据的方式,希望能对您有所帮助。
众所周知,mybatis 虽然易于上手,但放到互联网环境下使用时,不可避免的要面对诸如‘’一级缓存存在脏数据‘’、‘’需要写大量明文 SQL 语句‘’等问题。对于这些问题 mybatis 的开发团队选择了一种谦逊的方式,他们开放 mybatis 接口,允许用户开发插件,按自己的方式来解决这些问题。于是,一切 ORM 领域相关的问题在 mybatis 上通过插件都有了解决方案。
flying 主要特点:
以前我们在 mapper.xml 中要写很复杂的 sql 语句,但现在在 mapper.xml 中只需这样:
<select id="select" resultMap="result">
flying#{?}:select
</select>
<select id="selectOne" resultMap="result">
flying:selectOne
</select>
<insert id="insert">
flying:insert
</insert>
<update id="update">
flying:update
</update>
<delete id="delete">
flying:delete
</delete>
再在您的实体类上加上这样一些标注:
package myPackage;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name = "account")
public class Account {
@Id
@Column
private Integer id;
@Column
private java.lang.String name;
@Column
private Integer age;
/* 省略 getter 和 setter */
}
flying 就完全明白您的数据结构和您想做的事情了。 接下来您增删改查这个实体就会变得非常简单:
/* 新增 */
Account newAccount = new Account();
newAccount.setName("ann");
newAccount.setAge(18);
accountService.insert(newAccount);
/* 按主键查询 */
Account account = accountService.select(newAccount.getId());
/* 按姓名查询,这里忽略了年龄 */
Account accountC1 = new Account();
accountC1.setName("ann");
Account account1 = accountService.selectOne(accountC1);
/* account1 和 account 代表相同的业务数据 */
/* 按年龄查询,这里忽略了姓名 */
Account accountC2 = new Account();
accountC2.setAge(18);
Account account2 = accountService.selectOne(accountC2);
/* account2 和 account 代表相同的业务数据 */
/* 按姓名和年龄查询 */
Account accountC3 = new Account();
accountC3.setName("ann");
accountC3.setAge(18);
Account account3 = accountService.selectOne(accountC3);
/* account3 和 account 代表相同的业务数据 */
/* 修改 */
account.setName("bob");
accountService.update(newAccount);
/* 按主键删除 */
accountService.delete(newAccount);
由于 flying 掌握了您全部的数据结构和实体关系,所以操作数据变得非常简单,您再也不需要定义 “getAccountById、getAccountByName、getAccountByAge” 这样重复性强的方法了,由此带来更大的好处是您的 service 层只需要关注事务方面的逻辑即可,它从低级代码中完全解放了出来。以上只是 flying 功能的冰山一角,其它的功能如多表联查、分页、乐观锁、跨数据源查询、二级缓存等 flying 都有简单的解决方案,您可以在 http://flying-doc.limeng32.com 中进行查看。
flying 特点总结如下:
- 数据操作入参和返回类型都是自定义的实体类,完全 no sql 杜绝各种‘’手滑‘’,项目可随意重构。
-
支持跨表操作和跨数据源操作。
-
非侵占工作机制,可以和您已有的 mybatis 方法协同工作。
-
加入了优化过的缓存插件,可以对多数据源环境下 flying 方法和传统 mybatis 方法同时进行缓存管理。
-
可以自定义主键生成器,全面支持或逻辑查询。(初雪版新增特性)
-
可以在 flying 语句中指定查询的数据库和数据源,达到高性能跨库查询。(阳春版新增特性)
flying 获取方式:
flying 的 maven 坐标为:
<groupId>com.github.limeng32</groupId>
<artifactId>mybatis.flying</artifactId>
<version>0.9.4</version>
mybatis 版本与 flying 最新版本 初雪 的对应关系见下:
| mybatis 版本 | flying-初雪 | flying-阳春 |
|---|---|---|
| 3.3.0、3.3.1 | 0.8.3 | 不再支持 |
| 3.4.0、3.4.1、3.4.2、3.4.3、3.4.4、3.4.5、3.4.6 | 0.9.3 | 0.9.4 |
之所以采用分版本发布的方式是因为我们对 mybatis 每个版本的用户都认真负责,力求使您得到 flying 最大的好处。
flying 代码示例:
我们还为您提供了一个快速上手的示例:
更多内容请您参见软件文档 http://flying-doc.limeng32.com。
flying-阳春 新增内容:
- flying 语句中加入指定查询数据库的功能,由此可以实现高效率跨数据库查询。
- @FieldMapperAnnotation 和 @ConditionMapperAnnotation 增加了 customTypeHandler 属性,其具有最高优先级,由此可以实现跨数据库“或逻辑”查询。
flying-初雪 新增内容:
-
自定义主键生成器,包括 flying 内置和完全自定义两种形式。
-
全面支持或逻辑查询,可以用在普通查询和跨表查询中。
-
@QueryMapperAnnotation 现在可以省略,只要您的某个类既继承实体 pojo 又实现 Conditionable 接口 flying 就可以判断出它是相关 pojo 的条件类。
0.9.2 新增内容:
- 兼容 JPA 中的 @Column、@Id、@Table 标签,这些标签可以和 @FieldMapperAnnotation、@TableMapperAnnotation 协同使用,优先级从高到低为:@Id、@FieldMapperAnnotation 和 @TableMapperAnnotation、@Column 和 @Table。
-
现在 ignoreTag 对 insert、update、updatePersistent 也会起作用。如果 @Column 中设置 insertable = false 和 updateable = false,会在新增和修改时起到永久性忽略的作用。
Masterminds of Programming
Federico Biancuzzi、Chromatic / O'Reilly Media / 2009-03-27 / USD 39.99
Description Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. Think along with Adin D. Falkoff (APL), Jame......一起来看看 《Masterminds of Programming》 这本书的介绍吧!
