国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

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

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

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

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

現(xiàn)在以一個(gè)例子來介紹mybatis的動(dòng)態(tài)SQL和模糊查詢:通過多條件查詢用戶記錄,條件為姓名模糊匹配,并且年齡在某兩個(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和模糊查詢實(shí)例詳解

新建實(shí)體類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)建查詢條件實(shí)體類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>

編寫測試類:

  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和模糊查詢實(shí)例詳解

注意:

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

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

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

(1).像上述例子中一樣,在SQL語句中使用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)情況下,使用#{}語法,MyBatis會(huì)產(chǎn)生PreparedStatement語句,并且安全地設(shè)置PreparedStatement參數(shù),這個(gè)過程中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注入的問題,同時(shí)也會(huì)影響SQL語句的預(yù)編譯,所以從安全性和性能的角度出發(fā),應(yīng)盡量使用#{}。當(dāng)需要直接插入一個(gè)不做任何修改的字符串到SQL語句中,例如在ORDER BY后接一個(gè)不添加引號的值作為列名,這時(shí)候就需要使用${}。

(3).在程序中拼接。

總結(jié)

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色在线电影| 免费看黄色的视频 | 99久久成人 | 黄色在线免费看 | 国产免费一区二区 | 免费一级毛片在线观看 | 黄视频在线| 久久精品国产99 | 午夜精品久久久久久久久久久久久 | 成人三区 | 欧美精品一区二区三区中文字幕 | 国产免费一区二区 | 中国精品自拍 | 日韩一二三区视频 | 中文字幕 亚洲一区 | 国产日韩精品一区 | 亚洲激情一区二区 | 国产一区二区三区免费 | 狠狠搞狠狠操 | 国产精品视频 | 亚洲一区二区三区免费观看 | 一区二区三区自拍 | 国产精品亚洲第一区在线暖暖韩国 | 精品久久久久久亚洲综合网 | 午夜免费电影 | 免费在线黄色电影 | 国产一区二区久久 | 日本三级视频 | 欧洲一级毛片 | 中文字幕不卡在线观看 | 99er视频| 亚洲精品久久久久久久蜜桃 | 一久久久 | 午夜精品久久久久久久久久久久久 | 欧美视频日韩视频 | 亚洲午夜精品视频 | 懂色中文一区二区在线播放 | 成人精品免费视频 | 精品久久久蜜桃 | 国产成人精品一区二区三区网站观看 | a欧美|