mybatis 動態sql表示式相關應用

2021-09-08 15:00:35 字數 2397 閱讀 4069

一、mybatis 表示式簡介

對於mybatis3 ,提供了一種動態sql的方式。通過動態sql我們可以直接在mybatis 的xm對映檔案中直接通過條件判斷的方式進行查詢新增的拼接。mybatis 專案位址為  。mybatis 3 提供如下條件判斷:

if語句如下:

<

select

id="findactiveblogwithtitlelike"

resulttype

="blog"

>

select * from blog

where state = 『active』

<

if test

="title != null"

>

and title like #

if>

select

>

choose語句如下:

<

select

id="findactivebloglike"

resulttype

="blog"

>

select * from blog where state = 『active』

<

choose

>

<

when

test

="title != null"

>

and title like #

when

>

<

when

test

="author != null and author.name != null"

>

and author_name like #

when

>

<

otherwise

>

and featured = 1

otherwise

>

choose

>

select

>

foreach語句如下

<

select

id="selectpostin"

resulttype

="domain.blog.post"

>

select *

from post p

where id in

<

foreach

item

="item"

index

="index"

collection

="list"

open

="("

separator

=","

close

=")"

>#

foreach

>

select

>

二、相關技巧

對於變數可以使用# 方式進行拼接。mybatis 也支援$ 的方式。這兩種方式的區別如下:

#  表示讀取param引數的值,並將該值做字段的的值進行比較;

$ 表示讀取param的值,並將param值當成資料庫表中的某個字段。

在資料量大的時候,我們會使用維度表。將統計結果定期統計到維度表,展示的時候,直接讀取維度表的資料。

維度表結構如下:

drop

table

ifexists

`wd`;

create

table

`wd` (

`id`

varchar(64) not

null

, `xl`

varchar(2) not

null

, `xzqh`

varchar(2) not

null

, `nld`

varchar(2) not

null

, `total`

int(11) not

null,

primary

key(`id`)

) engine

=innodb default charset=utf8;

統計的時候,需要根據xl(學歷),xzqh(行政區劃),nld(年齡段)進行分組查詢。sql如下:

select $, sum

(total)

from

wdgroup

by $

parm 傳的值可以是 「xl」、「xzqh」,「nld」 這樣通過乙個sql就可完成這個功能。只需要傳遞不同的引數,從而完成對不同欄位的分組統計。這中凡是在使用圖表的時候進行分組統計,可以用的到。

動態LINQ(Lambda表示式)

1.準備資料實體 public class data public int count 建立測試資料 public static listgettestdata data account1 new data data account2 new data data account3 new data ...

SQL連線表示式

為驗證不同連線表示式的區別,先建立下面的表 1 inner join 對錶a和表b取笛卡爾積 內連線,inner可以省略 select students.teacher name,course id from students join teachers 結果如下 2 natural inner j...

Mybatis常用的OGNL表示式

1 e1 or e2 或 2 e1 and e2 且 3 e1 e2 或e1 eq e2 相等 4 e1 e2 或 e1 neq e2 不等 5 e1 lt e2 小於 6 e1 lte e2 小於等於 7 e1 gt e2 大於 8 e1 gte e2 大於等於 9 e1 e2 加 e1 e2 減...