mybatis基本注解、增删改查、结果集映射、一对一、一对多

mybatis注解

    • 基本注解
      • 新增
      • 删除
      • 修改
      • 查询
    • 结果映射注解
      • @Results结果映射
      • 一对一映射
      • 一对多映射

基本注解

新增

功能:@Insert完成新增操作,类似配置文件的 元素;

说明:新增时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

功能:@Options完成数据库自增主键的回填;

功能:@SelectKey完成自定义主键的自增;

	//新增@Insert("insert into student (sname,birthday,ssex,classid) "+ "values (sname,birthday,ssex,classId)")@SelectKey ( statement = "自增规则", keyProperty 
= "主键属性", resultTyp//主键回填注解@Options(useGeneratedKeys = true,keyProperty = "sid")public int insertStudent(Student s);

删除

功能:完成删除操作,类似配置文件的 元素;

说明:删除时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

	//删除@Delete("delete * form student where sid = #{v}")public int deleteStudentBysid(int sid);

修改

功能:完成更新操作,类似配置文件的 元素;

说明:更新时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

//修改@Update("update student set sname=#{sname},birthday=#{birthday},ssex=#{ssex},classid=#{classId} where sid = #{sid}")public int updateStudentBysid(Student s);

查询

功能:完成查询操作,类似配置文件的 元素;

说明:查询时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

//全查@Select("select * from student")public List<Student> findStudnet();//条件查询@Select("select * from student where sid = #{v}")public Student findStudentBySid(int sid);//传多参@Select("select * from student where ssex = #{sex} limit #{cp},#{sp}")public List<Student> findStudnetSomePar(@Param("sex") String ssex,@Param("cp") int cp,@Param("sp") int sp);

传多参:

在xml四种的基础上又加了一种:

@Param(“名字”):写在接口参数的前面,在sql中传参的地方写名字

结果映射注解

@Results结果映射

功能:完成数据库字段和 JavaBean 属性的映射关系,主要解决数据库中的字段和实体类中的属性名不一致;

说明:每个 @Results 可以包含多个 @Result,其中通过id 属性来判断是否为主键。

语法

@Results(id = "",value={@Result(column = "",property = ""),@Result(column = "",property = "")
})
//不重复使用的话
@Results({@Result(column = "",property = ""),@Result(column = "",property = "")
})eg:@Results(id = "sm_map",value = {@Result(column = "smid",property = "smid"),@Result(column = "sm_name",property = "smname"),@Result(column = "smsex",property = "smsex")})@Select("select * from schoolmaster")public List<SMaster> finaAll();//二次复用@Select("select * from schoolmaster")@ResultMap("sm_map")public List<SMaster> finaAllSMaster();

说明:

@Results标签如果没有id的话就只对离他最近的下面的的查询语句有效,如果需要在后面复用就需要写id 后面的查询语句使用@ResultMap(“id”);

跟当前接口中有定义使用id属性,每个sql语句前要么有一个@Results映射关系,要么要么@ResultMap,这两个不能同时给一 个sql语句

一对一映射

