詳解Mybatis動(dòng)態(tài)sql
1.什么是mybatis動(dòng)態(tài)sql
看到動(dòng)態(tài),我們就應(yīng)該想到,這是一個(gè)可以變化的sql語句
MyBatis的動(dòng)態(tài)SQL是基于OGNL表達(dá)式的,它可以幫助我們方便的在SQL語句中實(shí)現(xiàn)某些邏輯
2.mybatis動(dòng)態(tài)sql使用前準(zhǔn)備
a.數(shù)據(jù)庫表

b.創(chuàng)建類

3.使用mybatis動(dòng)態(tài)sql,得先知道一些屬性值
一,插入
selectKey:在sql語句前后或后執(zhí)行的sql語句
keyColumn:對(duì)應(yīng)字段名或別名
keyProperty:對(duì)應(yīng)實(shí)體類的屬性名或map的key值
order:在執(zhí)行語句前或后執(zhí)行
resultType:返回結(jié)果的類型
第一種方式:最簡單的動(dòng)態(tài)sql 插入
insert into course values(seq_course.nextval,#{courseCode},#{courseName})
select max(id) currId from course

測(cè)試
測(cè)試結(jié)果

第二種方式:如果我不想插入這么多的字段,courseName這個(gè)字段我不想插入,那么第一種這種方式,肯定是不行的
insert into course(id,
courseCode,
courseName
)
values(seq_course.nextval,
#{courseCode},
#{courseName}
)
測(cè)試及結(jié)果

由此可見,這種方式,在我不想插入courseCode這個(gè)字段的時(shí)候,我們是可以實(shí)現(xiàn)的
現(xiàn)在為題又來了,如果我們想把最后一個(gè)字段變?yōu)榭?,或者兩個(gè)字段都變?yōu)榭盏臅r(shí)候,會(huì)出現(xiàn)什么情況
最后一個(gè)字段變?yōu)榭?/p>

控制臺(tái)第一個(gè)問號(hào)后面好像多了一個(gè)逗號(hào)
兩個(gè)字段都變?yōu)榭赵囋?/p>

還是多了一個(gè)逗號(hào)
出現(xiàn)上面這種情況的原因是,在不想插入字段的時(shí)候,我們并沒有把逗號(hào)去掉,所有現(xiàn)在介紹第三種方式
第三種方式,去掉多余的逗號(hào)
這種方式要引入trim
trim也有幾種屬性
prefix:添加前綴
prefixOverrides:覆蓋前綴
suffix:添加后綴
suffixOverrides:覆蓋后綴
id,
courseCode,
courseName
seq_course.nextval,
#{courseCode},
#{courseName}

看,問題解決了
在做項(xiàng)目的時(shí)候,我們經(jīng)常對(duì)數(shù)據(jù)庫進(jìn)行插入數(shù)據(jù),有時(shí)候我們會(huì)想同時(shí)插入多條,那么,在使用mybatis我們?cè)撛趺礃硬迦攵鄺l數(shù)據(jù)呢
在這里,我們要解決幾個(gè)問題
1.我們?cè)趺礃訌?fù)制表結(jié)構(gòu)
create table course02 as select * from COURSE
這個(gè)語句是不是很熟悉,對(duì)的,course02這個(gè)表不僅復(fù)制了course表的表結(jié)構(gòu),把course表的內(nèi)容也復(fù)制進(jìn)來了
2.我們?cè)趺礃又粡?fù)制course的表結(jié)構(gòu),而不復(fù)制course表的內(nèi)容呢
create table course03 as select * from COURSE where 1!=1;
3.那么進(jìn)行插入的時(shí)候,是不是也是和這個(gè)一樣呢
insert into course03 select * from course;
答案是一樣的
4.怎么進(jìn)行多條語句的插入
insert into course03 select '6', 'yc06', '數(shù)據(jù)結(jié)構(gòu)06' from dual union select '7', 'yc07', '數(shù)據(jù)結(jié)構(gòu)07' from dual union select '8', 'yc08', '數(shù)據(jù)結(jié)構(gòu)08' from dual
現(xiàn)在sql語句有了,我們就可以在配置文件中進(jìn)行插入操作了
insert into course
select #{courses.id},#{courses.courseCode},
#{courses.courseName} from dual

二,修改
1.使用trim,前面也已經(jīng)介紹,使用trim可以去前綴,是因?yàn)橛衧uffixOverrides這個(gè)屬性
update course set
courseCode=#{courseCode},
courseName=#{courseName}
where id=#{id}
2.使用set,可以代替語句中的set,還可以去掉后綴
update course
courseCode=#{courseCode},
courseName=#{courseName}
where id=#{id}
3.在修改的時(shí)候我們也會(huì)有選擇性的修改,有時(shí)候我們不想修改的值,讓其和沒有修改的值一致
choose相當(dāng)于多重if
第一個(gè)when相當(dāng)于if,第二個(gè)when相當(dāng)于else if
otherwise相當(dāng)于else
update course
courseCode=#{courseCode},
courseCode=courseCode,
courseName=#{courseName},
courseName=courseName,
where id=#{id}
以上所述是小編給大家介紹的Mybatis動(dòng)態(tài)sql的全部內(nèi)容,希望對(duì)大家有所幫助!
- mybatis的動(dòng)態(tài)sql詳解(精)
- mybatis動(dòng)態(tài)sql之Map參數(shù)的講解
- MyBatis執(zhí)行動(dòng)態(tài)SQL的方法
- Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法
- Mybatis中的動(dòng)態(tài)SQL語句解析
- MyBatis動(dòng)態(tài)SQL中的trim標(biāo)簽的使用方法
- MyBatis實(shí)踐之動(dòng)態(tài)SQL及關(guān)聯(lián)查詢
- MyBatis動(dòng)態(tài)SQL標(biāo)簽用法實(shí)例詳解
- mybatis的動(dòng)態(tài)sql之if test的使用說明
- Mybatis超級(jí)強(qiáng)大的動(dòng)態(tài)SQL語句大全
相關(guān)文章
使用springmvc參數(shù)接收boolean類型參數(shù)的問題
這篇文章主要介紹了使用springmvc參數(shù)接收boolean類型參數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析
這篇文章主要介紹了SpringBoot中的@ControllerAdvice使用方法詳細(xì)解析, 加了@ControllerAdvice的類為那些聲明了@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的 方法的類而提供的專業(yè)化的@Component,以供多個(gè) Controller類所共享,需要的朋友可以參考下2024-01-01
Java 基礎(chǔ)之內(nèi)部類詳解及實(shí)例
這篇文章主要介紹了 Java 基礎(chǔ)之內(nèi)部類詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03
mybatis初始化SqlSessionFactory失敗的幾個(gè)原因分析
這篇文章主要介紹了mybatis初始化SqlSessionFactory失敗的幾個(gè)原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

