java学习笔记 day8.6

news2025/1/9 15:09:17

修改数据

1.修改数据时判断name参数不为空且非空字符串,判断salary是不为空则添加记录

<update id="editStaffItem">
    update staff
    <set>
        <if test='name!=null and name!=""'>
            name=#{name},
        </if>
        <if test="salary!=null">
            salary=#{salary},
        </if>
    </set>
    <where>
        id=#{id}
    </where>
</update>

2.在dao层声明该方法

int editStaffItem(Staff staff);

3.在controller类中,编写代码来接收http请求

@PutMapping("staffitem")
public String editStaffItem(Staff staff) {
    dao.editStaffItem(staff);
    return "success";
}

批量添加数据

1.在mapper.xml文件中写入映射语句,定义一个名为addList的插入语句,用于向staff表中批量插入多条数据; <foreach> 元素来循环处理列表中的每一项,并为每一条记录构建一个插入语句;

<foreach> 的属性如下:

  • collection: 指定要循环遍历的集合变量。在这个例子中,变量名为 list,通常这个变量应该是在 MyBatis 映射文件对应的接口方法中传递过来的一个 List 对象。
  • item: 指定在循环体内部对单个元素的引用变量。在这个例子中,变量名为 it,表示当前迭代的元素。
  • separator: 在每次循环之间添加的分隔符。在这个例子中,使用 , 作为分隔符,这意味着每条插入语句之间将用逗号 , 分隔。
