mybatis使用resultMap獲取不到值的解決方案
mybatis resultMap獲取不到值
<resultMap type="com.fc.model.Shop" id="employeeMap"> <id column="shop_id" property="shopId"></id> <result column="name" property="name"></result> </resultMap> <!-- 獲取店員列表 --> <select id="getEmployeeList" parameterType="java.util.Map" resultMap="employeeMap"> select *, ( 6371 * acos ( cos ( radians( #{latitude} ) ) * cos( radians( s.latitude ) ) * cos( radians( s.longitude ) - radians( #{longitude} ) ) + sin ( radians( #{latitude} ) ) * sin( radians( s.latitude ) ) ) ) as distance from <include refid="table_name"></include> as e join <include refid="table_name_shop"></include> as s on e.shop_id = s.shop_id limit #{offset, jdbcType=INTEGER}, #{limit, jdbcType=INTEGER} </select>
問題描述
前端獲取的接口沒有得到distance字段
原因及解決方法
在實(shí)體中沒有聲明distance字段,在實(shí)體中聲明
Mybatis 從數(shù)據(jù)庫中獲取值為null ResultMap
ResultMap和返回值為空的的問題
要解決的問題:屬性名和字段名不一致
代碼塊如下:
接口:
package com.lx.dao; import com.lx.pojo.User; public interface UserMapper { User getUserById(int id); }
穿插:
要想使用@Alias注解的話,必須要在mybatis-config.xml配置typeAlias,例如:
<typeAliases> <package name="com.lx.pojo"/> </typeAliases>
實(shí)體類:
package com.lx.pojo; import org.apache.ibatis.type.Alias; @Alias("user") public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
resouce目錄下的數(shù)據(jù)庫配置文件:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8 username=root pwd=123456
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties" /> <!-- 可以給實(shí)體類起別名--> <typeAliases> <package name="com.lx.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${pwd}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com\lx\dao\UserMapper.xml"/> </mappers> </configuration>
工具類:獲取sqlSession
package com.lx.utils; 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 java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ //使用Mybatis第一步:獲取sqlSessionFactory對象 String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } //有了SqlSessionFactory ,可以從中獲取SqlSession 的實(shí)例 //SqlSession 在其中包含了面向數(shù)據(jù)庫執(zhí)行 SQL 命令的所有方法 public static SqlSession getSqlSession(){ SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; } }
執(zhí)行sql語句,幫定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"> <!--namespace=綁定一個(gè)對應(yīng)的Dao/Mapper接口--> <mapper namespace="com.lx.dao.UserMapper"> <select id="getUserById" parameterType="int" resultType="user"> select * from user where id= #{id} </select> </mapper>
測試類:
import com.lx.dao.UserMapper; import com.lx.pojo.User; import com.lx.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class test3 { @Test public void userbyid(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } }
測試結(jié)果:
pwd的值為null
mybatis會(huì)根據(jù)這些查詢的列名(會(huì)將列名轉(zhuǎn)化為小寫,數(shù)據(jù)庫不區(qū)分大小寫) , 去對應(yīng)的實(shí)體類中查找相應(yīng)列名的set方法設(shè)值 , 由于找不到setPassword() , 所以pwd返回null ; 【自動(dòng)映射】
解決方法
使用結(jié)果集映射:ResultMap
column是數(shù)據(jù)庫表的列名 , property是對應(yīng)實(shí)體類的屬性名
<?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"> <!--namespace=綁定一個(gè)對應(yīng)的Dao/Mapper接口--> <mapper namespace="com.lx.dao.UserMapper"> <resultMap id="usermap" type="user"> <!-- id為主鍵 --> <id column="id" property="id"/> <!-- column是數(shù)據(jù)庫表的列名 , property是對應(yīng)實(shí)體類的屬性名 --> <result column="name" property="name"/> <result column="password" property="pwd"/> </resultMap> <select id="getUserById" resultMap="usermap"> select * from user where id=#{id} </select> <!-- <select id="getUserById" parameterType="int" resultType="user">--> <!-- select * from user where id= #{id}--> <!-- </select>--> </mapper>
測試結(jié)果:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)Map集合二級聯(lián)動(dòng)示例
Java實(shí)現(xiàn)Map集合二級聯(lián)動(dòng)示例,需要的朋友可以參考下2014-03-03Java求素?cái)?shù)和最大公約數(shù)的簡單代碼示例
這篇文章主要介紹了Java求素?cái)?shù)和最大公約數(shù)的簡單代碼示例,其中作者創(chuàng)建的Fraction類可以用來進(jìn)行各種分?jǐn)?shù)運(yùn)算,需要的朋友可以參考下2015-09-09Java案例之隨機(jī)驗(yàn)證碼功能實(shí)現(xiàn)實(shí)例
本篇文章主要介紹了Java案例之隨機(jī)驗(yàn)證碼功能實(shí)現(xiàn)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06Java中將接口返回的字節(jié)串轉(zhuǎn)為文件詳解
這篇文章主要給大家介紹了關(guān)于Java中將接口返回的字節(jié)串轉(zhuǎn)為文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-11-11Spring中的FactoryBean與BeanFactory詳細(xì)解析
這篇文章主要介紹了Spring中的FactoryBean與BeanFactory詳細(xì)解析,在Spring框架中,FactoryBean和BeanFactory是兩個(gè)關(guān)鍵的接口,用于創(chuàng)建和管理對象實(shí)例,它們在Spring的IoC(Inversion of Control,控制反轉(zhuǎn))容器中發(fā)揮著重要的作用,需要的朋友可以參考下2023-11-11解決spring boot創(chuàng)建項(xiàng)目遇到配置的問題
這篇文章主要介紹了解決spring boot創(chuàng)建項(xiàng)目遇到配置的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程,選擇排序的時(shí)間復(fù)雜度為О(n²),需要的朋友可以參考下2016-05-05