MyBatis 查询结果部分字段出现null值--解决方案

MyBatis 查询结果部分字段出现null值

分析原因: 数据库的字段单词以下划线分隔,Java的属性以驼峰命名,如果数据库中的字段和java中的字段刚好一样,比如数据库是id,name,java里也是id,name,就可以自动映射,如果数据库中是user_name,java中是userName,那就不能自动映射。

解决方案有两个:

  1. 使用resultMap="BaseResultMap",不使用resultType="com.learn.mybatis.po.User"
    <resultMap id="BaseResultMap" type="com.learn.mybatis.do.User">
        <result column="ID" property="id" jdbcType="BIGINT"/>
        <result column="USER_NAME" property="userName" jdbcType="VARCHAR"/>
        <result column="USER_AGE" property="userAge" jdbcType="INTEGER"/>
        <result column="USER_SEX" property="userSex" jdbcType="VARCHAR"/>
    </resultMap>

    <select id="queryUserInfo" resultMap="BaseResultMap">
        select * from t_user_info 
    </select>
  1. 在mybatis配置文件里,配置下划线转换为驼峰命名风格(默认是false)。
<?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>
	<!-- mybatis开启字段自动映射为java驼峰命名规则 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

注意: 在pom.xml配置mybatis时,版本不能太低,否则不支持驼峰命名的转换

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Dubbo和MyBatis中实现查询字段动态传入的方法是通过使用动态SQL来实现的。动态SQL是一种能够根据不同条件组装SQL语句的技术,使得查询字段可以根据需求在运行时动态传入。 在MyBatis中,可以使用<if>、<where>、<choose>等标签来实现动态SQL。对于查询字段动态传入的情况,可以使用<choose>标签来根据不同的条件选择不同的查询字段。示例如下: <select id="getUser" parameterType="map" resultMap="userMap"> SELECT <choose> <when test="column == 'name'">name</when> <when test="column == 'age'">age</when> <when test="column == 'email'">email</when> <otherwise>*</otherwise> </choose> FROM user </select> 在Dubbo中,可以在服务提供者接口中定义与MyBatis查询方法对应的方法,在方法的参数中添加查询字段的参数。然后在服务实现类中将该参数传递给MyBatis查询方法,实现动态传入查询字段。示例如下: // 服务提供者接口 public interface UserService { List<User> getUser(String column); } // 服务实现类 public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUser(String column) { return userMapper.getUser(column); } } 通过以上方法,即可实现在Dubbo和MyBatis中实现查询字段动态传入的功能。在调用接口的服务消费者中,只需传递查询字段参数,即可根据需求动态查询数据库中的字段信息。 ### 回答2: 在使用Dubbo和MyBatis时,查询字段动态传入是一种常见的需求。一种常见的解决方案是使用动态SQL来动态构建查询语句。 首先,在实际应用中,我们可以通过参数的方式将需要查询字段传递给后台服务。在Dubbo的接口定义中,可以定义一个参数来接收查询字段的列表或字符串。 然后,在具体的实现中,可以使用MyBatis的动态SQL语句来根据传递的字段参数来动态构建查询语句。可以使用if语句或choose语句来判断传递的字段参数是否为null或空,如果不为null或空,则将该字段添加到查询语句中。如果传递的字段参数为null或空,则可以选择查询所有字段。 具体的实现代码如下: ```java public List<User> queryUserByFields(List<String> fields) { // 构建动态SQL语句 StringBuilder sql = new StringBuilder("SELECT "); // 判断传递的字段参数是否为null或空 if (fields != null && !fields.isEmpty()) { for (int i = 0; i < fields.size(); i++) { if (i != fields.size() - 1) { // 判断是否为最后一个字段 sql.append(fields.get(i)).append(", "); } else { sql.append(fields.get(i)); } } } else { sql.append("*"); } sql.append(" FROM user"); // 使用MyBatis执行查询语句 return sqlSession.selectList("UserMapper.queryUserByFields", sql.toString()); } ``` 在上述示例代码中,首先通过参数列表接收查询字段,然后使用StringBuilder构建动态SQL语句。根据传递的字段参数来判断是否添加查询字段,默认情况下查询所有字段。最后使用MyBatis的selectList方法执行查询语句,并返回结果。 通过以上的方式,我们可以实现在Dubbo和MyBatis中动态传入查询字段的需求。 ### 回答3: 在使用Dubbo和Mybatis进行查询时,想要实现查询字段动态传入,可以通过以下步骤进行操作。 首先,在Dubbo的服务接口中定义查询方法,该方法接收一个参数用于传入查询字段的信息,如下所示: public List<User> queryUserByField(String field); 然后,在服务提供者的实现类中实现该查询方法。在方法的实现中,可以使用Mybatis的动态SQL来根据传入的字段信息动态生成查询SQL语句。使用Mybatis的<choose>、<when>和<otherwise>标签可以根据不同的字段情况来生成不同的查询条件,如下所示: @Override public List<User> queryUserByField(String field) { return userDao.queryUserByField(field); } 在Mybatis的映射文件中,编写对应的查询语句。可以使用<choose>标签来判断传入的字段信息,根据不同的情况生成不同的查询条件,如下所示: <select id="queryUserByField" resultType="User"> SELECT * FROM user <choose> <when test="field != null and field != ''"> WHERE ${field} = #{value} </when> <otherwise> WHERE id > 0 </otherwise> </choose> </select> 通过以上操作,就可以实现在Dubbo和Mybatis中动态传入查询字段。在调用Dubbo服务时,传入不同的字段参数,即可根据需求进行字段查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿钟小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值