快速了解这是什么:
全新的 ByExample 方法
List<Employee> employees = mapper.selectByExample()
.where(id, isLessThan(10), and(employed, isEqualTo("foo")))
.or(occupation, isLike("b%"))
.orderBy(id.descending())
.build()
.execute();
// where (id < ? and employed = ?) or occupation like ? order by id DESC
可构造任意 SQL
SelectStatementProvider selectStatement = select(id, firstName, lastName, birthDate, employed, occupation)
.from(employee)
.where(firstName, isEqualTo("Bob"), or(firstName, isEqualTo("Alice")))
.build()
.render(RenderingStrategy.MYBATIS3);
List<Employee> employees = mapper.selectMany(selectStatement);
这是一个新库的说,至少:
需要额外依赖 mybatis-dynamic-sql
<dependency>
<groupId>org.mybatis.dynamic-sql</groupId>
<artifactId>mybatis-dynamic-sql</artifactId>
<version>1.0.0</version>
</dependency>
Java 8 及以上
MyBatis 3.4.2 及以上
MyBatis Generator (>= 1.3.6) 也已经提供支持,只需要将 context 的 targetRuntime 属性更改为 MyBatis3DynamicSQL 即可生成新的动态 SQL。
<generatorConfiguration>
...
<context ... targetRuntime="MyBatis3DynamicSQL" ...>
...
</context>
</generatorConfiguration>
该模式下不再生成 XML,不再生成 Example
类。文档里也推荐:join
操作要用到的 resultMap
应该是 XML 文件中的唯一元素。
话说个人还是挺偏好 XML 的 ╮( ̄▽ ̄)╭ ,不知道各位老司机怎么看?
写了一篇文章简单介绍一下基本的使用 Mybatis Dynamic SQL - 重新定义 Mybatis 动态 SQL (〃ノωノ)
1
Cbdy 2018-02-07 21:05:28 +08:00 via Android 1
这不是。。jooq 吗
|
2
xiaoyangsa 2018-02-07 21:30:05 +08:00
咋整,用了国产的了~~
复杂的宁愿丢 xml 里。简单的这样搞搞差不多 |
3
nita22 2018-02-07 21:36:14 +08:00
XML 里面直接写 SQL 语句才是最直观的吧,用这个动态 SQL 反而使得 SQL 语句跟业务代码糅杂起来了
|
4
jorneyr 2018-02-07 21:36:33 +08:00
写了这么多,有 SQL 清晰么
|
5
l00t 2018-02-07 21:43:14 +08:00 via Android
改成这样有什么好处吗?
|
6
iyaozhen 2018-02-07 22:04:09 +08:00 via Android
一直不喜欢.where 这种写法,业务稍微复杂点就懵逼了。一个多月不写就忘了。还是 sql 直接
|
7
kran 2018-02-07 22:04:22 +08:00 via iPhone
好处是类型安全吧
|
8
Rickkkkkkk 2018-02-07 22:13:14 +08:00
sql 还绑在代码里不恶心吗
xml 多简洁 |
9
lonenol 2018-02-07 23:00:27 +08:00
...那还不如用 JPA...
|
10
yejinmo 2018-02-07 23:04:50 +08:00
折腾来折腾去本质不还是 sql 么。。真是搞不懂非要简单问题复杂化
|
11
lhx2008 2018-02-07 23:15:55 +08:00 via Android
挺好的,但是关联查询,自动装配好像都没有
|
12
iyangyuan 2018-02-08 08:54:50 +08:00 via iPhone
这样不仅损失性能,也增加了复杂 sql 维护难度,又徒增了学习成本
|
13
NullException 2018-02-08 10:06:26 +08:00
@iyangyuan 看到他那种用法让我想起 myBatis Plus,写写简单的 sql 还可以,复杂的还是自己来
|
14
CtrlSpace 2018-02-08 10:26:30 +08:00
Android 转 Java 的觉得,xml 真是很难看,不如代码。
|
15
CtrlSpace 2018-02-08 10:30:27 +08:00
喜欢 xml 的只是习惯了 xml,对于没接触过的人来说,代码(或许)是最舒服的。
|
16
bobuick 2018-02-08 11:13:34 +08:00
我猜,因为喜欢封装。
|
17
itll 2018-02-08 11:35:35 +08:00
就是不习惯 jpa 才用 Mybatis,还是直接 sql 方便
|
18
0Kelvin 2018-02-08 14:36:08 +08:00
emmm. Java 的一套怎么感觉在慢慢的向 C#靠近呢。
|
19
olOwOlo OP (〃ノωノ) 感觉不怎么受欢迎的样子呢~~
|
21
olOwOlo OP @lhx2008 #11 关联查询有的啊。自动装配是指依赖注入么,这个跟以前的 mapper 没啥区别啊,只不过增加了一种构造 SQL 的方法罢了
|
23
xiangR 2018-02-08 16:42:23 +08:00
有的时候调试 sql 语句,直接把 xml 上的东西复制到 navicat 中,运行查看结果。
写在代码里面,好像只能使用启动工程的形式调试了。 而且对于大 sql,用这种方式,简直了... |
24
kzzhr 2018-02-18 15:07:11 +08:00
正在造轮子: https://github.com/Kretech/Loulan#quick-start
不过更强调复杂查询下的查询复用 |
25
LeeSeoung 2018-02-22 16:03:08 +08:00
- -不如 xml 写 sql 来的直接
|