Mybatis常用注解

基础常用注解

@Select("select * from user where userid=#{userid}")
User queryUserByuserid(Integer userid);
@Insert("insert into user values(NULL,#{username1},#{userpwd1})")
//输出映射最好在配置文件中配置,在注解中直接指明ID即可
@ResultMap("userRM")
//如果类似uuid()使用方式,则使before为true即可
@SelectKey(before =false,keyColumn = "userid",keyProperty = "userid1",
               //程序中指明类型一律用类对象
        resultType =Integer.class,statement ="select last_insert_id()")
void insertUser(User user);
//注意只有SELECT查询操作才需使用@ResultMap
@Delete("delete from user where userid=#{userid1}")
void delUser(Integer userid);

对于多个参数的特殊处理

//对于使用两个参数去获取User对象
@Select("select * from user where username=#{usernameParam} and userpwd=#{userpwdParam}")
@ResultMap("userRM")
User queryUserByNameAndPwd(@Param("usernameParam") String username,

                           @Param("userpwdParam") String userpwd);
@Update("update user set username=#{user.username1},userpwd=#{user.userpwd1} where userid=#{userid}")
//对于单个参数时可以直接使用,但参数必须是JavaBean或者是其属性
//多个参数需要用到@Param注解并指明参数名称
void updateUserById(@Param("userid") Integer userid,
                    @Param("user") User user);

常用注解关系映射

@Select("select * from user inner join t_order on t_order.userid=user.userid where orderid=#{orderid}")
<!--一对一的映射,即利用orderid查询出对应订单及用户信息-->
<resultMap id="orderRM" type="order">
    <id column="orderid" property="orderid"></id>
    <result property="comments" column="comments"></result>
    <association property="user" javaType="com.domain.User">
        <id property="userid" column="userid"></id>
        <result property="username" column="username"></result>
        <result property="userpwd" column="userpwd"></result>
    </association>
</resultMap>
<!--一对多的映射,利用userid查出用户以及对应所有订单-->
<!--注意关键字collection/ofType-->
<resultMap id="userRM" type="user">
    <id property="userid" column="userid"></id>
    <result property="username" column="username"></result>
    <result property="userpwd" column="userpwd"></result>
    <collection property="orders" ofType="com.domain.Order">
        <id column="orderid" property="orderid"></id>
        <result property="comments" column="comments"></result>
    </collection>
</resultMap>
//此处使用左外连接的原因在于用户可能没有订单信息,但用户信息不可以为空
@Select("select * from user left join t_order on user.userid=t_order.userid where user.userid=#{userid}")
//实体中对于order的属性处理为--->private List<Order> orders;
//多对多映射时需要注意的是查询语句为三表连接,可以根据orderid获取goods信息,也可以根据goodsid获取对应order信息,分别使用collection作输出映射即可

说明

1:一般对select查询设置注解@ResultMap,而对insert操作设置注解@SelectKey
2:配置文件和注解是可以同时生效的;比较简单的CRUD使用注解即可,复杂的mybatis操作如resultMap的定义、Sql片段(不确定条件的查询/不确定条件的更新)以及参数为List时使用的循环操作需要在配置文件中实现
3:注意一个方法的实现不能由配置文件和注解同时定义(配置文件例如sql片段可以和@ResultMap/@Param等注解结合使用)

SQL片段(查询条件不确定时)

 <select id="queryPartUserTest" resultMap="userRM">
--         查询条件不确定时,可以采用这种结构来实现条件的即时更改
--         实际上也可以在where之后拼凑1=1去实现,但这样的缺点在于
--         会使除2之后列索引失效,where标签有自动拼凑where以及去除第一个and的效果
        SELECT * FROM user
        <where>
--         此判断可以表示当Map的键userid对应的值不为空时则将值#{userid}赋给列名userid
            <if test="userid!=null and userid!=' ' ">
                AND userid=#{userid}
            </if>
            <if test="username!=null">
                AND username=#{username}
            </if>
            <if test="userpwd!=null">
                AND userpwd=#{userpwd}
            </if>
        </where>
    </select>

补充:使用like模糊查询时,对于"%“和”_"在sql语句中的使用应该放入单引号中,而
"#{}“是会自动生成单引号形式的语句,所以此时只能使用”${}"格式的占位符,示例

AND DevName LIKE '%${devName}%'

常用sql片段抽离

<sql id="sqlPart1">
    <where>
        <if test="userid!=null">
            AND userid=#{userid}
        </if>
        <if test="username!=null">
            AND username=#{username}
        </if>
        <if test="userpwd!=null">
            AND userpwd=#{userpwd}
        </if>
    </where>
</sql>
--          在要引用的部分使用该标签即可
       <include refid="sqlPart1"></include>

SQL片段(插入条件不确定时)

<insert id="insertPartUser">
    UPDATE user
    <trim prefix="set" suffixOverrides=",">
        <if test="username!=null">
            username=#{username},
        </if>
        <if test="userpwd!=null">
            userpwd=#{userpwd},
        </if>
    </trim>
    WHERE userid=#{userid}
</insert>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值