mybatis 查询的坑-空字段不返回
通用编辑功能,动态获取表结构,实现增删改,因为表不固定,所以字段的接收都是使用的map;但是最近发现一个表修改的时候,空字段无法获取到,详情如下:
假设如下表结构:
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` varchar(6) NOT NULL DEFAULT '',
`b` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4;
现在有一列值如下,id=1,a='a',b为null;
经过mybatis查询后,发现Map中仅仅返回了id和a两个字段及其值,b字段完全丢了;
因为在用mybatis时没有用实体作为返回(用的是Map) 因此出现了 在返回参数为null的时候 不会返回字段。
解决方案:
单独的创建一个mybatis的配置文件然后在spring-mybatis的配置文件中引入该文件。
mybatis-config.xml如下:
<?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>
<settings>
<!--解决,查询返回结果含null,没有对应字段值问题-->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
applicationContext-persistence.xml中的配置如下:
<!-- MyBatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 为了配置多数据源 将ref=dataSource 修改为ref=dynamicDataSource-->
<property name="dataSource" ref="dynamicDataSource"/>
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
<property name="typeAliasesPackage"
value="com.ruisitech.bi.entity"/>
<!-- 显式指定Mapper文件位置 -->
<property name="mapperLocations">
<!--切换数据库类型后,需要修改此处的配置文件,使用对应的数据库类型下的mapper文件-->
<array>
<value>classpath*:/mybatis/*.xml</value>
<value>classpath*:/mybatis/*/*.xml</value>
</array>
</property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect = mysql
</value>
</property>
</bean>
</array>
</property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
这样用map接收返回值的时候,就可以返回所有字段了。
mybatis中分页插件-查询所有再分页
参考 这里