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);
               
 

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

burp靶场-path traversal

路径遍历 1.路径遍历漏洞 ### 什么是路径遍历 路径遍历也称为目录遍历。这些漏洞使攻击者能够读取正在运行应用程序的服务器上的任意文件。这可能包括&#xff1a; 应用程序代码和数据。 后端系统的凭据。 敏感的操作系统文件。### <img src"/loadImage?filename218…

RDMA编程实践-SEND-RECEICVE原语应用

RDMA编程实践 本文描述了RDMA编程过程中的SEND-RECEIVE双边原语的代码实现。包含多个版本&#xff0c;1、client向server发送消息&#xff0c;server回复client收到消息(ACK)&#xff0c;然后两边断开连接。2、server端循环等待客户端建立连接&#xff0c;client发送一次消息后…

数据库和表的操作

文章目录 前言一、库的操作创建数据库字符集和校验规则操纵数据库查看数据库显示创建语句修改数据库删除数据库备份和恢复数据库还原查看连接情况 二、表的操作创建表查看表结构修改表修改表名添加一列修改某一列属性删除某一列 删除表 前言 一、库的操作 创建数据库 语法&am…

新手必看:腾讯云服务器购买详细图文教程

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

我的NPI项目之设备系统启动(三) -- CDT的一个实例

上面说了这么多&#xff0c;这里就添加一个CDT的使用实例和简单的代码解析。 首先生成cdt_configure.xml配置文件&#xff0c;然后执行如下命令&#xff1a; python cdt_generator.py cdt_configure.xml CDT.bin; 就可以生成对应的CDT.bin文件。同时也会生成, 我们会利用ha…

STM32串口485通信如何控制收发管脚

要有效的控制485的收发管脚&#xff0c;首先要知道485通信发送命令完成的时间&#xff0c;我们执行发送命令结束并不代表硬件已经把数据发出去了&#xff0c;可能1ms以后才真正完成&#xff0c;如果我们控制管脚不当&#xff0c;可能导致数据不能完全发出去。导致串口通信异常。…

Leetcode20-唯一摩尔斯密码词(804)

1、题目 国际摩尔斯密码定义一种标准编码方式&#xff0c;将每个字母对应于一个由一系列点和短线组成的字符串&#xff0c; 比如: ‘a’ 对应 “.-” &#xff0c; ‘b’ 对应 “-…” &#xff0c; ‘c’ 对应 “-.-.” &#xff0c;以此类推。 为了方便&#xff0c;所有 26…

深度学习记录--Train/dev/test sets

为什么需要训练集、验证集(简单交叉验证集)和测试集&#xff1f; 为了创建高效的神经网络&#xff0c;需要不断进行训练(迭代) 一个神经网络的产生 从最开始的想法idea开始&#xff0c;然后付诸于代码code&#xff0c;根据结果验证反过来对一开始的想法idea进行修正&#xf…

LeetCode 429. N 叉树的层序遍历

429. N 叉树的层序遍历 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1&#xff1a; 输入&…

商业世界,从2023到2024

作者&#xff5c;潮汐商业评论 编辑&#xff5c;Ray 变化总在发生&#xff0c;你不去迎接进步的变化&#xff0c;就会等到退步的变化。 —— 查理.芒格 2023, 我们似乎总在不断告别。从“一生自由”的大家黄永玉到“智慧”投资家查理.芒格&#xff0c;再到写出《不能承受的生命…

利用fd子系统实现图案与图片显示方法

//第一&#xff1a;利用fb子系统画圆的方法与实现 //1、头文件信息 #include <sys/ioctl.h> #include <linux/fb.h> #include <stdio.h> #include <sys/types.h> #include <stdio.h> #include <sys/mman.h> #include <sys/types.h>…

系分备考计算机网络传输介质、通信方式和交换方式

文章目录 1、概述2、传输介质3、网络通信4、网络交换5、总结 1、概述 计算机网路是系统分析师考试的常考知识点&#xff0c;本篇主要记录了知识点&#xff1a;网络传输介质、网络通信和数据交换方式等。 2、传输介质 网络的传输最常见的就是网线&#xff0c;也就是双绞线&…

OpenGL Assimp加载各类型模型(.obj、.fbx、.glb、.3ds)

1.简介 本博客以.glb格式为例&#xff0c;加载glb格式的3d模型&#xff0c;网上找了一圈&#xff0c;基本上都是根据OpenGL官方示例&#xff0c;加载.obj格式的3d模型。 下面以.obj和.glb格式的3D模型简单介绍一下。 常见的.obj格式的3D模型如下所示&#xff1a;纹理都已经被…

QT 文本框的绘制与复选框组键

.cpp文件 #include "widget.h" #include "ui_widget.h"#include<QDebug> Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//更改窗口标题setWindowTitle("我爱xyy");//更改图标setWindow…

OpenCV-Python(32):SIFT算法

目标 学习SIFT 算法的概念学习在图像中查找SIFT关键点和描述符 原理及介绍 在前面两节我们学习了一些角点检测技术&#xff1a;比如Harris 等。它们具有旋转不变特性&#xff0c;即使图片发生了旋转&#xff0c;我们也能找到同样的角点。很明显即使图像发生旋转之后角点还是角…

2024腾讯云服务器购买指南一步步全流程攻略(超详细)

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

基于Java (spring-boot)的停车场管理系统

一、项目介绍 基于Java (spring-boot)的停车场管理系统、预订车位系统、停车缴费系统功能&#xff1a; 登录、注册、后台首页、用户信息管理、车辆信息管理、新增车辆、车位费用设置、停泊车辆查询、车辆进出管理、登录日志查询、个人中心、预定停车位、缴费信息。 适用人群&…

CSS实现超出部分的省略

1、为什么要省略 在日常开发过程中我们难免会遇到后端返回给我们的的数据太长的情况&#xff0c;此时我们通常采取的是...的省略方式&#xff0c;其中的CSS大致如下&#xff0c;既可以实现对应的省略显示&#xff0c;但有些时候我们有需要用户可以查看具体的完整信息&#xff0…

安卓开发-02-基础

文章目录 一、基本UI组件文本类组件TextViewEditText 按钮类组件普通按钮为普通按钮添加的单击事件监听器 图片按钮单选按钮复选框&#xff08;进行多选&#xff09; 日期时间类组件日期选择器时间选择器计时器 二、高级UI组件进度条组件拖动条组件星级评分条图像类组件图像切换…

面试官常问问题:Java中的128陷阱详解

看这样两段代码&#xff0c;思考结果返回的是什么 Integer num1 100; Integer num2 100; System.out.println(num1 num2);Integer num3 128; Integer num4 128; System.out.println(num3 num4); 揭晓答案&#xff1a;第一段代码的结果是true&#xff0c;第二段代码的结…