Mybatis参数类型传递总结

本文总结了Mybatis中三种参数类型的使用:1)List类型,用于批量插入操作;2)Map类型,通过Map参数查询数据;3)利用foreach标签进行集合遍历,实现条件查询。详细介绍了对应的Dao接口定义和mapper文件配置。

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

1、List类型
dao层:int batchAddCarNoticeLog(List<MealCarNoticeLog> noticeList);
mapper文件:(批量插入)
<insert id="batchAddCarNoticeLog" parameterType="java.util.List">
insert into biz_car_notice_log
(notice_id, car_id, update_user_no,
need_notice_user_no, goods_id, goods_name,
number, add_flag, notice_flag,
create_time, update_time, delete_flag
)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.noticeId,jdbcType=VARCHAR}, #{item.carId,jdbcType=VARCHAR}, #{item.updateUserNo,jdbcType=VARCHAR},
#{item.needNoticeUserNo,jdbcType=VARCHAR}, #{item.goodsId,jdbcType=VARCHAR}, #{item.goodsName,jdbcType=VARCHAR},
#{item.number,jdbcType=INTEGER}, #{item.addFlag,jdbcType=VARCHAR}, #{item.noticeFlag,jdbcType=VARCHAR},
#{item.createTime,jdbcType=BIGINT}, #{item.updateTime,jdbcType=BIGINT}, #{item.deleteFlag,jdbcType=VARCHAR}
)
</foreach>
2、Map类型
Dao接口:List<MealCarNoticeLog> getCarNoticeListByCarIdAndUserNo(Map<String,String> map)
mapper映射文件
<select id="getCarNoticeListByCarIdAndUserNo" parameterType="java.util.Map" resultMap="BaseResultMap" >
select
notice_id, car_id, update_user_no, need_notice_user_no, goods_id, goods_name, number,
add_flag, notice_flag, create_time, update_time, delete_flag
from biz_car_notice_log
where car_id = #{carId,jdbcType=VARCHAR}
AND need_notice_user_no = #{needNoticeUserNo,jdbcType=VARCHAR}
AND notice_flag = '0'
AND delete_flag = 'N'
</select>
3、Mapper映射文件foreach使用
<select id="getPropertyGroupList" parameterType="java.util.List" resultMap="PropertyGroupListMap">
select pg.group_id,pg.group_name,p.property_id,p.property_name
from property p left join property_group pg
on p.group_id = pg.group_id where IFNULL(pg.delete_flg,'N') = 'N'
AND IFNULL(p.delete_flg,'N') = 'N'
AND pg.group_status = 1
AND p.property_id in
<foreach collection="list" item="propertyId" index="index" open="(" close=")" separator=",">
#{propertyId}
</foreach>
</select>




<think>好的,我现在需要帮助用户了解在MyBatis中如何使用实体类作为参数类型。首先,我得回忆一下MyBatis的基本用法,特别是参数传递方面的知识。 用户提到了实体类作为参数类型,可能是在Mapper接口的方法中传递实体类对象,然后在XML映射文件中使用这个对象的属性来构建SQL语句。根据引用[2]和[3],用户可能已经知道传递简单参数的方法,现在想扩展到实体类。 首先,我需要确定步骤。步骤可能包括:定义实体类、编写Mapper接口方法、配置XML映射文件中的SQL语句,以及调用方法时的注意事项。同时,可能还需要处理参数引用,比如在SQL中使用#{property}来访问实体类的属性。 然后,示例部分很重要。用户需要一个具体的例子,比如插入用户信息,其中User实体类有name和age属性。Mapper接口中的方法可能是int insertUser(User user);,对应的XML中使用insert语句,参数是user的各个属性。 还要注意可能的问题,比如参数名称是否正确,是否与实体类属性匹配,是否需要使用@Param注解(不过MyBatis通常不需要,当只有一个参数时)。另外,引用[4]提到MyBatis-Plus的条件构造方法,但用户的问题是关于MyBatis原生功能,所以可能需要区分。 需要确保用户理解如何在XML中正确引用实体类的属性。例如,在values部分使用#{name}和#{age},这些名称必须与实体类的getter方法对应。同时,可能提到动态SQL的使用,比如if标签来判断属性是否为空,但这可能超出当前问题的范围。 还要考虑错误处理,比如如果实体类的属性名和数据库列名不一致,可能需要使用resultMap或者别名,但作为参数类型时,可能更多是依赖属性名正确映射。 总结步骤应该是:定义实体类→创建Mapper接口方法→配置XML中的SQL语句→调用方法传递实体参数。同时给出代码示例,并解释每个部分的作用。 可能的相关问题包括参数传递的其他方式,比如Map或者多个参数,以及如何处理复杂类型,如嵌套实体类。此外,可以提到MyBatis-Plus中的@TypeHandler注解(引用[1]和[3]),但用户的问题是关于参数类型,不是类型处理,所以可能作为相关问题提出。</think>### MyBatis 使用实体类作为参数类型的实现方法及示例 在 MyBatis 中,实体类作为参数类型主要用于传递复杂对象,通过属性映射直接生成 SQL 语句中的参数值。以下是具体实现步骤和示例: --- #### **1. 定义实体类** 假设有一个 `User` 实体类,包含 `id`、`name`、`age` 属性: ```java public class User { private Integer id; private String name; private Integer age; // 省略 getter/setter 方法 } ``` --- #### **2. 编写 Mapper 接口方法** 在 Mapper 接口中声明方法时,直接将实体类作为参数类型: ```java public interface UserMapper { // 插入用户信息(参数为 User 对象) int insertUser(User user); // 根据条件查询用户(参数为 User 对象) List<User> selectByCondition(User user); } ``` --- #### **3. 配置 XML 映射文件** 在 XML 文件中,通过 `#{属性名}` 直接引用实体类的属性: ```xml <!-- 插入用户 --> <insert id="insertUser" parameterType="com.example.User"> INSERT INTO user (name, age) VALUES (#{name}, #{age}) </insert> <!-- 动态条件查询 --> <select id="selectByCondition" parameterType="com.example.User" resultType="com.example.User"> SELECT * FROM user <where> <if test="name != null">AND name = #{name}</if> <if test="age != null">AND age = #{age}</if> </where> </select> ``` --- #### **4. 调用方法** 在业务层直接传递实体类对象作为参数: ```java User user = new User(); user.setName("Alice"); user.setAge(25); // 插入用户 userMapper.insertUser(user); // 条件查询 List<User> result = userMapper.selectByCondition(user); ``` --- #### **关键点说明** 1. **参数类型匹配** - XML 中 `parameterType` 需指定实体类的全限定名(如 `com.example.User`)。 - `#{属性名}` 必须与实体类的字段名严格一致(如 `#{name}` 对应 `user.getName()`)[^3]。 2. **动态 SQL 支持** 使用 `<if>` 标签可动态生成 SQL 条件,避免拼接字符串的复杂性[^4]。 3. **事务与日志** 若需调试 SQL,可启用 MyBatis 日志(如配置 `log-impl: org.apache.ibatis.logging.stdout.StdOutImpl`)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值