Myb atis基础3
- Mybatis注解开发单表操作
- Mybatis的常用注解
- Mybatis的增删改查
- MyBatis注解开发的多表操作
- MyBatis的注解实现复杂映射开发
- 一对一查询
- 一对多查询
- 多对多查询
- 构建sql
- sql构建对象介绍
- 查询功能的实现
- 新增功能的实现
- 修改功能的实现
- 删除功能的实现
Mybatis注解开发单表操作
Mybatis的常用注解
使用注解开发方式,可以减少编写Mapper映射文件
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
Mybatis的增删改查
步骤一:创建mapper接口
public interface StudentMapper {//查询全部@Select("SELECT * FROM student")public abstract List<Student> selectAll();//新增操作@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")public abstract Integer insert(Student stu);//修改操作@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")public abstract Integer update(Student stu);//删除操作@Delete("DELETE FROM student WHERE id=#{id}")public abstract Integer delete(Integer id);
}
步骤二:测试类
public class Test01 {@Testpublic void selectAll() throws Exception{//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//5.调用实现类对象中的方法,接收结果List<Student> list = mapper.selectAll();//6.处理结果for (Student student : list) {System.out.println(student);}//7.释放资源sqlSession.close();is.close();}@Testpublic void insert() throws Exception{//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//5.调用实现类对象中的方法,接收结果Student stu = new Student(4,"赵六",26);Integer result = mapper.insert(stu);//6.处理结果System.out.println(result);//7.释放资源sqlSession.close();is.close();}@Testpublic void update() throws Exception{//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//5.调用实现类对象中的方法,接收结果Student stu = new Student(4,"赵六",36);Integer result = mapper.update(stu);//6.处理结果System.out.println(result);//7.释放资源sqlSession.close();is.close();}@Testpublic void delete() throws Exception{//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//5.调用实现类对象中的方法,接收结果Integer result = mapper.delete(4);//6.处理结果System.out.println(result);//7.释放资源sqlSession.close();is.close();}
}
加载使用了注解的Mapper接口
<mappers><!--扫描使用注解的类--><mapper class="com.itheima.mapper.UserMapper"></mapper>
</mappers>
或者指定扫描包含映射关系的接口所在的包
<mappers><!--扫描使用注解的类所在的包--><package name="com.itheima.mapper"></package>
</mappers>
MyBatis注解开发的多表操作
MyBatis的注解实现复杂映射开发

一对一查询
对应sql语句
SELECT * FROM card;SELECT * FROM person WHERE id=#{id};
创建PersonMapper接口
public interface PersonMapper {//根据id查询@Select("SELECT * FROM person WHERE id=#{id}")public abstract Person selectById(Integer id);
}
使用注解配置Mapper
public interface CardMapper {//查询全部@Select("SELECT * FROM card")@Results({@Result(column = "id",property = "id"),@Result(column = "number",property = "number"),@Result(property = "p", // 被包含对象的变量名javaType = Person.class, // 被包含对象的实际数据类型column = "pid", // 根据查询出的card表中的pid字段来查询person表/*one、@One 一对一固定写法select属性:指定调用哪个接口中的哪个方法*/one = @One(select = "com.itheima.one_to_one.PersonMapper.selectById"))})public abstract List<Card> selectAll();
}
测试类
public class Test01 {@Testpublic void selectAll() throws Exception{//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取CardMapper接口的实现类对象CardMapper mapper = sqlSession.getMapper(CardMapper.class);//5.调用实现类对象中的方法,接收结果List<Card> list = mapper.selectAll();//6.处理结果for (Card card : list) {System.out.println(card);}//7.释放资源sqlSession.close();is.close();}}
总结
@Results:封装映射关系的父注解。Result[] value():定义了 Result 数组
@Result:封装映射关系的子注解。column 属性:查询出的表中字段名称property 属性:实体对象中的属性名称javaType 属性:被包含对象的数据类型one 属性:一对一查询固定属性@One:一对一查询的注解。select 属性:指定调用某个接口中的方法
一对多查询
使用注解配置Mapper
public interface ClassesMapper {//查询全部@Select("SELECT * FROM classes")@Results({@Result(column = "id",property = "id"),@Result(column = "name",property = "name"),@Result(property = "students", // 被包含对象的变量名javaType = List.class, // 被包含对象的实际数据类型column = "id", // 根据查询出的classes表的id字段来查询student表/*many、@Many 一对多查询的固定写法select属性:指定调用哪个接口中的哪个查询方法*/many = @Many(select = "com.itheima.one_to_many.StudentMapper.selectByCid"))})public abstract List<Classes> selectAll();
}
总结
@Results:封装映射关系的父注解。Result[] value():定义了 Result 数组
@Result:封装映射关系的子注解。column 属性:查询出的表中字段名称property 属性:实体对象中的属性名称javaType 属性:被包含对象的数据类型many 属性:一对多查询固定属性
@Many:一对多查询的注解。select 属性:指定调用某个接口中的方法
多对多查询
使用注解配置Mapper
public interface StudentMapper {//查询全部@Select("SELECT DISTINCT s.id,s.name,s.age FROM student s,stu_cr sc WHERE sc.sid=s.id")@Results({@Result(column = "id",property = "id"),@Result(column = "name",property = "name"),@Result(column = "age",property = "age"),@Result(property = "courses", // 被包含对象的变量名javaType = List.class, // 被包含对象的实际数据类型column = "id", // 根据查询出student表的id来作为关联条件,去查询中间表和课程表/*many、@Many 一对多查询的固定写法select属性:指定调用哪个接口中的哪个查询方法*/many = @Many(select = "com.itheima.many_to_many.CourseMapper.selectBySid"))})public abstract List<Student> selectAll();
}
总结
@Results:封装映射关系的父注解。Result[] value():定义了 Result 数组
@Result:封装映射关系的子注解。column 属性:查询出的表中字段名称property 属性:实体对象中的属性名称javaType 属性:被包含对象的数据类型many 属性:一对多查询固定属性
@Many:一对多查询的注解。select 属性:指定调用某个接口中的方法
构建sql
sql构建对象介绍
MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句

查询功能的实现
-
定义功能类并提供获取查询的 SQL 语句的方法。
-
@SelectProvider:生成查询用的 SQL 语句注解。
type 属性:生成 SQL 语句功能类对象
method 属性:指定调用方法
新增功能的实现
-
定义功能类并提供获取新增的 SQL 语句的方法。
-
@InsertProvider:生成新增用的 SQL 语句注解。
type 属性:生成 SQL 语句功能类对象
method 属性:指定调用方法
修改功能的实现
-
定义功能类并提供获取修改的 SQL 语句的方法。
-
@UpdateProvider:生成修改用的 SQL 语句注解。
type 属性:生成 SQL 语句功能类对象
method 属性:指定调用方法
删除功能的实现
-
定义功能类并提供获取删除的 SQL 语句的方法。
-
@DeleteProvider:生成删除用的 SQL 语句注解。
type 属性:生成 SQL 语句功能类对象
method 属性:指定调用方法
相关文章:
Myb atis基础3
Mybatis注解开发单表操作Mybatis的常用注解Mybatis的增删改查MyBatis注解开发的多表操作MyBatis的注解实现复杂映射开发一对一查询一对多查询多对多查询构建sqlsql构建对象介绍查询功能的实现新增功能的实现修改功能的实现删除功能的实现Mybatis注解开发单表操作 Mybatis的常用…...
VHDL语言基础-时序逻辑电路-寄存器
目录 寄存器的设计: 多位寄存器: 多位寄存器的VHDL描述: 移位寄存器: 串进并出的移位寄存器的VHDL描述: 寄存器的设计: 多位寄存器: 一个D触发器就是一位寄存器,如果需要多位寄存器&…...
高通开发系列 - linux kernel更新msm-3.18升至msm-4.9
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 linux kernel更新msm-3.18升至msm-4.9第一周处理的内容:第二周处理的内容第三周处理的内容linux kernel更新msm-3.18升至msm-4.9 第…...
【Tensorflow2.0】tensorflow中的Dense函数解析
目录1 作用2 例子3 与torch.nn.Linear的区别4 参考文献1 作用 注意此处Tensorflow版本是2.0。 由于本人是Pytorch用户,对Tensorflow不是很熟悉,在读到用tf写的代码时就很是麻烦。如图所示,遇到了如下代码: h Dense(unitsadj_di…...
PyTorch学习笔记:data.RandomSampler——数据随机采样
PyTorch学习笔记:data.RandomSampler——数据随机采样 torch.utils.data.RandomSampler(data_source, replacementFalse, num_samplesNone, generatorNone)功能:随即对样本进行采样 输入: data_source:被采样的数据集合replace…...
设计模式(七)----创建型模式之建造者模式
1、概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解…...
DCGAN
DCGAN的论文地址[https://arxiv.org/pdf/1511.06434.pdf]。DCGAN是GAN的一个变体,DCGAN就是将CNN和原始的GAN结合到一起,生成网络和鉴别网络都运用到了深度卷积神经网络。DCGAN提高了基础GAN的稳定性和生成结果质量。DCGAN主要是在网络架构上改进了原始的…...
【速通版】吴恩达机器学习笔记Part3
目录 1.多元线性回归 a.特征缩放 可行的缩放方式: 1.除以最大值: 2.mean normalization: 3.Z-score normalization b.learning curve: c.learning rate: 2.多项式回归 3.classification logistics regression 1.多元线性回归 其意义很…...
【leetcode】跳跃游戏
一、题目描述 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释&#x…...
论文投稿指南——中文核心期刊推荐(冶金工业 2)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
【GPLT 二阶题目集】L2-044 大众情人
人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比,并且距离感是单向的。例如小蓝对小红患了单相思,从小蓝的眼中看去,他和小红之间的距离为 1,只差一层窗户纸;但在小红的眼里…...
SpringBoot整合(二)MyBatisPlus技术详解
MyBatisPlus详解 一、标准数据层开发 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 MyBatisPlus的官网为:https://mp.baomidou.com/ 1.1 标准CRUD 1.2 新增 int insert (T t)T:泛型,…...
导入importk8s集群,添加node节点,rancher agent,Rancher Agent设置选项
curl方式: Rancher在每个节点上部署代理以与节点通信。 此页面描述了可以传递给代理的选项,要使用这些选项,您需要采用创建自定义集群 ,并在docker run添加节点时将选项添加到生成的命令中。 常规选项 参数环境变量描述—serve…...
C++11--右值引用与移动语义
目录 基本概念 左值与右值 左值引用与右值引用 右值引用的使用场景和意义 左值引用的使用场景 右值引用和移动语义 移动构造和拷贝构造的区别 编译器的优化 移动赋值和赋值运算符重载的区别 右值引用的其他应用场景 完美转发 万能引用 完美转发保持值属性 完美转…...
Python SQLAlchemy入门教程
本文将以Mysql举例,介绍sqlalchemy的基本用法。其中,Python版本为2.7,sqlalchemy版本为1.1.6。 一. 介绍 SQLAlchemy是Python中最有名的ORM工具。 关于ORM: 全称Object Relational Mapping(对象关系映射࿰…...
你是真的“C”——操作符详解【下篇】+整形提升+算术转换
你是真的“C”——操作符详解下篇😎前言🙌操作符详解【上篇】内容:操作符详解【下篇】内容:1、 条件操作符2、逗号表达式:3、下标引用、函数调用和结构成员3、访问一个结构的成员表达式求值1、隐式类型转换:…...
文本匹配SimCSE模型代码详解以及训练自己的中文数据集
前言 在上一篇博客文本匹配中的示例代码中使用到了一个SimCSE模型,用来提取短文本的特征,然后计算特征相似度,最终达到文本匹配的目的。但是该示例代码中的短文本是用的英文短句,其实SimCSE模型也可以用于中文短文本的特征提取&a…...
Biotin-PEG-FITC 生物素聚乙二醇荧光素;FITC-PEG-Biotin 科研用生物试剂
结构式: Biotin-PEG-FITC 生物素聚乙二醇荧光素 英文名称:Biotin-PEG-Fluorescein 中文名称:生物素聚乙二醇荧光素 外观:黄色液体、半固体或固体,取决于分子量。 溶剂:溶于大部分有机溶剂,…...
FISCO BCOS 搭建区块链,在SpringBoot中调用合约
一、搭建区块链 使用的是FISCO BCOS 和 WeBASE-Front来搭建区块链,详细教程: https://blog.csdn.net/yueyue763184/article/details/128924144?spm1001.2014.3001.5501 搭建好能达到下图效果即可: 二、部署智能合约与导出java文件、SDK证…...
面试官:int和Integer有什么区别?
回答思路: 原始数据类型和包装类介绍 主要区别(数据使用内存) 自动装箱、自动拆箱机制和实践原则 回答总结: int 是8种基本数据类型(byte、boolean、char、short、int、long、float、double)之一ÿ…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
java+webstock
maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...
WinUI3开发_使用mica效果
简介 Mica(云母)是Windows10/11上的一种现代化效果,是Windows10/11上所使用的Fluent Design(设计语言)里的一个效果,Windows10/11上所使用的Fluent Design皆旨在于打造一个人类、通用和真正感觉与 Windows 一样的设计。 WinUI3就是Windows10/11上的一个…...
MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool
在当今数据驱动的时代,数据库作为数据存储与管理的核心,其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库,在众多应用场景中发挥着关键作用。在这篇博客中,我将围绕 MySQL 数据库的核心知识展开,涵盖事务及…...
