- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章FluentMybatis实现mybatis动态sql拼装和fluent api语法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
新建Java工程,设置maven依赖 。
新建maven工程,设置项目编译级别为Java8及以上,引入fluent mybatis依赖包.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<
dependencies
>
<!-- 引入fluent-mybatis 运行依赖包, scope为compile -->
<
dependency
>
<
groupId
>com.github.atool</
groupId
>
<
artifactId
>fluent-mybatis</
artifactId
>
<
version
>1.3.1</
version
>
</
dependency
>
<!-- 引入fluent-mybatis-processor, scope设置为provider 编译需要,运行时不需要 -->
<
dependency
>
<
groupId
>com.github.atool</
groupId
>
<
artifactId
>fluent-mybatis-processor</
artifactId
>
<
version
>1.3.1</
version
>
</
dependency
>
</
dependencies
>
|
1
2
3
4
5
6
7
8
9
10
11
12
|
create
schema
fluent_mybatis_tutorial;
create
table
hello_world
(
id
bigint
unsigned auto_increment
primary
key
,
say_hello
varchar
(100)
null
,
your_name
varchar
(100)
null
,
gmt_create datetime
DEFAULT
NULL
COMMENT
'创建时间'
,
gmt_modified datetime
DEFAULT
NULL
COMMENT
'更新时间'
,
is_deleted tinyint(2)
DEFAULT
0 COMMENT
'是否逻辑删除'
) ENGINE = InnoDB
CHARACTER
SET
= utf8 comment
'简单演示表'
;
|
创建数据库表对应的Entity类: HelloWorldEntity, 你只需要简单的做3个动作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@FluentMybatis
public
class
HelloWorldEntity
implements
IEntity {
private
Long id;
private
String sayHello;
private
String yourName;
private
Date gmtCreate;
private
Date gmtModified;
private
Boolean isDeleted;
// get, set, toString 方法
}
|
很简单吧,在这里,你即不需要配置任何mybatis xml文件, 也不需要写任何Mapper接口, 但你已经拥有了强大的增删改查的功能,并且是Fluent API,让我们写一个测试来见证一下Fluent Mybatis的魔法力量.
为了运行测试, 我们还需要进行JUnit和Spring Test相关配置.
数据源DataSource配置 mybatis的mapper扫描路径 mybatis的SqlSessionFactoryBean 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@ComponentScan
(basePackages =
"cn.org.atool.fluent.mybatis.demo1"
)
@MapperScan
(
"cn.org.atool.fluent.mybatis.demo1.entity.mapper"
)
@Configuration
public
class
HelloWorldConfig {
/**
* 设置dataSource属性
*
* @return
*/
@Bean
public
DataSource dataSource() {
BasicDataSource dataSource =
new
BasicDataSource();
dataSource.setDriverClassName(
"com.mysql.jdbc.Driver"
);
dataSource.setUrl(
"jdbc:mysql://localhost:3306/fluent_mybatis_tutorial?useUnicode=true&characterEncoding=utf8"
);
dataSource.setUsername(
"root"
);
dataSource.setPassword(
"password"
);
return
dataSource;
}
/**
* 定义mybatis的SqlSessionFactoryBean
*
* @param dataSource
* @return
*/
@Bean
public
SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
SqlSessionFactoryBean bean =
new
SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return
bean;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
@RunWith
(SpringJUnit4ClassRunner.
class
)
@ContextConfiguration
(classes = HelloWorldConfig.
class
)
public
class
HelloWorldTest {
/**
* fluent mybatis编译时生成的Mapper类
*/
@Autowired
HelloWorldMapper mapper;
@Test
public
void
testHelloWorld() {
/**
* 为了演示方便,先删除数据
*/
mapper.delete(mapper.query()
.where.id().eq(1L).end());
/**
* 插入数据
*/
HelloWorldEntity entity =
new
HelloWorldEntity();
entity.setId(1L);
entity.setSayHello(
"hello world"
);
entity.setYourName(
"fluent mybatis"
);
entity.setIsDeleted(
false
);
mapper.insert(entity);
/**
* 查询 id = 1 的数据
*/
HelloWorldEntity result1 = mapper.findOne(mapper.query()
.where.id().eq(1L).end());
/**
* 控制台直接打印出查询结果
*/
System.out.println(
"1. HelloWorldEntity:"
+ result1.toString());
/**
* 更新id = 1的记录
*/
mapper.updateBy(mapper.updater()
.update.sayHello().is(
"say hello, say hello!"
)
.set.yourName().is(
"fluent mybatis is powerful!"
).end()
.where.id().eq(1L).end()
);
/**
* 查询 id = 1 的数据
*/
HelloWorldEntity result2 = mapper.findOne(mapper.query()
.where.sayHello().like(
"hello"
)
.and.isDeleted().eq(
false
).end()
.limit(
1
)
);
/**
* 控制台直接打印出查询结果
*/
System.out.println(
"2. HelloWorldEntity:"
+ result2.toString());
}
}
|
执行Junit4测试方法,控制台输出 。
1. HelloWorldEntity:HelloWorldEntity{id=1, sayHello='hello world', yourName='fluent mybatis', gmtCreate=null, gmtModified=null, isDeleted=false} 2. HelloWorldEntity:HelloWorldEntity{id=1, sayHello='say hello, say hello!', yourName='fluent mybatis is powerful!', gmtCreate=null, gmtModified=null, isDeleted=false} 。
神奇吧! 我们再到数据库中查看一下结果 。
现在,我们已经通过一个简单例子演示了fluent mybatis的强大功能, 在进一步介绍fluent mybatis更强大功能前,我们揭示一下为啥我们只写了一个数据表对应的Entity类, 却拥有了一系列增删改查的数据库操作方法.
fluent mybatis根据Entity类上@FluentMybatis注解在编译时, 会在target目录class目录下自动编译生成一系列文件:
核心接口类, 使用时需要了解 。
Fluent Mybatis文档&示例 。
Fluent Mybatis源码, github 。
到此这篇关于FluentMybatis实现mybatis动态sql拼装和fluent api语法的文章就介绍到这了,更多相关FluentMybatis实现mybatis动态sql内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/tryternity/article/details/109062608 。
最后此篇关于FluentMybatis实现mybatis动态sql拼装和fluent api语法的文章就讲到这里了,如果你想了解更多关于FluentMybatis实现mybatis动态sql拼装和fluent api语法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在此处回答的另一个问题中,我发现了以下 JavaScript代码: function _dom_trackActiveElement(evt) { if (evt && evt.target)
if (A == 0) OR (B == 0) 怎么说? 最佳答案 只是为了讽刺: if (A === 0 || B === 0) 关于语法,我们在Stack Overflow上找到一个类似的问题:
var ret = [] ,xresult = document.evaluate(exp, rootEl, null, X
我一直在寻找一些类似于下例的 JavaScript。有人可以解释一下吗,因为我以前从未见过这样编写的 JavaScript。 “SomethingHere”和冒号代表什么?我习惯于看到函数 myFun
这是我的程序: delimiter // drop procedure if exists migContactToActor; create procedure migContactToActor(
我遇到了一个问题。我一直在使用 gcc 编译/汇编我的 C 代码一段时间,并且习惯了阅读 Intel 汇编语法。我在生成程序集文件时使用了 -masm=intel 标志。 但是最近因为公司迁移,拿到了
自上而下和自下而上语法有什么区别?举个例子就太好了。 最佳答案 首先,语法本身不是自上而下或自下而上的,解析器是(尽管有些语法可以被其中一个解析,但不能被另一个解析)。 从实践的角度来看,主要区别在于
我知道这是草率的代码,但它是: display dialog ("Start Screensaver. Please type: matrix, coffee, waffles, star, wate
这个问题已经有答案了: Giving name to a loop (6 个回答) 已关闭 8 年前。 我见过这个字符在 C# 中使用,就像 Java 中的扩展一样,但最近我在代码中发现了这个 loo
我正在尝试编写一个函数来检查字符串是否为回文,但我认为在使用字符串指针时存在一些错误。这段代码有什么问题? #include #include #define MAX 1000 int IsPalin
所以在this question我询问了一些 Javascript 是如何被压缩的。问题已得到解答,但以下片段让我非常困惑,以至于我不得不问另一个问题。在这里: for (Y = 0; $ = 'zx
假设我有一个接受这些参数的函数。 int create(Ptr * p,void * (*insert)(void *, void *)) { //return something later } 结
这个问题已经有答案了: Bitwise '&' operator (6 个回答) 已关闭 5 年前。 我在代码中找到了这个,但我从未遇到过像 & 这样的事情,仅 && if ((code & 1) =
我在处理继承类及其中的构造函数和方法的语法时遇到了问题。 我想实现一个类日期和一个子类 date_ISO,它们将按特定顺序设置给定的日、月、年,并通过一种方法将其写入字符串。我觉得我的基类日期工作正常
我正在尝试通过存储过程填充表,如下所示: SET @resultsCount = (SELECT COUNT(*) FROM tableA); SET @i = 0; WHILE @i THEN
谁能解释一下下面代码中的“<<”? mysql test<
刚刚开始学习 MySQL,这是一个菜鸟问题,也是我在 StackOverflow 上的第一个问题。 假设我有 12 个订单状态,我想从其中的 5 个中选择总计。我会使用: SELECT SUM(tot
我的编程背景是在学校学过一点Java。由于某些原因,JavaScript 语法往往让我感到困惑。下面的 JavaScript 代码是一种我不知道如何构成的语法模式: foo.ready = funct
我正在阅读 javascript 源代码,并且我以前没有编写过 javascript。我对它的一些语法感到困惑。 $(function () { window.onload=function
我什至不知道如何命名我想要的东西。那么让我举个例子来解释一下。 虽然火狐使用textContent,但其他浏览器支持innerText属性。顺便说一句,如果我使用了错误的术语,请纠正我。无论如何,到目
我是一名优秀的程序员,十分优秀!