Maven+SSM查詢不到資料,也不會報錯,返回值為null 解決方案
阿新 • • 發佈:2019-01-22
錯誤問題
當我使用Maven+SSM寫登入案例的時候,mybatis的對映檔案中的sql直接放在navicat中能查詢出值,但是程式中的返回值卻是null,控制檯也不會報錯,沒有錯誤資訊的提示。
解決方案
首先檢查配置檔案
<?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.crm.sys.login.dao.AdminDao" >
<resultMap id="BaseResultMap" type="com.crm.sys.login.entity.Admin">
<result column="admin_id" property="adminId" jdbcType="INTEGER" />
<result column="admin_name" property="adminName" jdbcType="VARCHAR" />
<result column="admin_pwd" property="adminPwd" jdbcType="VARCHAR" />
</resultMap>
<!--使用者登入 -->
<select id="login" parameterType="java.util.Map" resultType="com.crm.sys.login.entity.Admin">
SELECT
*
FROM
admin
WHERE
admin_name=#{adminName, jdbcType=VARCHAR}
AND
admin_pwd=#{adminPwd, jdbcType=VARCHAR}
</select >
</mapper>
檢查資料庫名字是否錯誤
檢查dao層是否掃描到
檢查namespace是不是自己的dao層路徑
檢查parameterType引數型別是不是傳入引數的型別
檢查resultType是不是實體類的型別
如上,依舊查詢不到資料,控制檯也不會報錯,返回值為null
重點檢查
檢查資料庫欄位名
我的資料庫的欄位:admin_name admin_pwd
javaBean的實體類屬性名:adminName adminPwd
sql語句:
SELECT * FROM admin WHERE
admin_name=#{adminName, jdbcType=VARCHAR}
AND
admin_pwd=#{adminPwd, jdbcType=VARCHAR}
發現問題
由於查詢結果的欄位為admin_name,admin_pwd,在實體類中沒有定義,所以查詢結果為null
解決方案一
修改實體類為:admin_name admin_pwd,問題得到解決 能正常的查詢到資料,
同樣需要set get。
解決方案二
修改查詢語句,給查詢出來的資料取別名
sql語句:
SELECT
admin_name as adminName, admin_pwd as adminPwd
FROM
admin
WHERE
admin_name=#{adminName, jdbcType=VARCHAR}
AND
admin_pwd=#{adminPwd, jdbcType=VARCHAR}
總結
如果使用select * 來查詢的 那麼實體類中的屬性必須和資料表中對應的欄位一模一樣
如果使用select 欄位名 as 別名來查詢的 ,那麼實體類中的屬性必須和你取的別名對應
總之,你查詢出來的欄位和你實體類中對應的屬性名必須一致