在做整合项目时,有需要从数据库中查询数据,然后响应的前端页面,然而发现从数据库中根本查不到数据,于是开始检查
一、检查mapper.xml中的查询语句
public interface IHouseDao {
//查询房源信息
List<HouseView> findFourHouse(@Param("houseType") Integer houseType);
}
<?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.yiju.dao.IHouseDao">
<!--查询全部房源信息-->
<select id="findFourHouse" parameterType="java.lang.Integer" resultType="com.yiju.pojo.HouseView">
select * from tb_house as house,tb_house_info as houseInfo
where house.house_id=houseInfo.house_id
and
house.is_delete=0
and
house.house_type=#{houseType}
order by rand() limit 4
</select>
</mapper>
-
于是将查询语句复制到sqlyog去,发现是可以查到数据的,说明写的查询语句应该没什么问题。
-
检查dao层接口中的传值,运行时打印在控制台的数据显示,传值也是成功的。
-
于是又检查是不是mapper.xml中的标签的头写错了或者指定的空间,结果是写的正确的。
二、检查配置文件applicationContext.xml文件 -
检查了mybatis整合部分,检查是否配置错了,最简单的实验方法就是写个简单的查询,发现可以查询到数据,彻底晕了。
于是面向百度编程,发现了一个疏忽的地方,就是实体类和数据库中的数据名称不匹配,数据库中的数据名称都是带着下划线
到这里我才想到,平时写的太习惯了,直接将下划线省略后字母接大写,但是这个前提是要开启驼峰映射。
于是找到applicationContext.xml文件中mybatis配置,开启驼峰映射
<!--配置sqlSessionFactory对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据库连接池-->
<property name="dataSource" ref="dataSource"/>
<!--扫描bean层包 使用别名-->
<property name="typeAliasesPackage" value="com.yiju.bean,com.yiju.pojo"/>
<!--配置加载映射文件 *mapper.xml-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<!--开启驼峰映射-->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true"/>
</bean>
</property>
<!--分页配置-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
到这里出现的问题解决了
后来想了想数据库字段和实体类名称不匹配问题的解决方法
1、通过resultMap映射实体类属性名和表的字段名
<?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.cn.mapper.StudentMapper">
<!--
resultMap:将实体类字段属性名和表的字段名进行对应
-->
<resultMap id="studentResultMap" type="com.cn.vo.StudentVO" >
<!-- 用id属性映射主键字段 -->
<id property="stuId" column="stu_id" />
<!-- 用result属性来映射非主键字段 -->
<result property="stuName" column="stu_name"/>
<result property="sex" column="sex" />
</resultMap>
<!-- 1.根据id查询学生信息 -->
<select id="selectStudentById" parameterType="int" resultMap="studentResultMap">
select t.*
from t_student t where t.stu_id=#{stuId}
</select>
</mapper>
2、如果只是将数据库中的下划线去掉后字母大写就可以开启驼峰映射
例如:stu_name------->stuName;
stu_id----------->stuId;
SSM整合中applicationContext.xml
<!--开启驼峰映射-->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true"/>
</bean>
</property>
或在Mybatis的全局配置文件中Mybatis-config.xml中加入
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>