@One( Select = 一对一查询方法, fetchType = FetchType.EAGER )//步骤
1.在实体类中写外部属性
2.写映射关系column = "classid" :将该字段的值作为查询条件传入关联的子表作为条件property = "bj" : 外部属性名one = @One(select = "com.li.dao.BanjiMapper.findBanjiByClassid" : 写子查询接口的方法名fetchType = FetchType.LAZY :懒加载
eg:
//学生mapper中 全查关联班级@Results(id = "cla_sty_map",value = {@Result(column = "classid",property = "classId"),@Result(column = "classid",property = "bj",one = @One(select = "com.li.dao.BanjiMapper.findBanjiByClassid" ,fetchType = FetchType.LAZY))})@Select("select * from student")public List<Student> findAllStudnet();//班级mapper中@Select("select * from class where classid = #{v}")public List<Banji> findBanjiByClassid(int classId);注意:不论是一对一还是一对多实际上都是单表查询

在这里插入图片描述

一对多映射

@Many( Select = 一对多查询方法, fetchType = FetchType.EAGER )//步骤
1.在实体类中写外部属性
2.写映射关系column = "classid" :将该字段的值作为查询条件传入关联的子表作为条件property = "bj" : 外部属性名many = @Many(select="com.li.dao.StudentMapper.findStudnetByClassid")) : 写子查询接口的方法名fetchType = FetchType.LAZY :懒加载
eg:
//班级mapper中 全查关联班级@Results(id = "class_student_map",value = {@Result(column = "classid",property = "classId"),@Result(column = "classid",property = "stu",many = @Many(select="com.li.dao.StudentMapper.findStudnetByClassid")),})@Select("select * from class")public List<Banji> findBanjiAndStudent();//学生mapper中@Select("select * from student where classid = #{v}")public List<Student> findStudnetByClassid(int classid);

在这里插入图片描述

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

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

相关文章

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令&#xff0c;我把它都记下来&#xff0c;权当作笔记&#xff0c;可供自己后期反复练习使用&#xff0c;让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器&#xff0c;输入…

运筹说 第80期 | 最小费用最大流问题

前面我们学习了图与网络分析的基础知识及经典问题&#xff0c;大家是否已经学会了呢&#xff1f;接下来小编和大家学习最后一个经典问题——最小费用最大流问题。 最小费用最大流问题是经济学和管理学中的一类典型问题。在一个网络中每段路径都有“容量”和“费用”两个限制的…

MOS管驱动电流计算以及分立器件驱动电路

自记&#xff1a; 1.先根据mos数据手册查找参数&#xff0c;计算电流&#xff1b; 2.分立器件驱动电路图&#xff1b; 3.分立器件选择 仔细学&#xff0c;能看懂&#xff01; 1.计算电流&#xff1a; 2.分立器件驱动电流&#xff1a;两种&#xff0c;第一种反向&#xff0c…

什么是TestNG以及如何创建testng.xml文件?

目录 什么是TestNG&#xff1f; 如何创建testng.xml文件 手动创建testng.xml 通过testng.xml运行整个包 通过testng.xml运行类 使用Eclipse创建testng.xml 本文将讨论TestNG以及如何通过执行testng.xml文件在TestNG中运行第一个测试用例。 什么是TestNG&#xff1f; Te…

线性表小结

线性表小结 单链表、循环链表和双向链表的时间效率比较 顺序表和链表的比较

强化学习11——DQN算法

DQN算法的全称为&#xff0c;Deep Q-Network&#xff0c;即在Q-learning算法的基础上引用深度神经网络来近似动作函数 Q ( s , a ) Q(s,a) Q(s,a) 。对于传统的Q-learning&#xff0c;当状态或动作数量特别大的时候&#xff0c;如处理一张图片&#xff0c;假设为 210 160 3 …

加密经济学:Web3时代的新经济模型

随着Web3技术的迅猛发展&#xff0c;我们正迈入一个全新的数字经济时代。加密经济学作为这一时代的核心&#xff0c;不仅在数字货币领域崭露头角&#xff0c;更是重新定义了传统经济模型&#xff0c;为我们开启了一个充满创新和机遇的新纪元。 1. 去中心化的经济体系 Web3时代…

7.3 CONSTANT MEMORY AND CACHING

掩模数组M在卷积中的使用方式有三个有趣的属性。首先&#xff0c;M阵列的大小通常很小。大多数卷积掩模在每个维度上都少于10个元素。即使在3D卷积的情况下&#xff0c;掩码通常也只包含少于1000个元素。其次&#xff0c;在内核执行过程中&#xff0c;M的内容不会改变。第三&am…

启动Vue项目,报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