<insert id="addList">
    insert into staff(code,name,salary,username,userpass)
    <!--循环 -->
    values
    <foreach collection="list" item="it" separator=",">
        (#{it.code},#{it.name},#{it.salary},#{it.username},#{it.userpass})
    </foreach>

</insert>

2.在Dao层声明该方法

int addList(List<Staff> list);

3.在Controller层编写代码接收请求

   @PostMapping("staff")
    public String addStaff(Staff staff) {
        staff=new Staff();
        staff.setCode("10001");
        staff.setName("李思思");
        staff.setSalary(new BigDecimal(2000));
        staff.setUsername("lisisi");
        staff.setUserpass("123123");
        List list=new ArrayList();
        list.add(staff);

        staff=new Staff();
        staff.setCode("10002");
        staff.setName("小甜甜");
        staff.setSalary(new BigDecimal(2000));
        staff.setUsername("牛夫人");
        staff.setUserpass("123123");
        list.add(staff);


//     dao.addStaff(staff);
        dao.addList(list);
        return "success";
    }

模糊查询

1.mapper

这里定义了一个名为 getStaff 的查询语句,用于从 staff 表中查询员工信息,并将结果映射到 com.easy.bean.Staff 类型的对象上。使用了 <where><if> 元素来动态构建 SQL 语句中的 WHERE 子句。<if> 元素用于根据传入的参数 checktext 是否存在和非空来决定是否包含 WHERE 子句中的条件.

  • <if test="checktext!=null and checktext !=''">:如果 checktext 参数不为空且非空字符串,则在 SQL 语句中添加 name like #{liketext}。这里使用了 and 运算符来确保 checktext 不仅不为 null,而且也不是空字符串。
  • <bind name="liketext" value="'%'+checktext+'%'">:这里使用 <bind> 元素来定义一个新的变量 liketext,其值为 % 加上 checktext 再加上 %。这是为了进行模糊查询,即查询名字中包含 checktext 的所有员工
    <select id="getStaff" resultType="com.easy.bean.Staff">
    select * from staff
    <!--         根据参数不同组合出不同的·SQL语句  动态SQL语句 标签-->
    <where>
       <!--             编写条件语句 如果where标签中有内容 会自动添加关键字-->
        <if test="checktext!=null and checktext !=''">
           <!-- 重新定义参数内容-->
            <bind name="liketext" value="'%'+checktext+'%'"></bind>
            name like #{liketext}
        </if>
    </where>
    </select>

2.Dao层

List<Staff> getStaff(String checktext);

3.Controller层

    @GetMapping("staff")
    public CommonResult getStraff(String checktext) {
        List<Staff> list=dao.getStaff(checktext)
        return CommonResult.success(list);
    }

筛选范围查询

1.定义了一个名为 getStaffBySalary 的查询语句,用于从 staff 表中查询员工信息,并将结果映射到 com.easy.bean.Staff 类型的对象上。

使用了 <choose>, <when>, 和 <otherwise> 元素来动态构建 SQL 语句中的 WHERE 子句。这些元素用于根据传入的参数 salarytext 来决定如何构造查询条件。

  • <choose>:这是一个选择器,它会在多个 <when> 条件中选择第一个满足条件的 <when>,如果没有 <when> 条件满足,则执行 <otherwise> 中的代码。
  • <when test='salarytext=="低"'>:如果 salarytext 的值为 "低",则在 SQL 语句中添加 salary <= 300
  • <when test='salarytext=="中"'>:如果 salarytext 的值为 "中",则在 SQL 语句中添加 salary > 300 and salary <= 500
  • <otherwise>:如果 salarytext 的值既不是 "低" 也不是 "中"(即默认情况下),则在 SQL 语句中添加 salary > 500
    <select id="getStaffBySalary" resultType="com.easy.bean.Staff">
        select * from staff
        <where>
            <!--参数名 salarytext-->
            <choose>
                <when test='salarytext=="低"'>
            <!--&lt在这里是小于 -->
                    salary &lt;= 300
                </when>
                 <when test='salarytext=="中"'>
                     salary &gt;300 and salary &lt;= 500
                 </when>
                 <otherwise>
                     salary &gt; 500
                 </otherwise>
            </choose>
        </where>
    </select>

2.声明 List<Staff> getStaffBySalary(String salarytext); 是一个接口方法定义,描述一个名为 getStaffBySalary 的方法,该方法接受一个字符串参数 salarytext 并返回一个 Staff 对象列表。

List<Staff> getStaffBySalary(String salarytext);

3.List<Staff> list=dao.getStaffBySalary(salarytext);: 这一行代码调用了 DAO (Data Access Object) 层的方法 getStaffBySalary,该方法接受 salarytext 参数并返回一个 List<Staff> 类型的对象。

return CommonResult.success(list);: 这一行代码创建了一个 CommonResult 对象,使用 success 静态方法,并将 list 作为参数传递

@GetMapping("staff/salary")
    public CommonResult getStaffBySalary(String salarytext) {
        List<Staff> list=dao.getStaffBySalary(salarytext);
        return CommonResult.success(list);
    }

关联对象结果集

1.定义了一个名为 staffAndDepresultMap,用于将查询结果映射到 Staff 类型的对象上

将查询结果中的 dep_id 列的值作为参数传递给另一个映射器方法 getStaffDep,该方法返回一个部门对象 (Department),这个对象将被映射到 Staff 对象的 dep 属性上

定义getStaffDep方法:查询语句,用于根据员工的部门 ID (dep_id) 查询对应的部门信息。其中 #{dep_id} 是一个预编译参数,它的值将由调用 getStaffDep 方法时传入的参数决定

定义getStaffAndDep方法

1<select id="getStaffAndDep" resultMap="staffAndDep">
2    select * from staff
3</select>

这是一个查询语句,用于获取所有的员工信息。这里使用了前面定义的 resultMap (staffAndDep) 来映射查询结果

过程:

  1. 定义了一个 resultMap,用于将员工查询结果映射到 Staff 对象上。
  2. 通过子查询(getStaffDep)获取每个员工对应的部门信息,并将其映射到 Staff 对象的 dep 属性上。
  3. 定义了一个查询所有员工的 SQL 语句,并使用上述 resultMap 来映射查询结果。

通过这种方式,当调用 getStaffAndDep 方法时,将会返回一个包含员工信息及其对应部门的 Staff 对象列表。

    <!--一对一或一对多查询需要制定映射方式 -->
    <resultMap id="staffAndDep" type="com.easy.bean.Staff">
        <association column="dep_id" select="getStaffDep" property="dep"></association>
    </resultMap>

    <select id="getStaffDep" resultType="com.easy.bean.Department">
        select * from department where id=#{dep_id}
    </select>

    <select id="getStaffAndDep" resultMap="staffAndDep">
        select * from staff
    </select>

2.Dao层

 List<Staff> getStaffAndDep();

3.Controller层

 @GetMapping("staff")
    public CommonResult getStraff(String checktext) {
        List<Staff> list=dao.getStaffAndDep();
        return CommonResult.success(list);
    }

缓存

 /*Mybatis一级缓存(默认生效,SQL session级别):SQL session 
             ---前提:同一次sql会话(设置为同一个事务)
             --具体操作:@Transactional 标注为事务,此外启动类也加注解 EnableTransactionManagement
        
        * Mybatis二级缓存(mapper级别):
              缓存失效时机:刷新时间到达,或执行增删改查操作时清空二级缓存,请求再次查询
        *缓存意义:让数据达到重用,减少mysql的负担*/

1.一级缓存: 加注解,在启动类上加@EnableTransactionManagement注解,

在要实现的方法上加@Transactional注解

在Controller层实现 

   @GetMapping("dep")
    @Transactional
    public CommonResult getDep(){
        List<Department> list=dao.getDep();
        System.out.println("------------------");
//        list=dao.getDep();
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        return CommonResult.success(list);
//        return CommonResult.success();
    }

在mapper文件中写

    <resultMap id="departmentAndStaff" type="com.easy.bean.Department">
        <!--把某个属性映射到某一个列上去
        <id column="" property="depid"></id>
        <result column="name" property="depname"></result> -->
        <result column="id" property="id"></result>
        <collection  column="id" select="getDepStaff" property="staffList"></collection>
    </resultMap

 2.二级缓存 :在Controller

    @GetMapping("dep")
//    @Transactional
    public CommonResult getDep(){
        List<Department> list=dao.getDep();
        System.out.println("------------------");
//        list=dao.getDep();
        System.out.println(list.get(0));
        System.out.println(list.get(1));
//        return CommonResult.success(list);
        return CommonResult.success();
    }

 在mapper中

    <!--  一级缓存默认开启  二级缓存 需要编写-->
    <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

    <resultMap id="departmentAndStaff" type="com.easy.bean.Department">
        <!--把某个属性映射到某一个列上去
        <id column="" property="depid"></id>
        <result column="name" property="depname"></result> -->
        <result column="id" property="id"></result>
        <collection fetchType="lazy" column="id" select="getDepStaff" property="staffList"></collection>
    </resultMap>

mybatis大于等于常用写法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LearnOpenGL-光照章节(颜色、基础光照、材质、光照贴图)

LearnOpenGL-光照章节&#xff08;颜色、基础光照、材质、光照贴图&#xff09; 颜色创建一个光照场景 基础光照一、环境光照二、漫反射光照三、镜面反射 材质光照贴图一、漫反射贴图二、镜面光贴图三、放射光贴图 颜色 我们在现实生活中看到某一物体的颜色并不是这个物体真正…

Unity强化工程 之 SpriteShape(精灵地形编辑器)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.什么是SpriteShape&#xff1f; SpriteShape 是一个灵活且功能强大的世界构建资源&#xff0c;它可以沿着形状的轮廓进…

基于springboot+vue+uniapp的“口腔助手”小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

秒懂C++之deque及反向迭代器

目录 前言 一.deque的常用接口 二.deque的原理 2.1 vector与list的优缺点 2.2 deque的原理 三.反向迭代器 四.全部代码 前言 秒懂C之List-CSDN博客 秒懂C之vector&#xff08;下&#xff09;-CSDN博客 本文后面关于反向迭代器的操作会涉及到前面的文章~ 一.deque的常用接…

WriterSide 文档、接口自动编译并部署到GitPage

WriterSide 自动编译并部署到GitPage 1. GitHub 创建空仓库2. 配置GitHub 仓库的编译部署方式3. WriteSide 创建项目4. 创建自动、编译部署配置文件5. 自动编译、部署1. GitHub 创建空仓库 在 GitHub 创建一个空的仓库 仓库创建成功后, 记录仓库的远程地址 仓库地址需要修改…

弥散制氧机与变压吸附制氧机的差异

在氧气供应领域&#xff0c;弥散制氧机和变压吸附制氧机是常见的两种设备&#xff0c;它们在工作原理、性能特点、应用场景等方面存在着显著的区别。 工作原理&#xff1a; 弥散制氧机是通过富氧膜的渗透作用&#xff0c;将空气中的氧气分离并富集&#xff0c;从而提供一定浓度…

计算机的错误计算(五十四)

摘要 回复网友关于正确计算计算机的错误计算&#xff08;五十一&#xff09;与&#xff08;五十二&#xff09;中所述案例时的 3点注意事项。 问&#xff1a;对于计算机的错误计算&#xff08;五十一&#xff09;中的案例 &#xff0c;由&#xff08;五十二&#xff09;知&a…

中国云计算技术(二)

目录 三、国产大数据库技术&#xff08;一&#xff09;阿里巴巴OceanBase&#xff08;二&#xff09;云创存储数据立方&#xff08;DataCube&#xff09; 三、国产大数据库技术 &#xff08;一&#xff09;阿里巴巴OceanBase OceanBase主要是为了解决淘宝网的大规模数据而产生…

临床数据科学中如何用R来进行缺失值的处理(上)

在临床科研中&#xff0c;由于失访、无应答或记录不清等各种原因&#xff0c;经常会遇到数据缺失的问题。本文将深入探讨医学科研中数据缺失的成因、分类、影响以及应对方法&#xff0c;结合R语言的实际应用&#xff0c;为医学研究人员提供全面的解决方案。 一、认识缺失数据 …

Python酷库之旅-第三方库Pandas(070)

目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…

AndroidStudio 两种Debug模式

第一种&#xff1a;直接运行Debug 第二种&#xff1a;运行 attach debugger to android process 优缺点&#xff1a; 第一种是需要把整个工程运行起来&#xff0c;耗时&#xff0c; 第二种是触发式调试&#xff0c;在出错的情况下&#xff0c;经过判断在出错的地方&#xff0c;…

Leetcode75-6 反转字符串中的单词

思路 1. 先把全部字符串反转 然后按空格分割字符串 最后输出即可 有一个问题就是 多个空格的情况 需要用正则表达式 参考文章【JAVA学习之字符串分割空格】_如何将字符串用不确定的空格分开-CSDN博客 分割多个空格时可以需要用到正则表达式。。 正则表达式\s表示匹配任何空白字…

乡村振兴旅游综合体建设方案

1. 乡村振兴旅游综合体概述 乡村振兴旅游综合体建设方案旨在通过现代信息技术的应用&#xff0c;如云计算、物联网、大数据等&#xff0c;实现旅游行业的智慧化升级。该方案涵盖了游客、旅游管理部门、商家等不同角色的需求&#xff0c;以期提升旅游体验&#xff0c;推动乡村振…

OpenCV专栏介绍

在当今人工智能和计算机视觉领域&#xff0c;OpenCV作为一个功能强大的开源库&#xff0c;已经成为实现各种视觉算法的基石。本“OpenCV”专栏致力于帮助读者深入理解并掌握OpenCV的使用&#xff0c;从而在计算机视觉项目中发挥关键作用。 专栏导读 随着技术的不断进步&#…

免费代理池是什么,如何使用代理IP进行网络爬虫?

互联网是一个庞大的数据集合体&#xff0c;网络信息资源丰富且繁杂&#xff0c;想要从中找到自己需要的信息要花费较多的时间。为了解决这个问题&#xff0c;网络爬虫技术应运而生&#xff0c;它的主要作用就是在海量的互联网信息中进行爬取&#xff0c;抓取有效信息并存储。然…

【原型模式】设计模式系列:高效克隆的艺术(深入解析)

文章目录 Java设计模式之原型模式详解1. 引言2. 原型模式概述2.1 定义与基本原理2.2 原型模式与其他模式的关系2.3 使用场景分析 3. Java中的Cloneable接口3.1 Cloneable接口简介3.2 Object类中的clone方法3.3 实现Cloneable接口的步骤3.4 克隆方法的重写示例 4. 深克隆与浅克隆…

Django-Oscar开发独立站/外贸商城教程与问题记录

​特别说明&#xff1a; 本博客为个人开发Django-Oscar时的经验总结&#xff0c;方便后期维护&#xff01;&#xff08;第一次这么认真的记录这种大型项目&#xff0c;打个广告吧&#xff1a;本人可接单算法程序开发&#xff0c;包含深度学习和图像相关……等相关&#xff09;…

秒懂C++之stack、queue、堆

目录 前言 一.stack常用接口 二.stack模拟实现 三.例题 3.1 最小栈 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 3.2 栈的压入、弹出序列 题目解析: 算法解析&#xff1a; 代码&#xff1a; 3.3 逆波兰表达式求值 题目解析&#xff1a; 算法解析…

【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用

目录 背景 CVE-2012-1823 发散利用 法一&#xff1a;读文件 法二&#xff1a;数据外带 背景 CVE-2012-1823 PHP-CGI远程代码执行漏洞&#xff08;CVE-2012-1823&#xff09;分析 | 离别歌 省流&#xff1a; 命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include…

目标检测 | yolov4 原理和介绍

1. 简介 YOLOv4是一种高效且准确的目标检测模型&#xff0c;它在YOLOv3的基础上引入了多项改进&#xff0c;这些改进主要集中在网络结构的优化和训练技巧的更新上。以下是YOLOv4中的一些关键技术或模块&#xff0c;它们对提高目标检测性能起到了重要作用&#xff1a; CSPDarkne…