1. 程式人生 > >Maven+SSM查詢不到資料,也不會報錯,返回值為null 解決方案

Maven+SSM查詢不到資料,也不會報錯,返回值為null 解決方案

錯誤問題

當我使用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 別名來查詢的 ,那麼實體類中的屬性必須和你取的別名對應

總之,你查詢出來的欄位和你實體類中對應的屬性名必須一致