Mybatis-查询数据传入传出和CRUD

2023-05-16

Mybatis

查询语句的入参类型

基本类型

javabean类型:使用时要与 属性名对应 根据对象的属性名获取属性值

map类型 :匹配參數集合map中key的名字

数组|list类型:
​ foreach遍历参数list或者数组
​ collection=“array” 参数类型 array | list
​ item : 指代每次循环从集合或者数组中拿出的数据(变量名)
​ separator: 每个数据之间额分隔符
​ open: 所有遍历输出的的数据之前以什么内容开始
​ close : 所有遍历输出的的数最后以什么结束

 	select * from emp where empno in	
	<foreach collection="array" item="item" separator="," open="(" close=")">
        #{item}
    </foreach>

查询语句的返回类型

返回类型为:

list

	<!--
        根据员工姓名查询员工姓名  模糊查询 like
        resultType: 如果返回值为集合,添加集合中数据的泛型
    -->
    <select id="queryEmpByNameLike" parameterType="string" resultType="string">
        select ename from emp where ename like '%'||#{ename}||'%'
    </select>
//list
List<String> list = session.selectList("com.xxxx.mappers.EmpMapper3.queryEmpByNameLike","A");

map

<!--Map: 返回值的结果的字段名 当做key,值当做value,一条数据对应一个Map集合,多条数请返回List<Map>-->
    <select id="queryMapById" parameterType="_int" resultType="map">
        select empno,ename,sal,comm,deptno from emp where empno = #{id}
    </select>
//map
        Map<String,Object> map = session.selectOne("com.xxxx.mappers.EmpMapper3.queryMapById",7369);
        System.out.println(map);

List

返回的是多条数据时使用

	<!--List<Map> 根据员工名查询员工信息-->
    <select id="queryMapByName"  resultType="map">
        select empno,ename,sal,comm,deptno from emp where ename in (
        <foreach collection="list" item="item" separator=",">
            #{item}
        </foreach>
        )
    </select>
//List<Map>
        List<Map<String,Object>> list2 = session.selectList("com.xxxx.mappers.EmpMapper3.queryMapByName", Arrays.asList("SMITH","feng"));
        list2.forEach(System.out::println);

Date

//Date
        Date date = session.selectOne("com.xxxx.mappers.EmpMapper3.queryEmpByDate",7369);
        System.out.println(new SimpleDateFormat().format(date));

增加语句

