mybatis单框架通用mapper使用(二)

news2024/11/25 0:25:49

mybatis单框架通用mapper使用(二)

1 查询

1.1 简单查询

1.1.1 查多条

a 用法
接口引用.select(实体类对象引用);
//里面实体类对象,里面不为null值的部分就会作为条件被查询,多个条件使用and进行拼接起来
//传入为null就是查询全部的值
b 测试代码
  @Test
    public void t2(){
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper mapper = sqlSession.getMapper(SongsMapper.class);
        Songs s=new Songs();
        s.setName("晴天");
        s.setSinger_name("周杰伦");
        //不为null才会查 动态sql,实体类的属性作为条件,多个条件用and分隔
        List<Songs> songs = mapper.select(s);
        songs.forEach(System.out::println);
    }
c 测试代码运行结果

在这里插入图片描述

1.1.2 查单条

a 根据属性查
a.1 用法
接口引用.selectOne(实体类对象引用);
a.2 测试代码
@Test
    public void t2(){
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper mapper = sqlSession.getMapper(SongsMapper.class);
        Songs s=new Songs();
        s.setName("稻香");
        s.setSinger_name("周杰伦");
        Songs song01 = mapper.selectOne(s);
        System.out.println(song01);
    }
a.3 测试代码运行截图

在这里插入图片描述

b 根据Id查询
b.1 用法
接口引用.selectByPrimaryKey(id值);
//使用这个必须要给主键加上@id注解的
b.2 测试代码
 @Test
    public void t2(){
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper mapper = sqlSession.getMapper(SongsMapper.class)
        //根据id查找 因为加了注解@id(需要在实体类的id里面加@Id)
        Songs songs = mapper.selectByPrimaryKey(777);
        System.out.println(songs);
   } 
b.3 测试代码运行截图

在这里插入图片描述

1.2 复杂查询

1.2.1 等值比较

a 用法
条件对象.andEqualTo("实体类属性名",需要查询的值);
b 测试代码
  @Test
    public void t1(){
        //方法不要和它自带的方法一样
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper mapper = sqlSession.getMapper(SongsMapper.class);
        //创建条件构造器,基于哪个实体类来设计条件
        Example ex=new Example(Songs.class);
       //创建条件对象1 一个Criteria就是一个括号
      Example.Criteria c= ex.createCriteria();
      c.andEqualTo("singer_name","林俊杰");
      List<Songs> songs = mapper.selectByExample(ex);
      songs.forEach(System.out::println);
    }
c 测试运行截图

在这里插入图片描述

1.2.2 条件里面既有或也有并且

a 思路
使用andIn(值的集合)来替代多个or的拼接
然后条件查询对象用完andIn()后直接调用其他方法即可
b 测试代码
@Test
public void t2(){
    //方法不要和它自带的方法一样
    //查询歌手周杰伦和张学友并且发行时间在2000-1-1之后的歌曲
    SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
    SqlSession sqlSession = sf.openSession();
    SongsMapper sm = sqlSession.getMapper(SongsMapper.class);
    //创建条件构造器,基于哪个实体类来设计条件
    Example ex=new Example(Songs.class);
    //创建条件对象1 一个Criteria就是一个括号
    Example.Criteria c1= ex.createCriteria();
    ArrayList arr=new ArrayList();
    arr.add("张学友");
    arr.add("周杰伦");
    c1.andIn("singer_name",arr);
    c1.andGreaterThanOrEqualTo("releaseDate", "2000-01-01");
    List<Songs> songs = sm.selectByExample(ex);
    songs.forEach(System.out::println);
}
c 测试代码运行截图

在这里插入图片描述

2 修改

2.1 用法

接口引用.updateByPrimaryKeySelective(实体类);

2.2 测试代码

public void t2() {
        //方法不要和它自带的方法一样
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper sm = sqlSession.getMapper(SongsMapper.class);
        //带selective是动态sql(不为null)
        Songs s=new Songs();
        s.setId(1002);
        s.setName("葫芦娃");
        int i = sm.updateByPrimaryKeySelective(s);
        sqlSession.commit();
//        System.out.println("添加后: "+s);
    }

2.3 测试代码运行截图

2.3.1 修改前

在这里插入图片描述

2.3.2 测试代码运行的截图

在这里插入图片描述

2.3.3 修改后

在这里插入图片描述

3 添加

3.1 用法

接口引用.insertSelective(s);
/*注意:为空的数据库就不能去添加*/

3.2 测试代码

3.2.1 在实体类中 需要设置主键回填

package entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Songs{
    //IDENTITY是自增长
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//主键回填
    private Integer id;
    private String singer_name;
    private String album;
    private String albumImg;
    private String name;
    private String releaseDate;
}

3.2.2 测试

  @Test
    public void t2() {
        //方法不要和它自带的方法一样
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper sm = sqlSession.getMapper(SongsMapper.class);
        //带selective是动态sql
        /*添加*/
        Songs s=new Songs(null,"凤凰传奇","策马崩腾",null,"天籁","2022-1-1");
        //为空的就不加
        sm.insertSelective(s);
        sqlSession.commit();
        System.out.println("添加后: "+s);
    }

3.3 测试代码运行截图

在这里插入图片描述

4 删除

4.1 用法

接口引用.deleteByPrimaryKey(键名);

4.2 测试代码

@Test
    public void t2() {
        //方法不要和它自带的方法一样
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper sm = sqlSession.getMapper(SongsMapper.class);
        //带selective是动态sql
        sm.deleteByPrimaryKey(1003);
        sqlSession.commit();
    }

4.3 测试代码运行截图

4.3.1 删除前

在这里插入图片描述

4.3.2 测试代码运行截图

在这里插入图片描述

4.3.3 删除后

在这里插入图片描述

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

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

相关文章

直播带货系统源码,居家“神器”不出门就能购物

如今&#xff0c;直播带货的火爆程度已经超出了人们的想象。线下销售行业的卖家也开启了直播带货模式&#xff0c;直播带货的的火爆归根到底还是消费者的购物方式发生的变化。从传统的线下购物到电商购物&#xff0c;再到今天的直接直播带货。从各大数据可以总结&#xff0c;消…

应用密码学期末速通复习

文章目录模运算分数求模负数求模gcd最大公约数逆元分组密码DES加密AES加密操作模式ECB电子密码本CBC分组链接CFB密码反馈OFB输出反馈序列密码A5-1算法RC4算法Hash函数Md5算法SHA-1算法消息认证数字信封公钥密码背包公钥算法RSA公钥算法Rabin公钥算法ElGamal公钥算法ECC公钥算法…

C/C++刷题DAY2

1.第一题 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a;对于此题&#xff0c;我们使用双指针的方式去写它&#xff0c;需要注意空间复杂度是O&#xff08;1&#xff09;&#xff0c;时间复杂度也是尽量的越低越好&#xff0c;要去需要原地修改数组&a…

Matplotlib设置刻度和刻度标签

Matplotlib在我们之前的所有例子中都自动接管了轴上间隔点的任务。Matplotlib的默认刻度定位器和格式化器在很多常见情况下通常都足够了。可以明确提及刻度线的位置和标签以满足特定要求。 xticks()和yticks()函数将列表对象作为参数。列表中的元素表示将显示刻度的相应操作的位…

nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇

文章目录前言一、对上一篇博文的分析二、配置文件分析1. nginx 官方网址&#xff08;很详细&#xff09;2、配置文件&#xff08;全&#xff09;3、配置文件&#xff08;去掉注释&#xff09;4、讲解a、nginx 配置文件有三部分组成b、全局块c、events块d、http块5、http块中loc…

无脚本自动化测试

在当今的企业环境中&#xff0c;软件测试不再被视为不必要的投资&#xff1b;相反&#xff0c;它已经上升到一种需要而不是奢侈品的水平。随着市场的不断变化和竞争的加剧&#xff0c;企业必须做一些让他们与竞争对手区分开来的事情。 为了使自己与众不同&#xff0c;公司必须…

Dockerfile

Dockerfile指令集 对于Dockerfiel而言&#xff0c;是在学习docker工具里面&#xff0c;最重点的内容&#xff0c;它可以帮助我们生成自己想要的基础镜像。部署一个容器最重要的就是镜像&#xff0c;指令都已经内置好了。 FROM 这个镜像的妈妈是谁&#xff1f;&a…

数据结构每日亿题(四)

复制带随机指针的链表 原题传送门&#xff1a;力扣 题目&#xff1a; 这题的大概意思就是&#xff1a; 有这样一个链表&#xff0c;他比普通的链表多一个成员变量&#xff1a;random指针&#xff0c;这个random指针指向的是这个链表中随机一个地方&#xff0c;这个地方是其它节…

NetSim网络仿真使用及静态路由配置

&#x1f370; 个人主页:__Aurora__ &#x1f35e;如果文章有什么需要改进的地方还请各位大佬指正。 &#x1f349;如果我的文章对你有帮助➡️ 关注&#x1f64f;&#x1f3fb; 点赞&#x1f44d; 收藏⭐️ NetSim网络仿真使用及静态路由配置。 实验要求及其步骤 使用Boson N…

