MyBatis中关于字段映射和参数传递的问题记录

关于 SQL 语句,我们使用的最多的就是 select 了。
在MyBatis中,我们直接从表中查询到一条数据,查询的结果 MyBatis会把它自动转为一个对象。只要对象的实体类字段与表中返回的列名字段一致,系统就能直接识别。

别名功能

但是在实际应用中,我们的POJO类可能命名规则是驼峰,而数据库中使用的是_下划线格式。因此我们可以通过使用SQL语句中的别名功能来处理这个问题。我们可以在查询的时候自动将相关的列名进行修改,如下:

<select id="getUser" resultType="u" parameterType="Long">
        select id,user_name as userName,password,address from user2 where id = #{id}
</select>
resultMap来解决

1.首先我们给resultMap去了一个id,这个id是resultMap的唯一标识符,我们在后面引用这个resultMap的时候就是通过这个id来引用,然后还定义了type属性,type属性指明了这个resultMap它对应的是哪个JavaBean。
2.在resultMap节点中,id表示哪个字段代表这主键,result节点定义了普通的映射关系,这里的property表示JavaBean中的属性名称,column表示数据库中的字段名称,javaType代表JavaBean中该属性的类型,jdbcType则表示数据库中该字段的类型,

<resultMap id="userMap" type="org.sang.bean.User">
        <id property="id" column="id" javaType="long" jdbcType="NUMERIC"/>
        <result property="userName" column="user_name" javaType="string" jdbcType="VARCHAR"/>
        <result property="password" column="password" javaType="string" jdbcType="VARCHAR"/>
        <result property="address" column="address" javaType="string" jdbcType="VARCHAR"/>
    </resultMap>

参数传递

一、Map集合传递参数

我们可以将参数装入Map集合中传入,使用Map集合传递参数的话需要我在UserMapper接口中定义方法的时候参数就先设置为Map,如下:

map.put("address","xxx");
map.put("name","xxx");
public ArrayList<User> getUserByAddressAndName2(Map<String,String> map);

然后在userMapper.xml中将map中的数据提取出来:

<select id="getUserByAddressAndName2" resultMap="userMap">
        SELECT * FROM user2 WHERE address=#{address} AND user_name LIKE concat(#{username},'%')
    </select>
二、使用@Param注解

在数据提交的过程中,mybatis会以@Param提供的名称为准,如此,我们在userMapper.xml中可以这样来定义(注意我们我们不再需要指定参数类型):

public List<User> getUserByAddressAndName(@Param("username") String username, @Param("address") String address);

<select id="getUserByAddressAndName" resultMap="userMap">
        SELECT * FROM user2 WHERE address=#{address} AND user_name LIKE concat(#{username},'%')
    </select>
三、使用JavaBean

前面的方式按说已经很完美了,但是还有一种情况就是如果参数特别多的话,这样写起来也是非常麻烦的一件事,所以mybatis支持我们在传参的时候可以直接传入对象,传入对象的话需要我们先创建对象类,如下:

public ArrayList<User> getUserByAddressAndName3(UserParams params);
<select id="getUserByAddressAndName3" resultMap="userMap" parameterType="org.sang.bean.UserParams">
        SELECT * FROM user2 WHERE address=#{address} AND user_name LIKE concat(#{username},'%')
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值