MyBatis查询返回Map时设置值为null的字段也在结果集中
2016-11-07 11:16
946 查看
使用Mybatis的查询,很多时候都要返回Map,Mybatis默认若field的值为null时候不返回字段的名称,导致结果集map没有对应的key。
然而很多时候为了前端的使用方便还是要返回字段的key。
若MyBatis一个查询的如下
当查询的一条记录如下
返回的Map只有id和user_name两个key
Mybatis的配置文件中有一个callSettersOnNulls属性可解决此问题,mybatis-config.xml如下。
若报下列错误,则 mybatis-config.xml中各标签的顺序有错误,正确的顺序依次为properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、plugins、environments、databaseIdProvider、mappers。
MyBatis在3.2版本中加入此特性,若还是不生效,检查项目的MyBatis版本是不是大于等于3.2。
然而很多时候为了前端的使用方便还是要返回字段的key。
若MyBatis一个查询的如下
<select id="queryById" resultType="Map" parameterType="Object"> select id,user_name,user_code from customer where id = #{id} </select>
当查询的一条记录如下
mysql> select id,user_name, user_code from customer limit 1; +----+--------------+-----------+ | id | user_name | user_code | +----+--------------+-----------+ | 1 | MassiveStars | NULL | +----+--------------+-----------+
返回的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.SAXParseException; 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。
相关文章推荐
- Spring boot + MyBatis 查询返回Map时设置值为null的字段也在结果集中
- springboot+mybatis MyBatis查询返回Map时设置值为null的字段没有在结果集中
- mybatis使用char类型字段查询oracle数据库时结果返回null
- mybatis 使用oracle char 字段查询返回结果总是null
- mybatis 使用oracle char 字段查询返回结果总是null
- 解决mybatis使用char类型字段查询oracle数据库时结果返回null问题
- 多字段模糊查询,前一个字段无搜索结果返回null时不影响后一个字段模糊查询
- Mybatis 连表查询,返回结果封装为Map
- Mybatis 查询结果返回 Map
- myBatis 常见问题(一)查询结果字段为null
- MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
- springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示的解决方案
- mybatis查询类型为int的字段,返回null的异常
- 好947 Mybatis 配置resultMap 带参数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错
- Mybatis 连表查询,返回结果封装为Map
- Mybatis按SQL查询字段的顺序返回查询结果
- mybatis查询类型为int的字段,返回null的异常
- mybatis查询,返回类型为HashMap,字段为null时没返回
- MyBatis 解决查询结果Map中,值为null,不存储键值的问题
- 使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法