Mybatis总结--传参二

#叫做占位符

Mybatis是封装的JDBC 增强版 内部还是用的jdbc

每遇到一个#号 这里就会变为?占位符

一个#{}就是对应一个问号 一个占位符

用这个对象执行sql语句没有sql注入的风险

八、多个参数**-使用@Param**

当 Dao 接口方法有多个参数,需要通过名称使用参数:
在方法形参前面加入@Param("自定义参数名 "),
mapper 文件使用#{自定义参数名}。

8.1、sql映射文件,StudentDao.xml:
java 复制代码
  <select id = "selectMulitParam" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{myname} or age = #{myage}
  </select>
8.2、StudentDao接口:
java 复制代码
   public List<Student> selectMulitParam(@Param("myname") String name,
                                         @Param("myage") Integer age);
8.3、测试代码及结果:
java 复制代码
    @org.junit.Test
    public void test04(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        List<Student> students = dao.selectMulitParam("李四",23);
        students.forEach(student -> System.out.println(student));

    }

九、多个参数**-**使用对象

**使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。**灵活又方便

语法格式: #{ property属性名,javaType=java 数据类型的全限定名称,jdbcType=Mybatis定义的数据库中类型的名称 }

javaType, jdbcType 的类型 MyBatis 可以通过反射获取,一般不需要设置。

常用格式 #{ property }

9.1、代表数据的实体类:
java 复制代码
public class QueryParam {
    private String queryName;
    private Integer queryAge;
9.2、sql映射文件,StudentDao.xml:
java 复制代码
 <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
 </select>
9.3、StudentDao接口:
java 复制代码
 public List<Student> selectMultiObject(QueryParam queryParam);
9.4、测试代码及结果:
java 复制代码
   @org.junit.Test
    public void test05(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        QueryParam queryParam = new QueryParam("王五",23);
        List<Student> students = dao.selectMultiObject(queryParam);
        students.forEach(student -> System.out.println(student));
    }
9.5、总结:

++所以我们传参的时候灵活一点,参数可以是现成的java对象,如Student;或者用自定义的java对象QueryParam:++

java 复制代码
public List<Student> selectMultiObject(QueryParam queryParam);

public List<Student> selectMultiStudent(Student student);
XML 复制代码
    <select id = "selectMultiObject" resultType="com.lifang.domain.Student">
        select id,name,email,age from student where name = #{queryName} or age =#{queryAge}
    </select>


    <select id = "selectMultiStudent" resultType = "com.lifang.domain.Student">
        select id,name,email,age from student where  name = #{name} or age = #{age}
    </select>

十、多个参数**-**使用对象

相关推荐
脚踏实地皮皮晨8 分钟前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
xieliyu.9 分钟前
Java 线程池入门详解:线程池基础定义 + ThreadPoolExecutor 全参构造方法逐参数解析
java·开发语言·idea·javaee
一条泥憨鱼11 分钟前
【从0开始学习计算机网络】| HTTP方法疑点解析
开发语言·计算机网络·http
老白干2 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
圆山猫9 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
微学AI9 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管9 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨9 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡10 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖10 小时前
Java深入解析篇九之NIO详解
java·网络·nio