<!--测试增删改的功能 : 默认返回值为影像行数   没写完全部属性-->
    <insert id="addEmp" parameterType="emp">
        insert into emp(empno,ename,sal,deptno) values(#{empno},#{ename},#{sal},#{deptno})
    </insert>

增删改查的事务问题

测试事务问题 : 没有自动提交,需要手动提交
想要自动提交: openSession(boolean)
手动提交: session.commit() session.rollback()

接口绑定方案

创建接口 抽象方法对应sql语句的输入与输出

定义xml文件与接口名相同

  1. xml文件名要与接口名保持一致
  2. namespace属性值 必须与接口的权限定名
  3. id属性必须与抽象方法名保持一致
  4. 返回值类型和参数类型与方法的返回值和参数保持一致

注意:如果抽象方法的参数列表只有一个参数,sql语句的占位符的名字可以任意定义
抽象方法的参数列表有多个参数,则sql语句的占位符的名字[arg0, arg1, param1, param2]

实现

  //1.获取连接
        SqlSession session = SessionUtils.getSession();
        //2.获取mybatis提供的接口的实现类对象
        //接口多态
        DeptMapper mapper = session.getMapper(DeptMapper.class);
        List<Dept> list = mapper.queryDeptById(10,30);
        list.stream().forEach(System.out::println);

CRUD

多参数匹配参数名字问题

@Param(“deptno1”) 注解: 解决sql中占位符的名字与方法参数不同名问题

代替arg0 param1

批量CRUD

DELETE

 <!--批量删除-->
    <delete id="deleteDeptByIdSome">
        delete from dept where deptno in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </delete>

UPDATE

注意: end后面也要加;
<!--批量修改-->
    <update id="updateDeptByIdSome">
        <foreach collection="list" item="item" open="begin" close=";end;" separator=";">
            update dept set loc = #{item.loc} where deptno = #{item.deptno}
        </foreach>
    </update>

INSERT

注意使用的是dual
 <!--批量插入-->
    <!--
    insert into dept select 1, 'a', 'b' from dual union select 2, 'c', 'd' from dual
    -->
    <insert id="insertDept">
        insert into dept
        <foreach collection="list" item="item" separator="union">
            select #{item.deptno}, #{item.dname}, #{item.loc} from dual
        </foreach>
    </insert>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis-查询数据传入传出和CRUD 的相关文章

随机推荐

  • 如何使用 QToolTip

    QToolTip 是 Qt 框架中的一个类 xff0c 它可以用于在鼠标悬停在控件上时显示提示信息 下面是使用 QToolTip 的步骤 xff1a 在需要显示提示信息的控件上 xff0c 设置 setToolTip 方法 例如 xff1a
  • DbgHelp的使用方法

    DbgHelp是一个Windows平台下的调试器辅助工具 xff0c 它提供了一些函数和数据类型 xff0c 可以帮助开发者在调试时获取更多的信息 以下是DbgHelp的使用方法 xff1a 1 引入DbgHelp库 在代码中使用DbgHe
  • QString转化为char*

    QByteArray temp ip span class token operator 61 span mqtt config span class token punctuation span ip span class token p
  • qt转换Xcode编译

    usr local Cellar qt 6 0 2 bin qmake QTForXcode pro spec macx xcode
  • Java学习路线总结(思维导图篇)

    x1f3c6 作者简介 xff1a 哪吒 xff0c CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 x1f4aa xff0c 专注Java硬核干货分享 xff0c 立志做到Java赛道全网T
  • 刚毕业的表弟年薪40w......程序员薪资天花板?

    前不久 xff0c 腾讯2022校招 应届毕业生年薪 40 万 刷屏了 尽管互联网大厂的薪资高不算什么新鲜事儿 xff0c 但这个热搜仍然让我大受震撼 腾讯校招官网显示 xff0c 2022届腾讯校招开放技术 产品 设计等岗位共计 78 个
  • 运维面试题--Linux系统 启动过程

    简述 xff1a 1 开机BIOS自检 2 MBR引导 3 grub引导菜单 4 加载内核kernel 5 启动init进程 6 读取inittab文件 xff0c 执行rc sysinit rc等脚本 7 启动mingetty xff0c
  • Dockerfile中echo命令不能加 -e 选项

    以换源举例 xff1a span class token builtin class name export span span class token assign left variable CDN span span class to
  • jdbc环境配置及操作步骤

    文章目录 jdbc环境配置jdbc 操作步骤 jdbc 环境配置 jdbc开发 xff0c 需要提前先准备驱动包 下载一个mysql驱动包 xff09 及配置 xff08 项目配置引入这个驱动包 下载链接 xff1a mysql驱动包 注意
  • 在柱状图中找最大矩形——O(n)时间复杂度java实现

    最近在刷leetcode xff0c 又碰到了这道题 xff0c 想起来当时算法有些瑕疵 xff0c 所以将最新的AC代码更新在最上面做个对比 xff0c 具体思路见注释 public class Solution 思路 主要是使用一个栈来
  • 记一次Hive平台清洗数据

    场景 xff08 简化 xff09 现有文章表Article和评论表Comment xff1b 一篇文章可以有多个评论 xff1b 文章表Article主要字段 xff08 articleId xff09 xff1b 评论表Comment主
  • UART协议及串口回环

    UART协议及串口回环 一 异步通信的分类1 UART xff08 通用异步收发器 xff09 2 RS4223 RS4854 Modbus5 接口标准 二 UART协议要求1 空闲状态2 起始位3 数据位4 校验位5 停止位6 波特率7
  • 使用MapReduce实现遗传算法

    摘要 xff1a 遗传算法在大规模问题的求解中得到越来越多的应用 传统的基于MPI的并行遗传算法需要知道机器架构的细节 另一方面 xff0c 由Google提出的MapReduce可用于开发具有扩展性和容错能力的应用 xff0c 是一个强大
  • 2021-03-08

    解决大疆无人机电池电压不平衡出现电池错误提示无法起飞 一个简单的笨办法 xff0c 处理某块电芯偏低 xff0c 而另一块明显偏高 xff0c 经平衡和数据修正后 xff0c 在使用中反复 xff0c 说明各电芯之间容量发生物理不可逆的容量
  • 如何学习编程语言-API学习

    作为一个本科非计算机科班出身编程水平又很菜的我来说 xff0c 很多学习方法都需要我自己去总结摸索 xff0c 我的老师朋友可以帮我解决具体的问题 xff0c 给我提供足够的资源 xff0c 但是最关键的细节把握和吸收消化还是需要我自己去完
  • 49天精通Java,第9天,java final关键字

    nbsp 目录 一 final nbsp 1 修饰引用 nbsp 2 修饰方法 3 修饰类 二 Java中的对象析构与finalize方法
  • 正点原子----Linux设备树详解

    linux设备树 1 什么是设备树2 DTS DTB DTC的关系3 如何编译设备树4 DTS基本结构4 1 语法4 2 设备树在系统中的体现4 3 尝试自己添加节点4 4 尝试对根节点追加信息 5 设备树特殊节点5 1 chosen子节点
  • 《嵌入式实时操作系统µC/OS-II》学习笔记(二)

    第三章 xff1a 内核结构 临界段 xff1a 也就是需要保证原子操作的代码段 由这里的说法 xff0c 绝大多数或者说所有的 xff08 xff09 内核都是都是使用开关中断的方式来处理 在 uC OS II 中 xff0c 使用 OS
  • SHELL-----脚本执行 、定义变量、特殊变量、read的用法、命令结果赋值给变量

    一 三种脚本执行方法 1 sh script sh bash script sh 没有执行权限时 2 path script sh script sh 绝对路径 xff0c 当前目录下 3 source script sh script s
  • Mybatis-查询数据传入传出和CRUD

    Mybatis 查询语句的入参类型 基本类型 javabean类型 xff1a 使用时要与 属性名对应 根据对象的属性名获取属性值 map类型 xff1a 匹配參數集合map中key的名字 数组 list类型 xff1a foreach遍历