mybatis map参数 null怎么 返回 null 值 返回类型 是个map

使用Mybatis的查询,很多时候都要返回Map,Mybatis默认若field的值为null时候不返回字段的名称,导致结果集map没有对应的key。
然而很多时候为了前端的使用方便还是要返回字段的key。
若MyBatis一个查询的如下
&select id=&queryById&
resultType=&Map& parameterType=&Object&&
select id,user_name,user_code from customer where id = #{id}
当查询的一条记录如下
mysql& select id,user_name, user_code from customer limit 1;
+----+--------------+-----------+
| id | user_name
| user_code |
+----+--------------+-----------+
1 | MassiveStars |
+----+--------------+-----------+
返回的Map只有id和user_name两个key
Mybatis的配置文件中有一个callSettersOnNulls属性可解决此问题,mybatis-config.xml如下。
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE configuration PUBLIC &-//mybatis.org//DTD SQL MAP Config 3.2//EN&
&http://mybatis.org/dtd/mybatis-3-config.dtd&&
&configuration&
&settings&
&setting name=&callSettersOnNulls& value=&true&/&
&/settings&
&/configuration&
若报下列错误,则&mybatis-config.xml中各标签的顺序有错误,正确的顺序依次为properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、plugins、environments、databaseIdProvider、mappers。
Caused by: org.xml.sax.SAXParseE lineNumber: 17; columnNumber: 17; 元素类型为 &configuration& 的内容必须匹配 &(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)&。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:1994)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:254)
MyBatis在3.2版本中加入此特性,若还是不生效,检查项目的MyBatis版本是不是大于等于3.2。
本文已收录于以下专栏:
相关文章推荐
最近自己摸索一下SpringMVC+Mybatis框架(小菜鸟一枚),自己搭建完环境,在做一个简单的小系统,遇到一些小问题,分享一下(纰漏之处,欢迎指正),废话不叨叨,开始正题:
自使用mybati...
一、查询sql添加每个字段的判断空IFNULL(rate,'') as rate二、ResultType利用实体返回,不用map三、springMVC+mybatis查询数据,返回resultType...
IFNULL(t.nickname,
substring(t.mobile, 1, 3),
'****',
substring(tub.mobile, 8)
具体实现参照网上,但是可能遇到注入参数为null的情况,经过查阅及自己测试记录一下:
子查询的参数中,有之类,需要指定别名,通过 http://blog.csdn.net/mamba10/art...
springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示,可以通过添加配置文件,规定查询数据为空是则返回null。
项目中用mybatis3.x,用sql查询某个表类型为int的字段,那个表是空表,没有数据,结果抛异常了,原因是在对象中的属性为int,空表时,sql查询出来的是NULL,结果赋值时抛异常了。
最近在项目开发中,mybatis遇到一个很奇怪的问题,因为想在后台传一个int型0插入到数据,却被识别成了null。
纠结了两天的
在SSM的项目中,数据的持久化操作都使用Mybatis实现,Mybatis抢的Mapper配置文件,可以让我们灵活得编写SQL语句。在我们需要进行连表查询时,需要传入的参数可能不止一个,这个时候我们将...
在mybatis查询中,我们经常会用到返回的数据是Map的形式,例如这样的
首先在mysql中
查询的结果是这样的,detailValue和detailName
sql中的 de...
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)下次自动登录
现在的位置:
& 综合 & 正文
Mybatis 查询返回List
哎,查了很久百度,竟然没有直接的例子... 自己参考其他例子,写了一个...
其他的忽略,直接上关键代码:
package com.mymaven.mybatisdemo.
public class Department {
private String dp_
private String dp_
private String cost_
public String getDp_id() {
return dp_
public void setDp_id(String dp_id) {
this.dp_id = dp_
public String getDp_name() {
return dp_
public void setDp_name(String dp_name) {
this.dp_name = dp_
public String getCost_center() {
return cost_
public void setCost_center(String cost_center) {
this.cost_center = cost_
public Department() {
mapper接口:
public interface DepartmentMapper {
//查询返回一个list
public List&Department& queryAllDepartment();
mapper对应的配置文件:
&!-- 此处namespace需要指定dao接口 --&
&mapper namespace="com.mymaven.mybatisdemo.dao.DepartmentMapper"&
&!--配置一个resultMap 指定返回的类型 --&
&resultMap id="departMent" type="Department"&
&id column="dp_id" property="dp_id" /&
&result column="dp_name" property="dp_name" /&
&result column="cost_center" property="cost_center" /&
&/resultMap&
&!-- 返回一个list的写法 --&
&select id="queryAllDepartment"
resultMap="departMent" &
select * from t_department
&&&&推荐文章:
【上篇】【下篇】博客分类:
数据库:SqlServer2005
/*==============================================================*//* Table: Dic_City
*//*==============================================================*/create table Dic_City (
varchar(10)
Provinces_Code
varchar(20)
State_Code
varchar(10)
varchar(50)
varchar(50)
PY_Code_Short
varchar(10)
varchar(20)
varchar(20)
varchar(20)
varchar(20)
varchar(20)
constraint PK_DIC_CITY primary key (ID))
MyBatisXML配置,下面两种方式都行
&insert id="insert" parameterType="cn.softsea.model.DicCity" &
&selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" &
SELECT @@IDENTITY
&/selectKey&
insert into Dic_City (City_Code, Provinces_Code,
State_Code, City_Name, PY_Code,
PY_Code_Short, Ext1, Ext2,
Ext3, Ext4, Ext5)
values (#{cityCode,jdbcType=VARCHAR}, #{provincesCode,jdbcType=VARCHAR},
#{stateCode,jdbcType=VARCHAR}, #{cityName,jdbcType=VARCHAR}, #{pyCode,jdbcType=VARCHAR},
#{pyCodeShort,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR},
#{ext3,jdbcType=VARCHAR}, #{ext4,jdbcType=VARCHAR}, #{ext5,jdbcType=VARCHAR})&/insert&
&insert id="insert" parameterType="cn.softsea.model.DicCity" useGeneratedKeys="true" keyProperty="id"&
insert into Dic_City (City_Code, Provinces_Code,
State_Code, City_Name, PY_Code,
PY_Code_Short, Ext1, Ext2,
Ext3, Ext4, Ext5)
values (#{cityCode,jdbcType=VARCHAR}, #{provincesCode,jdbcType=VARCHAR},
#{stateCode,jdbcType=VARCHAR}, #{cityName,jdbcType=VARCHAR}, #{pyCode,jdbcType=VARCHAR},
#{pyCodeShort,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR},
#{ext3,jdbcType=VARCHAR}, #{ext4,jdbcType=VARCHAR}, #{ext5,jdbcType=VARCHAR})&/insert&
调用Mapper返回主键:
//生成新对象用于插入DicCity city = new DicCity();city.setCityCode("330100");city.setCityName("杭州市");
//获取mapper对象DicCityMapper cityMapper = (DicCityMapper) SpringContextUtil.getBean("dicCityMapper");
int row = cityMapper.insert(city);
//insrt不再返回主键,只返回响应行数,这点和ibatis不同了
System.out.println("响应的行数:"+row);//取得自增的标识列 ID的值System.out.println("新插入的数据的ID:"+city.getId());
====================
如果使用mybatis.generator来生成DAO层的话,generatorConfig.xml中要使用:
&generatedKeycolumn="id"sqlStatement="MySql"identity="true"/&
浏览 49347
浏览: 5476653 次
来自: 北京
推荐用StratoIO打印控件,功能如下:1、Html友好的打 ...
heipacker 写道这篇是抄的?不知道
如何保证A-&M的消息,M一定接收到了,同样,如何保证M ...
对我有用,非常感谢
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 mybatis 返回map 空值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信