mybatis的 @param不能和实体类一起使用

背景在执行插入语句的使用,想要使用selectkey 获取到插入之后的标识码,但是这个语句同时服务于 现状表(A)和历史表(A_ls),所以就需要一个字段控制插入那个表,最初使用的 isHIs 来控制是插入 A 还是A_ls

因此DAO 那里就的方法就写成了 Long saveA(A a ,@Param(“isHis”) @Param(“isHis”) boolean isHis) ;

对应的插入语句为

 <insert id="saveA" parameterType="org.example.A">
        <selectKey keyProperty="id" order="BEFORE" resultType="Long">
            <if test="_databaseId=='postgresql'">
                 // 获取 A 表的 id
            </if>
            <if test="_databaseId=='mysql'">
                <choose>
                    <when test="isHis">
                      // 获取A_ls表的Id
                    </when>
                    <otherwise>
                        // 获取A 的Id
                    </otherwise>
                </choose>
            </if>
        </selectKey>
        insert into
        <choose>
            <when test="isHis">
               A_ls
            </when>
            <otherwise>
                A
            </otherwise>
        </choose>
        (//A表要插入的字段)
        values(// A表要插入的字段的值)
    </insert>

报错信息
在这里插入图片描述

改进方法 把参数 isHis 去掉,加到插入的实体类中方法变为Long saveA(A a);,其它不变

MyBatis使用 `@Param` 标注实体入参后,要实现输入实体. 直接弹出实体参数供选择,可从以下方面着手: #### 确保IDE配置正确 IntelliJ IDEA默认具备代码自动补全功能,输入实体类 `.` 后,按下 `Ctrl + 空格`(Windows/Linux)或 `Command + 空格`(Mac)可触发自动补全列表,显示实体类的属性方法。若自动补全未正常工作,可检查 `File` -> `Settings`(Windows/Linux)或 `IntelliJ IDEA` -> `Preferences`(Mac),在搜索框输入 `Code Completion`,确保 `Autopopup code completion` 选项被勾选,也可调整延迟时间等参数。 #### 保证实体类定义规范 实体类的属性要有对应的 getter setter 方法,这样IDE才能准确识别并在自动补全列表中显示这些属性。例如: ```java public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` #### 在Mapper接口中正确使用 `@Param` 注解 在Mapper接口方法里使用 `@Param` 注解标注实体入参,示例如下: ```java import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface UserMapper { List<User> getUserList(@Param("user") User user); } ``` #### 在XML映射文件或注解SQL中正确引用实体参数 在XML映射文件中,可通过 `#{实体别名.属性名}` 引用实体属性,例如: ```xml <select id="getUserList" resultType="com.example.entity.User"> SELECT * FROM user WHERE name = #{user.name} AND age = #{user.age} </select> ``` 在注解SQL中同样可以这样引用: ```java import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE name = #{user.name} AND age = #{user.age}") List<User> getUserList(@Param("user") User user); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值