91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在mybatis中實現一個動態SQL和模糊查詢功能

發布時間:2021-03-15 15:13:04 來源:億速云 閱讀:267 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在mybatis中實現一個動態SQL和模糊查詢功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

新建表d_user:

create table d_user( 
 id int primary key auto_increment, 
 name varchar(10),
 age int(3)
); 

insert into d_user(name,age) values('Tom',12); 
insert into d_user(name,age) values('Bob',13); 
insert into d_user(name,age) values('Jack',18);

建表成功:

怎么在mybatis中實現一個動態SQL和模糊查詢功能

新建實體類User:

public class User {
 private Integer id;
 private String name;
 private Integer age;

  //getters and setters
  
 @Override
 public String toString() {
  return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
 }

 public User(Integer id, String name, Integer age) {
  super();
  this.id = id;
  this.name = name;
  this.age = age;
 }

 public User() {
  super();
 }
}

創建查詢條件實體類ConditionUser:

public class ConditionUser {
 private String name;
 private int minAge;
 private int maxAge;

  //getters and setters
  
 public ConditionUser(String name, int minAge, int maxAge) {
  super();
  this.name = name;
  this.minAge = minAge;
  this.maxAge = maxAge;
 }

 public ConditionUser() {
  super();
 }
}

新建映射文件userMapper.xml:

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

編寫測試類:

public class Test {

 private SqlSessionFactory sessionFactory;
 private SqlSession session;

 @Before
 public void init(){
  //讀取配置文件
  String resource = "conf.xml";
  InputStream is = this.getClass().getClassLoader().getResourceAsStream(resource);

  //創建SqlSessionFactory和SqlSession
  sessionFactory = new SqlSessionFactoryBuilder().build(is);
  session = sessionFactory.openSession();
 }

 @After
 public void free(){
  session.commit();
  session.close();
 }


 @org.junit.Test
 public void getUser() {
  String statement = "com.mybatis.test7.userMapper"+".getUser";
  ConditionUser conditionUser = new ConditionUser("o", 13, 18);
  List<User> list = session.selectList(statement, conditionUser);
  System.out.println(list);
 }
}

運行結果:

怎么在mybatis中實現一個動態SQL和模糊查詢功能

注意:

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

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

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

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

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

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

注意,默認情況下,使用#{}語法,MyBatis會產生PreparedStatement語句,并且安全地設置PreparedStatement參數,這個過程中MyBatis會進行必要的安全檢查和轉義。例如:

執行SQL:select * from emp where name = #{employeeName}

參數:employeeName=>Smith

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

執行SQL:Select * from emp where name = ${employeeName}

參數:employeeName傳入值為:Smith

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

綜上所述,${}方式可能會引發SQL注入的問題,同時也會影響SQL語句的預編譯,所以從安全性和性能的角度出發,應盡量使用#{}。當需要直接插入一個不做任何修改的字符串到SQL語句中,例如在ORDER BY后接一個不添加引號的值作為列名,這時候就需要使用${}。

(3).在程序中拼接。

上述就是小編為大家分享的怎么在mybatis中實現一個動態SQL和模糊查詢功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澳门| 合川市| 应用必备| 政和县| 钟祥市| 福贡县| 德兴市| 东乡族自治县| 汉源县| 厦门市| 甘谷县| 闽侯县| 武胜县| 汉中市| 保德县| 瑞金市| 蓝山县| 同仁县| 澄城县| 两当县| 错那县| 车险| 如东县| 神池县| 遂宁市| 屏东县| 兴和县| 县级市| 巴青县| 广汉市| 雅安市| 浦东新区| 玛纳斯县| 龙陵县| 灵璧县| 岳普湖县| 镇远县| 葫芦岛市| 丹江口市| 佳木斯市| 比如县|