Mysql動態SQL


mysql動態SQL

解決

Error querying database.  Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.zwt.mapper.AddressesMapper.queryTrim'.  It's likely that neither a Result Type nor a Result Map was specified.

的問題

在sql語句加上返回的類型 :

resultType="com.zwt.pojo.Addresses"

緩存

兩次查詢僅有一次調用SQL語句,第二次從緩存中命中。
SqlSession sqlSession = MybatisUtil.getSession();
AddressesMapper mapper = sqlSession.getMapper(AddressesMapper.class);
​
List<Addresses> addresses = mapper.listAll();
        System.out.println(addresses);
List<Addresses> addresses2 = mapper.listAll();
        System.out.println(addresses2);
        sqlSession.commit();
        sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7

 

緩存失效方式

查詢后進行增刪改會使緩存失效
SqlSession sqlSession = MybatisUtil.getSession(); 
AddressesMapper mapper = sqlSession.getMapper(AddressesMapper.class);
List<Addresses> addresses = mapper.listAll();
//緩存失效一:查詢后增刪改會使緩存失效 
Addresses a = new Addresses(); 
a.setId(2); 
a.setCountry("2"); 
a.setCity("3"); 
a.setState("4"); 
a.setZip("5"); 
mapper.update(a); 
List<Addresses> addresses2 = mapper.listAll(); 
sqlSession.commit(); 
sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7 DEBUG [main] - ==> Preparing: update addresses SET country = ?, city = ?, state = ?, zip = ? WHERE id = ? DEBUG [main] - ==> Parameters: 2(String), 3(String), 4(String), 5(String), 2(Long) DEBUG [main] - <== Updates: 1 DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters:

強制清空緩存
List<Addresses> addresses = mapper.listAll();
//強制清空會話所有緩存sqlSession.clearCache();
List<Addresses> addresses2 = mapper.listAll();
sqlSession.commit();
sqlSession.close();

DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7 DEBUG [main] - ==> Preparing: select country,state,city from addresses DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 7

 

動態SQL

動態SQL-if
<select id="queryByCountryCity" resultType="com.zwt.pojo.Addresses">    
    select * from addresses 
    <where> 
    <if test="country != null and city = '' "> and COUNTRY = #{country}</if>                   
<if test="city != null">and city = #{city}</if>                            
</where>
</select>
public void m3(){        
    SqlSession sqlSession = MybatisUtil.getSession();        
    AddressesMapper mapper = sqlSession.getMapper(AddressesMapper.class);//                 
List<Addresses> addresses = mapper.queryByCountryCity(null, "Perry");
//
List<Addresses> addresses = mapper.queryByCountryCity("China", null);
List<Addresses> addresses = mapper.queryByCountryCity("Taylor", "");
System.out.println(addresses);
sqlSession.close();

 

當country不為空並且city為空時,通過country查詢;

當city不為空時則通過city查詢

動態SQL-模糊查詢
第一種

在應用程序層面加入%:

List<Addresses> addresses = mapper.queryLike("%Luo%");
select * from addresses where city like  #{city}
第二種

通過mysql的函數 concat 完成:

select * from addresses where city like concat('%', #{city}, '%')
第二種

通過band標簽對變量重新綁定,在用新的變量查詢

<bind name = "_city" value = " '%' + city + '%'"></bind>
select * from addresses where city like  #{_city}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM