mybatis 動態SQL,sql裡使的各種標籤

2021-08-25 14:15:24 字數 4160 閱讀 3915

<?xml version="1.0" encoding="utf-8"?>

id="getempsbyconditionif"

resulttype="com.mybatis.bean.employee">

select * from tbl_employee

test="id!=null">

id=#

if>

test="lastname!=null && lastname!=""">

and last_name like #

if>

test="email!=null and email.trim()!=""">

and email=#

if>

test="gender==0 or gender==1">

and gender=#

if>

where>

select>

id="getempsbyconditiontrim"

resulttype="com.mybatis.bean.employee">

select * from tbl_employee

prefix="where"

suffixoverrides="and">

test="id!=null">

id=# and

if>

test="lastname!=null && lastname!=""">

last_name like # and

if>

test="email!=null and email.trim()!=""">

email=# and

if>

test="gender==0 or gender==1">

gender=#

if>

trim>

select>

此標籤使的情況並不是很多

做乙個選擇查詢,如果引數帶了id便用id進行查詢,如果帶了lastname便用lastname進行查詢,即只進入乙個分支。如下例:

id="getempsbyconditionchoose"

resultype="com.mybatis.bean.employee">

select * from tbl_employee

test="id != null">

id=#

when>

test="lastname!=null">

last_name like #

when>

test="email!=null">

email = #

when>

gender = 0

otherwise>

choose>

where>

select>

set標籤同where標籤有一樣的功能, set標籤可以去掉多餘的逗號,如果不用標籤,只有set那可以會應該某些條件沒有傳值,而有多餘的逗號,從而導致報錯。當然也可以使用上述的trim自定義字串,如下例:

id="updemp">

update tbl_employee

test="lastname!=null">

last_name=#,

if>

test="email!=null">

email=#,

if>

test="gender!=null">

gender=#

if>

set>

update>

update tbl_employee

prefix="set"

suffixoverrides=",">

test="lastname!=null">

last_name=#,

if>

test="email!=null">

email=#,

if>

test="gender!=null">

gender=#

if>

trim>

where id=#

update>

id="getempsbyconditionforeach"

resulttype="com.mybatis.bean.employee">

select * from tbl_employee

collection="ids"

item="item_id"

separator=","

open="where id in("

close=")">

#foreach>

select>

使用foreach可以完成批量插入,其批量插入有兩種方法如下:

1

id="addemps">

insert into tbl_employee(last_name,email, gender,d_id)

values

collection="emps"

item="emp"

separator=",">

(#,#,#,#)

foreach>

insert>

2.

id="addemps">

collection="emps"

item="emp"

separator=";">

insert into tbl_employee(last_name,email,gender,d_id)

values(#,#,#,#)

foreach>

insert>

注:資料庫配置如 allowmultiqueries可如下:

jdbc.driver=com.mysql.jdbc.driver

jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowmultiqueries=true

jdbc.username=root

jdbc.password=123456

但是oracle資料庫的批量儲存跟mysql有所不同:

id="addemps"

databaseid="oracle">

collection="emps"

item="emp"

open="begin"

close="end;">

insert into employees(employee_id,last_name,email)

values(employees_seq.nextval,#,#);

foreach>

id="addemps"

databaseid="oracle" >

insert into employees(employee_id,last_name,email)

select employees_seq.nextval,lastname,email from(

collection="emps"

item="emp"

separator="union">

select # lastname,# email from dual

foreach>

)insert>

id="addemps"

databaseid="oracle" >

insert into employees(employee_id,last_name,email)

collection="emps"

item="emp"

separator="union"

open="select employees_seq.nextval,lastname,email from("

close=")">

select # lastname,# email from dual

foreach>

)insert>

動態sql SQL高階知識 動態SQL

在介紹動態sql前我們先看看什麼是靜態sql 靜態sql 靜態 sql 語句一般用於嵌入式 sql 應用中,在程式執行前,sql 語句必須是確定的,例如 sql 語句中涉及的列名和表名必須是存在的。靜態 sql 語句的編譯是在應用程式執行前進行的,編譯的結果會儲存在資料庫內部。而後程式執行時,資料庫...

mybatis動態查詢

當我們需要查詢companylist 對應company表 但是資料又不僅僅只來自company表時,例如 我們還需要area表的省市區名稱時,可以這樣寫 會更優雅點 ps 個人覺得 1.companymodel 企業entity company對應的model 的定義 企業company表對應的m...

mybatis 動態排序

mybatis動態排序目前知道的方式有兩種 1.通過pagehelper com.github.pagehelper pagehelper 版本5.1.4 stringbuffer orderby new stringbuffer 欄位名稱 排序方式 pagehelper.startpage vo....