使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。
不再需要在Dao中组装查询或更新 *** 作,在xml或mapper中再组装参数。
那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?
需求场景设置
我们通过一个比较典型的业务需求来具体实现和对比下,假如有学生成绩表结构如下:
create table `student_score`
(
id bigint auto_increment comment '主键ID' primary key,
student_id bigint not null comment '学号',
gender_man tinyint default 0 not null comment '性别, 0:女1:男',
school_term int null comment '学期',
subject varchar(30) null comment '学科',
score int null comment '成绩',
gmt_create datetime not null comment '记录创建时间',
gmt_modified datetime not null comment '记录最后修改时间',
is_deleted tinyint default 0 not null comment '逻辑删除标识'
) engine = InnoDB default charset=utf8
现在有需求:
统计2000年三门学科('英语', '数学', '语文')及格分数按学期,学科统计最低分,最高分和平均分, 且样本数需要大于1条,统计结果按学期和学科排序
我们可以写SQL语句如下
select school_term,
subject,
count(score) as count,
min(score) as min_score,
max(score) as max_score,
avg(score) as max_score
from student_score
where school_term >= 2000
and subject in ('英语', '数学', '语文')
and score >= 60
and is_deleted = 0
group by school_term, subject
having count(score) >1
order by school_term, subject
那上面的需求,分别用fluent mybatis, 原生mybatis 和 Mybatis plus来实现一番。
三者实现对比
使用fluent mybatis 来实现上面的功能
图片
具体代码:
https://gitee.com/fluent-mybatis/fluent-mybatis-docs/tree/master/spring-boot-demo/
我们可以看到fluent api的能力,以及IDE对代码的渲染效果。
换成mybatis原生实现效果
1.定义Mapper接口
public interface MyStudentScoreMapper {
List<map >summaryScore(SummaryQuery paras)</map
}
2.定义接口需要用到的参数实体 SummaryQuery
@Data
@Accessors(chain = true)
public class SummaryQuery {
private Integer schoolTerm
private List subjects
private Integer score
private Integer minCount
}
3.定义实现业务逻辑的mapper xml文件
select school_term,subject,count(score) as count,min(score) as min_score,max(score) as max_score,avg(score) as max_scorefrom student_scorewhere school_term >= #{schoolTerm}and subject in#{item}and score >= #{score}and is_deleted = 0group by school_term, subjecthaving count(score) >#{minCount}order by school_term, subject
4.实现业务接口(这里是测试类, 实际应用中应该对应Dao类)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = QuickStartApplication.class)
public class MybatisDemo {
@Autowired
private MyStudentScoreMapper mapper
@Test
public void mybatis_demo() {
// 构造查询参数
SummaryQuery paras = new SummaryQuery()
.setSchoolTerm(2000)
.setSubjects(Arrays.asList("英语", "数学", "语文"))
.setScore(60)
.setMinCount(1)
List<map >summary = mapper.summaryScore(paras)</map
System.out.println(summary)
}
}
总之,直接使用mybatis,实现步骤还是相当的繁琐,效率太低。那换成mybatis plus的效果怎样呢?
下一篇 阿里开源的 ORM 框架!它是否能抢得过MybatisPlus市场?(下)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)