Java面试笔记:Java线程安全的集合类有哪些?线程不安全的集合类有哪些?ArrayList为什么会发生并发修改异常?

一、Java的集合类有哪些&#xff1f; 二、如何定义集合是线程不安全的&#xff1f; 当多个并发同时对线程不安全的集合进行增删改的时候会破坏这些集合的数据完整性&#xff0c;例如&#xff1a;当多个线程访问同一个集合或Map时&#xff0c;如果有超过一个线程修改了A…

3A企业认定有哪些好处?

企业参与申报和认证有什么益处&#xff1f;这个问题可能应该是广大企业参与前最为关心的问题之一了 1、可快速有效提升企业资质、获得国家政府的认可&#xff1b;并将获得由商务部颁发的具有统一编号的牌匾和证书。 2、是企业履约能力、投标信誉、综合实力与竞争力的体现&…

数学建模--优化类模型

目录 一、根据目标函数约束条件类型分类 1、线性规划 ①线性规划模型的一般形式 ​②用MATLAB优化工具箱解线性规划 ③模型分析 2、非线性规划 ①非线性规划的基本概念 ②非线性规划的基本解法 ③二次规划 ④一般非线性规划 二、控制变量类型分类 1、整数规划 …

总结线程安全问题的原因和解决方案

一. 线程安全问题 概念 首先, 线程安全的意思就是在多线程各种随机调度的情况下, 代码不出现 bug 的情况. 如果在多线程调度的情况下, 出现 bug, 那么就是线程不安全. 二. 观察线程不安全的情况 下面我们用多线程来累加一个数, 观察线程不安全的情况: 用两个线程, 每个线程…

树--堆和优先权队列

数据结构中的堆和栈与操作系统内存划分中的堆和栈没有关系 一、堆的定义 一个大小为n的堆是一棵包含n个结点的完全二叉树&#xff0c;其根节点称为堆顶。 根据堆中亲子结点的大小关系&#xff0c;分为大堆和小堆&#xff1a; &#xff08;1&#xff09;最小堆&#xff1a;树中…

高斯原型网络原论文高质量翻译

论文地址&#xff1a;Gaussian Prototypical Networks for Few-Shot Learning on Omniglot 文章目录摘要1 引言1.1 Few-shot learning1.2 高斯原型网络2 相关工作3 方法3.1 编码器3.2 偶发性训练3.3 定义一个类3.4 评估模型4 数据集5 实验5.1 协方差估计的用法6 结论摘要 我们…

万字长文解读计算机视觉中的注意力机制(附论文和代码链接)

文中论文和代码已经整理&#xff0c;如果需要&#xff0c;点击下方公众号关注&#xff0c;领取&#xff0c;持续传达瓜货 所向披靡的张大刀 注意力机制是机器学习中嵌入的一个网络结构&#xff0c;主要用来学习输入数据对输出数据贡献&#xff1b;注意力机制在NLP和CV中均有使…

目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM

目录 &#xff08;一&#xff09;前言介绍 1.摘要 2.不同注意力步骤比较 &#xff08;二&#xff09;相关实验 &#xff08;三&#xff09;YOLOv5结合无参注意力SimAM 1.配置.yaml文件 2.配置common.py 3.修改yolo.py SimAM&#xff1a;无参数Attention助力分类/检测/分…

点云应用——三维空间边界点排序+机器人轨迹引导(1)

三维空间边界点排序机器人轨迹引导一、前言二、思路一&#xff1a;利用重建思路三、思路二&#xff1a;利用PCL边界提取方法三维空间点排序四、后续一、前言 最近做了点云边界提取、并实时发送至机器人进行引导的研究&#xff0c;主要遇到了两个问题&#xff1a; 1&#xff09;…

Python画爱心——一颗会跳动的爱心~

节日就快到来了&#xff0c;给你的Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧&#xff0c;利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心&#xff0c;从里到外形成一个立体状&#xff0c;给人视觉上的冲击感&#xff01;浪漫极了↓ 微信扫码添加&a…

CUDA 从入门到放弃(一)

CUDA从入门到放弃系列包含内容 异构并行计算CUDA编程模型CUDA执行模型CUDA内存CUDA流和并发CUDA指令级原语GPU加速库多GPU编程 本文你将了解到 异构并行计算CUDA编程模型 温馨提示: 本文可能引发C/C零基础的读者不适,请谨慎观看. 一、聊聊异构并行计算 异构并行计算的本质是…