激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)實(shí)例詳解

mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)實(shí)例詳解

2021-08-24 11:37Alan_Xiang Java教程

這篇文章主要給大家介紹了關(guān)于mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

現(xiàn)在以一個(gè)例子來(lái)介紹mybatis的動(dòng)態(tài)SQL和模糊查詢(xún):通過(guò)多條件查詢(xún)用戶(hù)記錄,條件為姓名模糊匹配,并且年齡在某兩個(gè)值之間。

新建表d_user:

  1. create table d_user(
  2. id int primary key auto_increment,
  3. name varchar(10),
  4. age int(3)
  5. );
  6.  
  7. insert into d_user(name,age) values('Tom',12);
  8. insert into d_user(name,age) values('Bob',13);
  9. insert into d_user(name,age) values('Jack',18);

建表成功:

mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)實(shí)例詳解

新建實(shí)體類(lèi)User:

  1. public class User {
  2. private Integer id;
  3. private String name;
  4. private Integer age;
  5.  
  6.   //getters and setters
  7.   
  8. @Override
  9. public String toString() {
  10. return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
  11. }
  12.  
  13. public User(Integer id, String name, Integer age) {
  14. super();
  15. this.id = id;
  16. this.name = name;
  17. this.age = age;
  18. }
  19.  
  20. public User() {
  21. super();
  22. }
  23. }

創(chuàng)建查詢(xún)條件實(shí)體類(lèi)ConditionUser:

  1. public class ConditionUser {
  2. private String name;
  3. private int minAge;
  4. private int maxAge;
  5.  
  6.   //getters and setters
  7.   
  8. public ConditionUser(String name, int minAge, int maxAge) {
  9. super();
  10. this.name = name;
  11. this.minAge = minAge;
  12. this.maxAge = maxAge;
  13. }
  14.  
  15. public ConditionUser() {
  16. super();
  17. }
  18. }

