SSM整合项目出现的小插曲:从数据库查询数据为null

本文详细介绍了在使用MyBatis进行数据查询时遇到的数据无法获取问题的解决过程,包括检查mapper.xml、配置文件、实体类与数据库字段匹配及驼峰映射设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做整合项目时,有需要从数据库中查询数据,然后响应的前端页面,然而发现从数据库中根本查不到数据,于是开始检查

一、检查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>
  1. 于是将查询语句复制到sqlyog去,发现是可以查到数据的,说明写的查询语句应该没什么问题。

  2. 检查dao层接口中的传值,运行时打印在控制台的数据显示,传值也是成功的。

  3. 于是又检查是不是mapper.xml中的标签的头写错了或者指定的空间,结果是写的正确的。
    二、检查配置文件applicationContext.xml文件

  4. 检查了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>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值