42.Mybatis动态SQL注解、代理模式

本文介绍了Mybatis使用注解进行动态SQL构建的三种方式,包括自行拼接SQL、使用Mybatis SQL类以及直接应用增删改查注解。接着详细探讨了代理模式,包括静态代理和动态代理的差异,特别是JDK和CGLIB动态代理的实现。此外,还展示了如何结合自定义注解和动态代理实现业务层的事务控制。

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

mybatis注解开发

@InsertProvider

@DeleteProvider

@UpdateProvider

@SelectProvider

以上四个注解用于使用SQL构建器来完成动态SQL的组建。

注解中有两个属性:type和method

type:用于构建SQL语句的类型的字节码对象

method:构建SQL语句的方法名称

案例:同时查询多个id值的用户对象

动态SQL的三种实现方式(注解实现动态sql)
方式一:自己拼接SQL语句

sql构建器

public class SqlBuilder {
   
    public String getSelectUserSql(@Param("ids") List<Integer> ids){
   
        String sql="select * from t_user where id in(";
        for (int i = 0; i < ids.size(); i++) {
   
            if(i<ids.size()-1) {
   
                sql += ids.get(i) + ",";
            }else {
   
                sql += ids.get(i) + ")";
            }
        }
        return sql;
    }
}

mapper层

	@SelectProvider(type =/*产生SQL语句的类的字节码对象*/SqlBuilder.class,method =/*产生SQL语句的方法名称*/"getSelectUserSql")
    List<User> findByIds(@Param("ids") List<Integer> ids);

测试类

	public static void main(String[] args) {
   
        UserMapper mapper = MybatisUtil.getMapper(UserMapper.class);
        List<User> users = mapper.findByIds(Arrays.asList(1, 2, 3, 4, 5));
        users.forEach(user->{
   
            System.out.println(user.getUsername());
        });
    }
方式二:使用mybatis提供的SQL类来完成动态SQL的创建
package com.woniuxy.utils;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;

import java.util.List;

public class SqlBuilder {
   
    public String getSelectUserSql(@Param("ids") List<Integer> ids){
   

        //生成动态SQL的方式二
        String condition="id in (";
        for (int i = 0; i < ids.size(); i++) {
   
            if(i<ids.size()-1) {
   
                condition += ids.get(i) + ",";
            }else {
   
                condition += ids.get(i) + ")";
            }
        }
        String sql = new SQL().SELECT("*")// SELECT *
                .FROM("t_user")// from t_user
                .WHERE(condition).toString();

        return sql;
    }
}

方式三:不使用provider,直接使用增删改查注解完成SQL语句的执行

注意:此处不再使用@SelectProvider,而是使用@Select注解完成动态SQL的执行,将XML中的动态SQL写到<s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值