前言&#xff1a; 最近在打开一个Vue项目的时候&#xff0c;打开之后输入命令行&#xff1a;npm run serve之后发现&#xff0c;报错&#xff1a;vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序&#xff0c;以下是解决方案&#xff1a; 报错图片截图&…

HNU-算法设计与分析-实验3

算法设计与分析实验3 计科210X 甘晴void 202108010XXX 目录 文章目录 算法设计与分析<br>实验31 用Dijkstra贪心算法求解单源最短路径问题问题重述证明模板&#xff1a;Dijkstra算法代码验证算法分析 1【扩展】 使用堆优化的Dijkstra原因代码算法分析验证 2 回溯法求解…

运筹说 第98期|无约束极值问题

上一期我们一起学习了关于非线性规划问题的一维搜索方法的相关内容&#xff0c;本期小编将带大家学习非线性规划的无约束极值问题。 下面&#xff0c;让我们从实际问题出发&#xff0c;学习无约束极值问题吧&#xff01; 一、问题描述及求解原理 1 无约束极值问题的定义 无约…

ArkUI-X跨平台已至,何需其它!

运行环境 DevEco Studio&#xff1a;4.0Release OpenHarmony SDK API10 开发板&#xff1a;润和DAYU200 自从写了一篇ArkUI-X跨平台的文章之后&#xff0c;好多人都说对这个项目十分关注。 那么今天我们就来完整的梳理一下这个项目。 1、ArkUI-X 我们之前可能更多接触的…

登录验证

目录 会话技术 Cookie Session JWT JWT生成 JWT校验 会话技术 会话 打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求与响应 会话跟踪 一种维护浏览器的方法 服务器需要…

性能测试jmeter

选的这些怎么添加 在一个列表里面 方法调用${__time(YMD)} 两个下划线&#xff0c;后跟函数名&#xff0c;小括号内是输入参数&#xff0c;整个用大括号包裹。 注意POST一定要在消息体数据里面写,不能再参数里面 否则报错:loginOut,没cookie等

VueCli-自定义创建项目

参考 1.安装脚手架 (已安装可以跳过) npm i vue/cli -g2.创建项目 vue create 项目名 // 如&#xff1a; vue create dn-demo键盘上下键 - 选择自定义选型 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > M…

小迪安全第二天

文章目录 一、Web应用&#xff0c;架构搭建二、web应用环境架构类三、web应用安全漏洞分类总结 一、Web应用&#xff0c;架构搭建 #网站搭建前置知识 域名&#xff0c;子域名&#xff0c;dns,http/https,证书等 二、web应用环境架构类 理解不同web应用组成角色功能架构 开发…

显示CPU架构的有关信息 lscpu

文章目录 显示CPU架构的有关信息 lscpu默认实例更多信息 显示CPU架构的有关信息 lscpu Linux的CPU设备查看器。lscpu命令用来显示cpu的相关信息。 lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息&#xff0c;命令的输出比较易读 。 命令输出的信息包含cpu数量&#xff0c;线…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候&#xff0c;会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题&#xff0c;或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下&#xff0c;也就是进入你的cuda的驱动的安装目…

个人数据备份方案分享(源自一次悲惨经历)

文章目录 1 起源2 备份架构2.1 生活照片2.2 生活录音2.3 微信文件2.4 工作文件2.5 笔记、影视音乐、书籍 3 使用工具介绍3.1 小米云服务3.2 中国移动云盘3.3 小米移动硬盘&#xff08;1T&#xff09;3.4 FreeFileSync 4 总结 1 起源 本文的灵感源于我个人的一次不幸遭遇&#…

领域驱动设计——DDD领域驱动设计进阶

摘要 进阶篇主要讲解领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。如何通过领域事件实现微服务解耦&#xff1f;、怎样进行微服务分层设计&#xff1f;、如何实现层与层之间的服务协作&#xff1f;、通过几种微服务架构模型的对比分析&#xff0…