你的位置:万赢体育-官网首页 > 关于我们 > 万赢棋牌官网版下载 Fluent Mybatis、原生Mybatis,、Mybatis Plus 大对比,哪个更好用?

万赢棋牌官网版下载 Fluent Mybatis、原生Mybatis,、Mybatis Plus 大对比,哪个更好用?

时间:2022-09-18 12:45 点击:149 次

万赢棋牌官网版下载 Fluent Mybatis、原生Mybatis,、Mybatis Plus 大对比,哪个更好用?

使用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来完了一番。

2

三者对比

使用fluent mybatis 来完了上头的功能

咱们不错看到fluent api的才能,以及IDE对代码的渲染效劳。

代码:https://gitee.com/fluent-mybatis/fluent-mybatis-docs/tree/master/spring-boot-demo/

3

换成mybatis原生完了效劳

1. 界说Mapper接口

public interface MyStudentScoreMapper {

List<Map<String, Object>> summaryScore(SummaryQuery paras);

}

2. 界说接口需要用到的参数实体 SummaryQuery

@Data

@Accessors(chain = true)

public class SummaryQuery {

private Integer schoolTerm;

private List<String> subjects;

private Integer score;

private Integer minCount;

}

3. 界说完了业务逻辑的mapper xml文献

<select id="summaryScore" resultType="map" parameterType="cn.org.fluent.mybatis.springboot.demo.mapper.SummaryQuery">

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 >= #{schoolTerm}

and subject in

<foreach collection="subjects" item="item" open="(" close=")" separator=",关于我们">

#{item}

</foreach>

and score >= #{score}

and is_deleted = 0

group by school_term, subject

having count(score) > #{minCount}

order by school_term, subject

</select>

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<String, Object>> summary = mapper.summaryScore(paras);

System.out.println(summary);

}

}

总之,成功使用mybatis,完了身手依然高出的繁琐,效劳太低。那换成mybatis plus的效劳怎样呢?

4

换成mybatis plus完了效劳

mybatis plus的完了比mybatis会简短比拟多,完了效劳如下:

如红框圈出的,写mybatis plus完了用到了比拟多字符串的硬编码(不错用Entity的get lambda次序部分代替字符串编码)。字符串的硬编码,会给诱骗同学变成不小的使用门槛,个人觉的主要有2点:

1. 字段称号的纪念和敲码真贵

2. Entity属性随从数据库字段发生变更后的开动时失误

其他框架,比如TkMybatis在封装和易用性上比mybatis plus要弱,就不再比拟了。

生成代码编码比拟

5

fluent mybatis生成代码修复

public class AppEntityGenerator {

static final String url = "jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8";

public static void main(String[] args) {

FileGenerator.build(Abc.class);

}

@Tables(

/** 数据库贯穿信息 **/

url = url, username = "root", password = "password",

/** Entity类parent package旅途 **/

basePack = "cn.org.fluent.mybatis.springboot.demo",

/** Entity代码源目次 **/

srcDir = "spring-boot-demo/src/main/java",

/** Dao代码源目次 **/

daoDir = "spring-boot-demo/src/main/java",

/** 淌若表界说纪录创建,纪录修改,逻辑删除字段 **/

gmtCreated = "gmt_create", gmtModified = "gmt_modified", logicDeleted = "is_deleted",

/** 需要生成文献的表 ( 表称号:对应的Entity称号 ) **/

tables = @Table(value = {"student_score"})

)

static class Abc {

}

}

mybatis plus代码生成修复

public class CodeGenerator {

static String dbUrl = "jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8";

@Test

public void generateCode() {

GlobalConfig config = new GlobalConfig();

DataSourceConfig dataSourceConfig = new DataSourceConfig();

dataSourceConfig.setDbType(DbType.MYSQL)

.setUrl(dbUrl)

.setUsername("root")

.setPassword("password")

.setDriverName(Driver.class.getName());

StrategyConfig strategyConfig = new StrategyConfig();

strategyConfig

.setCapitalMode(true)

.setEntityLombokModel(false)

.setNaming(NamingStrategy.underline_to_camel)

.setColumnNaming(NamingStrategy.underline_to_camel)

.setEntityTableFieldAnnotationEnable(true)

.setFieldPrefix(new String[]{"test_"})

.setInclude(new String[]{"student_score"})

.setLogicDeleteFieldName("is_deleted")

.setTableFillList(Arrays.asList(

new TableFill("gmt_create", FieldFill.INSERT),

new TableFill("gmt_modified", FieldFill.INSERT_UPDATE)));

config

.setActiveRecord(false)

.setIdType(IdType.AUTO)

.setOutputDir(System.getProperty("user.dir") + "/src/main/java/")

.setFileOverride(true);

new AutoGenerator().setGlobalConfig(config)

.setDataSource(dataSourceConfig)

.setStrategy(strategyConfig)

.setPackageInfo(

new PackageConfig()

.setParent("com.mp.demo")

.setController("controller")

.setEntity("entity")

《双点校园》的销量方面,虽然PC数字版是销量的大头,不过任天堂Switch版才是实体版销量冠军,占据了实体版销量的64%,因为首发进入XGP的关系,所以Xbox版本的销量最低。

手法是上个版本的手法没有变,不知道手法的小伙伴可以去精华帖搜一下大佬的贴子,属性还是按照上版本的属性。

).execute();

}

}

看完3个框架对消亡个功能点的完了, 诸君看官确定会有我方的判断,笔者这里也精致了一份比拟。

万赢棋牌官网版下载

发布于:北京市声明:该文看法仅代表作家自身,搜狐号系信息发布平台,搜狐仅提供信息存储空间干事。
回到顶部
服务热线
官方网站:www.irvinestowndevelopment.com
工作时间:周一至周六(09:00-18:00)
联系我们
QQ:227407249
邮箱:d12072@qq.com
地址:北京关于我们国际企业中心2219号
关注公众号

Powered by 万赢体育-官网首页 RSS地图 HTML地图


万赢体育-官网首页-万赢棋牌官网版下载 Fluent Mybatis、原生Mybatis,、Mybatis Plus 大对比,哪个更好用?