mybatis組態檔中使用了where 和if標簽,沒有給id賦值,但還是拼接到了SQL陳述句中
代碼如下:(其中資料庫中user屬性有id, username , password)
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.yny.dao.UserMapperDynamicSQL">
<!-- public List<User> selectByCondition(User condition); -->
<select id="selectByCondition" resultType="com.yny.beans.User">
select id,username,password from user
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username.trim() != ''">
and username = #{username}
</if>
<if test="password != null and password.trim() != ''">
and password = #{password}
</if>
</where>
</select>
</mapper>
測驗代碼:
package com.yny.test;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.yny.beans.User;
import com.yny.dao.UserMapperDynamicSQL;
public class TestMybatisDynamicSQL {
@Test
public void test() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapperDynamicSQL mapper = session.getMapper(UserMapperDynamicSQL.class);
User condition = new User();
condition.setUsername("aa");
condition.setPassword("123");
List<User> user = mapper.selectByCondition(condition);
System.out.println(user);
} finally {
session.close();
}
}
}
運行后控制臺輸出顯示
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@3327bd23
DEBUG 04-24 21:59:44,306 ==> Preparing: select id,username,password from user WHERE id = ? and username = ? and password = ? (BaseJdbcLogger.java:145)
DEBUG 04-24 21:59:44,344 ==> Parameters: 0(Integer), aa(String), 123(String) (BaseJdbcLogger.java:145)
DEBUG 04-24 21:59:44,377 <== Total: 0 (BaseJdbcLogger.java:145)
[]
控制臺SQL陳述句中竟然把id拼接進了,導致查不到資料。應該不會拼接id的,請問哪位大神能幫忙看一下嗎?
uj5u.com熱心網友回復:
你id 欄位在物體類中可能是int 型別,new物件的時候默認初始化為0了,你可以改為integer型別,這樣默認是null,就不會拼接上去了uj5u.com熱心網友回復:
同意1樓的說法uj5u.com熱心網友回復:
嗯嗯是int型的,謝謝啦uj5u.com熱心網友回復:
好奇,這種查詢為什么要有 password ?
uj5u.com熱心網友回復:
這是登錄,當然得查密碼uj5u.com熱心網友回復:
好吧,登錄一般密碼在資料庫中一般都是存的加密后的,登錄的SQL一般也沒有ID引數。不管怎樣,自己喜歡就好,再見。
uj5u.com熱心網友回復:
User condition = new User(); 里面的 id 改成包裝類 Integer 型別uj5u.com熱心網友回復:
這是登錄,當然得查密碼
好奇,這種查詢為什么要有 password ?
好吧,登錄一般密碼在資料庫中一般都是存的加密后的,登錄的SQL一般也沒有ID引數。不管怎樣,自己喜歡就好,再見。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59195.html
標籤:Web 開發
下一篇:If 回圈
