2020-09-15

记录一个mybatis resultType查询结果为空的问题

运行时日志如下:

2020-09-13 21:48:04.091  INFO 71052 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-09-13 21:48:04.092  INFO 71052 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-09-13 21:48:04.098  INFO 71052 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms
stuNo: 201101010101
2020-09-13 21:48:04.207  INFO 71052 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-09-13 21:48:04.295  INFO 71052 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
null

mybatis使用的是映射文件的方式写的sql语句

原因分析
数据库字段名和实体类的字段命名不一样

    // 实体类采用驼峰命名
    private String stuNo;
    private String stuName;
    # 数据库字段采用下划线分割
	CREATE TABLE `student` (
	    `stu_no` varchar(12) NOT NULL,
	    `stu_name` varchar(60) NOT NULL,
        PRIMARY KEY (`stu_no`)
	) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    <!-- 直接查 * 返回的字段就是下划线,与实体属性对不上,导致返回为null -->
    <select id="queryOne" resultType="org.monkey.mybatis.mybatisdemo.entity.Student">
        select * from student where stu_no = #{stuNo};
    </select>

修改方式
1、查询时,给字段起别名,别名和实体类字段名相同,对于字段很多的情况,这种方式不适用

    <select id="queryOne" resultType="org.monkey.mybatis.mybatisdemo.entity.Student">
        select stu_no as stuNo, stu_name as stuName from student where stu_no = #{stuNo};
    </select>

2、使用resultMap,在map中定义映射关系,然后再查询语句中,使用resultMap属性返回查询结果

	<resultMap id="BaseResultMap" type="org.monkey.mybatis.mybatisdemo.entity.Student">
        <result column="stu_no" jdbcType="VARCHAR" property="stuNo" />
        <result column="stu_name" jdbcType="VARCHAR" property="stuName" />
    </resultMap>
    <select id="queryOne" resultMap="BaseResultMap">
        select * from student where stu_no = #{stuNo};
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值