工程供应商App开发如何提升项目管理效率与透明度
596
2023-03-06
Mybatis有查询结果但存不进实体类的解决方案
问题描述
使用Mybatis查询得到实体类
表定义如下
成员ID
成员姓名
http://
member_id
member_name
对应的实体类如下
public class Member {
private Integer memberId;
private String memberName;
// 省略getter和setter
}
对应的Mapper.xml如下
SELECT *
FROM member
WHERE member_name = #{memberName}
通过以下代码得到的member居然是null,这是为什么呢?
Member member = memberMapper.selectMemberByMemberName(memberName);
在日志我启用了DEBUG模式,发现查询结果集是有返回数据的,但是写不进去Member实体类中,最后发现是因为数据库与java命名的规范是不一样的,需要转换,Mybatis也提供了相对应的驼峰命名转换法。
例如member_id对应memberId,但是默认是不启用的,所以需要手动启动。
解决方法
如果使用Mybatis配置文件,则可以按如下配置:
"http://mybatis.org/dtd/mybatis-3-config.dtd">
如果是springboot集成的,则可以做如下配置
mybatis:
configuration:
mapUnderscoreToCamelCase: true # 开启驼峰命名转换法
按照以上配置后重新访问则可以获得一个查询后的实体类。
补充知识:mybatis查询参数中既有 实体类参数又有基本类型参数 解决方案
这个方法真实有效,直接上代码
DAO中的查询方法
public LogisticNodes findFirstNode(
@Param("ln")LogisticNodes ln,@ParjMHKFaTkcam("stringId")String stringId);
第一个参数为实体类,需要加上@param()注解
xml中的写法
SELECT
FROM order_logistic_nodes a AND a.id = #{ln.id,jdbcType=VARCHAR} AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR} AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL} and a.logistic_type IN ( SELECT s.logistic_type FROM order_logistic_nodes s s.id = #{stringId,jdbcType=VARCHAR} ) order by a.node_sort limit 1 xml中,取实体类的属性前面要加上类的引用
FROM
order_logistic_nodes a
AND a.id = #{ln.id,jdbcType=VARCHAR}
AND a.node_name = #{ln.nodeName,jdbcType=VARCHAR}
AND a.node_sort = #{ln.nodeSort,jdbcType=DECIMAL}
and
a.logistic_type IN (
SELECT
s.logistic_type
FROM
order_logistic_nodes s
s.id = #{stringId,jdbcType=VARCHAR}
)
order by a.node_sort
limit 1
xml中,取实体类的属性前面要加上类的引用
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~