新建映射文件userMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.mybatis.test7.userMapper">
  4. <select id="getUser" parameterType="ConditionUser" resultType="User">
  5. SELECT * FROM d_user WHERE age &gt;= #{minAge} AND age &lt;= #{maxAge}
  6. <if test="name!=null">
  7. AND name LIKE CONCAT(CONCAT('%',#{name}),'%')</if>
  8. </select>
  9. </mapper>

編寫(xiě)測(cè)試類(lèi):

  1. public class Test {
  2.  
  3. private SqlSessionFactory sessionFactory;
  4. private SqlSession session;
  5.  
  6. @Before
  7. public void init(){
  8. //讀取配置文件
  9. String resource = "conf.xml";
  10. InputStream is = this.getClass().getClassLoader().getResourceAsStream(resource);
  11.  
  12. //創(chuàng)建SqlSessionFactory和SqlSession
  13. sessionFactory = new SqlSessionFactoryBuilder().build(is);
  14. session = sessionFactory.openSession();
  15. }
  16.  
  17. @After
  18. public void free(){
  19. session.commit();
  20. session.close();
  21. }
  22.  
  23. @org.junit.Test
  24. public void getUser() {
  25. String statement = "com.mybatis.test7.userMapper"+".getUser";
  26. ConditionUser conditionUser = new ConditionUser("o", 13, 18);
  27. List<User> list = session.selectList(statement, conditionUser);
  28. System.out.println(list);
  29. }
  30. }

運(yùn)行結(jié)果:

mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)實(shí)例詳解

注意:

1. 在配置文件中編寫(xiě)sql語(yǔ)句時(shí),為防止大于號(hào)和小于號(hào)在表示大小關(guān)系和表示標(biāo)簽符號(hào)之間產(chǎn)生混淆,所以通常用&gt;和&lt;來(lái)代替sql語(yǔ)句中大于號(hào)和小于號(hào)。

2. 在SQL語(yǔ)句中添加動(dòng)態(tài)SQL標(biāo)簽if的原因是,當(dāng)在后臺(tái)獲取的name屬性值為null時(shí),防止生成where name like %null%的條件判斷語(yǔ)句,正確的邏輯應(yīng)該是,當(dāng)傳來(lái)的name屬性值為null時(shí),取消此篩選條件,即不使用where name like ?的判斷條件。在mybatis中,可用的動(dòng)態(tài)SQL標(biāo)簽有:if,choose(when,otherwise),trim(where,set),foreach。

3. 在使用模糊查詢(xún)時(shí),拼接%+#{name}+%的方法有如下幾種:

(1).像上述例子中一樣,在SQL語(yǔ)句中使用CONCAT關(guān)鍵字。

(2).使用${}代替#{}:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.mybatis.test7.userMapper">
  4. <select id="getUser" parameterType="ConditionUser" resultType="User">
  5. SELECT * FROM d_user WHERE age &gt;= #{minAge} AND age &lt;= #{maxAge}
  6. <if test="name!=null">
  7. AND name LIKE '%${name}%'</if>
  8. </select>
  9. </mapper>

注意,默認(rèn)情況下,使用#{}語(yǔ)法,MyBatis會(huì)產(chǎn)生PreparedStatement語(yǔ)句,并且安全地設(shè)置PreparedStatement參數(shù),這個(gè)過(guò)程中MyBatis會(huì)進(jìn)行必要的安全檢查和轉(zhuǎn)義。例如:

執(zhí)行SQL:select * from emp where name = #{employeeName}

參數(shù):employeeName=>Smith

解析后執(zhí)行的SQL:select * from emp where name = ?

執(zhí)行SQL:Select * from emp where name = ${employeeName}

參數(shù):employeeName傳入值為:Smith

解析后執(zhí)行的SQL:Select * from emp where name =Smith

綜上所述,${}方式可能會(huì)引發(fā)SQL注入的問(wèn)題,同時(shí)也會(huì)影響SQL語(yǔ)句的預(yù)編譯,所以從安全性和性能的角度出發(fā),應(yīng)盡量使用#{}。當(dāng)需要直接插入一個(gè)不做任何修改的字符串到SQL語(yǔ)句中,例如在ORDER BY后接一個(gè)不添加引號(hào)的值作為列名,這時(shí)候就需要使用${}。

(3).在程序中拼接。

總結(jié)

到此這篇關(guān)于mybatis的動(dòng)態(tài)SQL和模糊查詢(xún)的文章就介紹到這了,更多相關(guān)mybatis動(dòng)態(tài)SQL模糊查詢(xún)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/xiangwanpeng/article/details/53790810

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线播放免费视频 | 国产一级毛片高清视频完整版 | jizzjizzjizz少妇 | 色中色在线视频 | 在线观看中文字幕av | 免费a级毛片大学生免费观看 | 一级大黄毛片 | 久久撸视频 | 操操插插 | chinesehdxxxx实拍 日韩电影视频 | 色七七亚洲 | 亚洲第一成网站 | 在线播放免费av | av在线浏览| hdhdhd69ⅹxxx黑人 | 中国一级毛片在线播放 | 姑娘第四集免费看视频 | 国产精选电影免费在线观看 | 欧美a视频 | 午夜爽爽爽男女免费观看hd | 娇妻被各种姿势c到高潮小说 | 国产精品影视 | 久久视频精品 | 狠狠婷婷综合久久久久久妖精 | 久久99精品久久久久久国产越南 | 在线成人av观看 | 毛片免费看的 | 国产日本在线播放 | 91豆奶| 手机av在线电影 | 一区二区久久精品66国产精品 | 他也色在线视频 | 欧美a黄| 亚洲成人福利在线观看 | 国产精品一区99 | 日韩精品中文字幕一区二区三区 | 日韩午夜片 | 欧美韩国日本在线 | 欧美成人免费电影 | 在线看91| 在线观看免费污视频 |