詳解Mybatis動態(tài)sql
1.什么是mybatis動態(tài)sql
看到動態(tài),我們就應該想到,這是一個可以變化的sql語句
MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現(xiàn)某些邏輯
2.mybatis動態(tài)sql使用前準備
a.數(shù)據庫表
b.創(chuàng)建類
3.使用mybatis動態(tài)sql,得先知道一些屬性值
一,插入
selectKey:在sql語句前后或后執(zhí)行的sql語句
keyColumn:對應字段名或別名
keyProperty:對應實體類的屬性名或map的key值
order:在執(zhí)行語句前或后執(zhí)行
resultType:返回結果的類型
第一種方式:最簡單的動態(tài)sql 插入
insert into course values(seq_course.nextval,#{courseCode},#{courseName}) select max(id) currId from course
測試
測試結果
第二種方式:如果我不想插入這么多的字段,courseName這個字段我不想插入,那么第一種這種方式,肯定是不行的
insert into course(id, courseCode, courseName ) values(seq_course.nextval, #{courseCode}, #{courseName} )
測試及結果
由此可見,這種方式,在我不想插入courseCode這個字段的時候,我們是可以實現(xiàn)的
現(xiàn)在為題又來了,如果我們想把最后一個字段變?yōu)榭?,或者兩個字段都變?yōu)榭盏臅r候,會出現(xiàn)什么情況
最后一個字段變?yōu)榭?/p>
控制臺第一個問號后面好像多了一個逗號
兩個字段都變?yōu)榭赵囋?/p>
還是多了一個逗號
出現(xiàn)上面這種情況的原因是,在不想插入字段的時候,我們并沒有把逗號去掉,所有現(xiàn)在介紹第三種方式
第三種方式,去掉多余的逗號
這種方式要引入trim
trim也有幾種屬性
prefix:添加前綴
prefixOverrides:覆蓋前綴
suffix:添加后綴
suffixOverrides:覆蓋后綴
id, courseCode, courseName seq_course.nextval, #{courseCode}, #{courseName}
看,問題解決了
在做項目的時候,我們經常對數(shù)據庫進行插入數(shù)據,有時候我們會想同時插入多條,那么,在使用mybatis我們該怎么樣插入多條數(shù)據呢
在這里,我們要解決幾個問題
1.我們怎么樣復制表結構
create table course02 as select * from COURSE
這個語句是不是很熟悉,對的,course02這個表不僅復制了course表的表結構,把course表的內容也復制進來了
2.我們怎么樣只復制course的表結構,而不復制course表的內容呢
create table course03 as select * from COURSE where 1!=1;
3.那么進行插入的時候,是不是也是和這個一樣呢
insert into course03 select * from course;
答案是一樣的
4.怎么進行多條語句的插入
insert into course03 select '6', 'yc06', '數(shù)據結構06' from dual union select '7', 'yc07', '數(shù)據結構07' from dual union select '8', 'yc08', '數(shù)據結構08' from dual
現(xiàn)在sql語句有了,我們就可以在配置文件中進行插入操作了
insert into course select #{courses.id},#{courses.courseCode}, #{courses.courseName} from dual
二,修改
1.使用trim,前面也已經介紹,使用trim可以去前綴,是因為有suffixOverrides這個屬性
update course set courseCode=#{courseCode}, courseName=#{courseName} where id=#{id}
2.使用set,可以代替語句中的set,還可以去掉后綴
update course courseCode=#{courseCode}, courseName=#{courseName} where id=#{id}
3.在修改的時候我們也會有選擇性的修改,有時候我們不想修改的值,讓其和沒有修改的值一致
choose相當于多重if
第一個when相當于if,第二個when相當于else if
otherwise相當于else
update course courseCode=#{courseCode}, courseCode=courseCode, courseName=#{courseName}, courseName=courseName, where id=#{id}
以上所述是小編給大家介紹的Mybatis動態(tài)sql的全部內容,希望對大家有所幫助!
相關文章
使用springmvc參數(shù)接收boolean類型參數(shù)的問題
這篇文章主要介紹了使用springmvc參數(shù)接收boolean類型參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot中的@ControllerAdvice使用方法詳細解析
這篇文章主要介紹了SpringBoot中的@ControllerAdvice使用方法詳細解析, 加了@ControllerAdvice的類為那些聲明了@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的 方法的類而提供的專業(yè)化的@Component,以供多個 Controller類所共享,需要的朋友可以參考下2024-01-01mybatis初始化SqlSessionFactory失敗的幾個原因分析
這篇文章主要介紹了mybatis初始化SqlSessionFactory失敗的幾個原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12