MyBatis的基本注解

news2024/12/24 0:31:26

常用注解

基本注解:实现简单的增删改查操作

结果映射注解:实现结果的映射关系,也可以完成级联映射

动态SQL注解:实现动态SQL的内容

基本注解:

增加操作:@Insert

删除操作:@Delete

修改操作:@Update

查询操作:@Select

//查找所有的学生
	@Select("select * from student")
	public List<Student> findAllStu();

	//根据sid查找学生
	@Select("select * from student where sid=#{v}")
	public Student findstudent(int sid);
	
	//增加学生
	@Insert("insert into student(sname,birthday,ssex,classid) "
			+ "values(#{sname},#{birthday},#{ssex},#{classid})")
	public int insertstu(Student s);
	
	//删除学生
	@Delete("delete from student where sid=#{v}")
	public int delstu(int sid);
	
	//修改学生
	@Update("update student set sname=#{sname},birthday=#{birthday},"
			+ "ssex=#{ssex},classid=#{classid} where sid=#{sid}")
	public int updatestu(Student s);
    
    @Select("select * from student where ssex = #{xb} and"
			+ " classid=#{bj} limit #{wz},#{bc}")
	public List<Student> findStudentByssexAndClassidLimit(
			@Param("xb") String ssex,
			@Param("bj") int calssid,
			@Param("wz") int weizhi,
			@Param("bc") int buchang
			);

主键回填:完成数据库自增主键的回填

//主键回填
	@Insert("insert into student(sname,birthday,ssex,classid) "
			+ "values(#{sname},#{birthday},#{ssex},#{classid})")
	@Options(useGeneratedKeys = true,keyProperty = "sid")
	public int addStudent(Student s);

主键自增:

@SelectKey ( statement = "自增规则", keyProperty

= "主键属性", resultType = 结果类型, before = true )

结果映射注解

@Results结果映射

功能:完成数据库字段和JavaBean属性的映射关系

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

@Results({ @Result(id = 是否为主键, column = "字段", property = "属性" ) })

@Results复用

一对一映射:

@One( Select= 一对一查询方法, fetchType = FetchType.EAGER)

FetchType.EAGER:即时加载,FetchType.LAZY:延时加载

一对多映射:

@Many( Select= 一对多查询方法, fetchType = FetchType.EAGER)

FetchType.EAGER:即时加载,FetchType.LAZY:延时加载

动态SQL注解

脚本sql:XML配置方式的动态SQL,是用<script>的方式把它照搬过来,用注解来实现。适用于xml 配置转换到注解配置

//	动态sql
	// 方式一 脚本sql
	@Select("<script>" 
			+ "select * from student" 
			+ "<where>" 
			+ "<if test=\"ssex != null\"> and ssex = #{ssex}</if>"
			+ "<if test=\"classid != 0\"> and classid = #{classid}</if>" 
			+ "</where>" 
			+ "</script>")
	public List<Student> findStudent(Student s);

方法中构建sql:

@SelectProvider

@InsertProvider

@UpdateProvider

@DeleteProvider

这些方法的使用

// 方式二 在方法中创建动态sql语句
	@SelectProvider(type = StudentSql.class, method = "getSelectStudentSql")
	public List<Student> findStudentFunc(Student s);

	// 方式三 构造器生成动态sql语句 将方式二进行封装-- 构造器
	@SelectProvider(type = StudentSql.class, method = "getGZQSelectStudentSql")
	public List<Student> getGZQSelectStudentSql(Student s);
	
	@InsertProvider(type=StudentSql.class,method="getGZQAddStudentSql")
	public int getGZQAddStudentSql(Student s);
	
	@DeleteProvider(type=StudentSql.class,method="getGZQDeleteStudentSql")
	public int getGZQDeleteStudentSql(int sid);
	
	@UpdateProvider(type=StudentSql.class,method="getGZQUpdateStudentSql")
	public int updateStudentGZQ(Student s);
	

	//内部类
	class StudentSql {
		
		public String getSelectStudentSql(Student s) {
			String sql = "select * from student where 1=1 ";		
			if(s.getSsex() != null) {
				sql += " and ssex = #{ssex}";
			}	
			if(s.getClassid() != 0) {
				sql += " and classid = #{classid}";
			}
			return sql;
		}

		
		//构造器
		public String getGZQSelectStudentSql(Student s) {
			return new SQL() {
				{
					//字段名
					SELECT("sid,sname");
					SELECT("birthday");
					SELECT("ssex,classid");
					//表
					FROM("student");
					//条件
					if(s.getSsex()!=null) {
						WHERE("ssex=#{ssex}");
					}
					if(s.getClassid()!=0) {
						WHERE("classid=#{classid}");
					}
				}
			}.toString();
		}

		public String getGZQAddStudentSql(Student s) {
			return new SQL() {
				{
					INSERT_INTO("student");
					if(s.getSid()!=0) {
						VALUES("sid","#{sid}");
					}
					if(s.getSname()!=null) {
						VALUES("sname","#{sname}");
					}
					if(s.getBirthday()!=null) {
						VALUES("birthday","#{birthday}");
					}
					if(s.getClassid()!=0) {
						VALUES("classid","#{classid}");
					}
				}
			}.toString();
		}
		
		public String getGZQUpdateStudentSql(Student s) {
			return new SQL() {
				
				{
					UPDATE("student");
					if(s.getSname() != null) {
						SET("sname = #{sname}");
					}
					if(s.getBirthday() != null) {
						SET("birthday=#{birthday}");
					}
					if(s.getSsex() != null) {
						SET("ssex= #{ssex}");
					}
					if(s.getClassid() != 0) {
						SET("classid=#{classid}");
					}
					WHERE("sid = #{sid}");
					
				}
				
				
			}.toString();
		}
	
		public String getGZQDeleteStudentSql(int sid) {
			return new SQL() {
				
				{
					DELETE_FROM("student");
					WHERE("sid = #{v}");
				}
				
			}.toString();
		}
	

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

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

相关文章

kickstart 自动安装脚本制作及实现服务器自动部署

首先在&#xff52;&#xff48;&#xff45;&#xff4c;&#xff17; 中下载安装yum install system-config-kickstart 启动此服务 打开界面 并配置 继续 安装httpd并启动将/rhel 到/var/www/html下 查看 在继续 接下来只需在此写下想要的如 继续 保存 在其中写入 查看 D…

TCP通信三次握手四次挥手理解

TCP&#xff08;传输控制协议&#xff09;是一种面向连接、可靠的数据传输协议&#xff0c;旨在解决在不可靠的互联网上如何确保端到端的可靠数据传输问题。 TCP的特点&#xff1a; 面向连接&#xff1a;在数据传输之前&#xff0c;客户端和服务器必须建立连接。这种连接是持久…

Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED

Unrecognized option: --add-opensjava.base/java.langALL-UNNAMED Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Disconnected from server 报错原因&#xff1a;这里我是启动一个SpringBoot项目的时候报这…

Node.js(8)——Express的基本使用

监听GET请求 通过app.get()方法&#xff0c;可以监听客户端GET请求&#xff0c;具体语法&#xff1a; app.get(请求URL,function(req,res){处理函数}) 监听POST请求 语法&#xff1a; app.post(请求URL,function(req,res){处理函数}) 把内容响应给客户端 通过res.send()方法…

基于R语言绘制GGE双标图2

参考资料&#xff1a; 严威凯等: 双标图分析在农作物品种多点试验中的应用【作物学报】 https://cran.r-project.org/web/packages/GGEBiplots/GGEBiplots.pdf 1、如何判断双标图是否充分体现数据中的规律 在对双标图的解释中&#xff0c;有一个隐含的假设&#xff0c;就是所…

【算法速刷(4/100)】LeetCode —— 155.最小栈

每天写几题&#xff0c;健康每一天 最小栈问题&#xff0c;有许多种办法进行解答&#xff0c;首先需要锁定的条件是要求在实现栈功能之外&#xff0c;要在常数时间内检索最小元素。 一般这种O(1)查找最值都可以用一下方法 哈希表&#xff1a;使用哈希表存储对应栈大小时的栈…

PXE自动批量装机应用

目录 一 生成kickstart自动安装脚本 1.1 工具介绍 1.2 实验过程 1.2.1 环境要求 1.2.2 实验步骤 二 配置dhcp服务 2.1 安装dhcp 2.2 配置dhcp 三 配置syslinux&#xff0c;tftp 3.1 安装suslinux和tftp 3.2 配置软件 3.3 实验效果实现 一 生成kickstart自动安装脚…

光伏逆变器、MPPT、PCS储能变流器、BMU、BCU、BDU和液冷机组

一、光伏逆变器 光伏逆变器&#xff08;PV inverter或solar inverter&#xff09;可以将光伏&#xff08;PV&#xff09;太阳能板产生的可变直流电压转换为市电频率交流电&#xff08;AC&#xff09;的逆变器&#xff0c;可以反馈回商用输电系统&#xff0c;或是供离网的电网使…

基于风险的完整性和检查建模(RBIIM)MATLAB仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 Prior Density (先验密度) 4.2 Posterior Perfect Inspection (后验完美检验) 4.3 Posterior Imperfect Inspection (后验不完美检验) 4.4Cumulative Posterior Imperfect Inspection…

PyTorch深度学习实战(3)——小试牛刀:CIFAR-10分类

下面尝试从零搭建一个PyTorch模型来完成CIFAR-10数据集上的图像分类任务&#xff0c;步骤如下。 &#xff08;1&#xff09;使用torchvision加载并预处理CIFAR-10数据集。 &#xff08;2&#xff09;定义网络。 &#xff08;3&#xff09;定义损失函数和优化器。 &#xff08;4…

P32调试技巧1、2

实用调试技巧 什么是bug?调试是什么&#xff1f;有多么重要&#xff1f;debug和release的介绍windows环境调试介绍一些调试的实例如何写出好的&#xff08;易于调试&#xff09;代码编程常见的错误 什么是bug&#xff1f; 第一次被发现的导致计算机错误的飞蛾&#xff0c;也是…

Modbus -- TCP协议

MODBUS TCP协议是一种基于TCP/IP协议的Modbus变种&#xff0c;它允许Modbus协议在以太网网络上运行&#xff0c;使得设备之间可以通过IP网络交换数据。 一:协议概述 modbus_TCP协议:走的是网口&#xff0c;所以需要创建TCPclient对象进行通信,和modubus-RTU协议最大的区别是&a…

proxfier的使用和设置

1,安装proxifier工具 2&#xff0c;安装之后配置代理设置 3&#xff0c;首先点击彩色卷部分 4&#xff0c;修改配置文件&#xff0c;并且配置代理协议为https ip为127.0.0.1 端口为8888 &#xff08;注意下面图片 default一定为直连) 5&#xff0c;设置代理服务器&#xff…

怎样配置虚拟机IP

目录(三步走) 配置本机IP 配置虚拟机外部IP 配置虚拟机内部IP 参考链接: 配置本机IP 打开“网络和共享中心”——>更改“适配器设置” 找到“VMnet8”,然后右键“属性”,弹出下列窗口 输入本机IP(你目前电脑的IP) win系统可以用的命令:IPconfig 一共有AB两位,…

为什么我3d模型选择面选不到?---模大狮模型网

在展览3D模型设计行业中&#xff0c;设计师常常面临诸多技术挑战&#xff0c;其中之一是在模型编辑过程中遇到选择面的困难。这不仅影响了设计工作效率&#xff0c;还可能影响最终作品的质量和展示效果。本文将探讨在3D模型设计中为何会遇到“为什么我3D模型选择面选不到?”这…

【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真源码设计文档演示视频——完整资料下载

演示视频 设计内容 &#xff08;1&#xff09;使用 DS1302 结合字符型 LCD12864 显示器设计一个简易的定时闹钟 LCD 时钟。程序执行后 LCD 显示“00&#xff1a;00&#xff1a;00” &#xff08;2&#xff09;K1—设置现在的时间&#xff0c;年闪烁&#xff0c;再按 K1 键月闪…

淘宝小程序踩坑记录

最近搞了一套淘宝小程序配合淘宝店铺直接跳转&#xff0c;类似于扭蛋机那种机制&#xff0c;真是一路坎坷&#xff0c;一步一个坑&#xff0c;这里记录一下&#xff08;前端&#xff09;&#xff1b;淘宝小程序文当中心 编译相关 用uni-app没有淘宝小程序独有的编译环境&…

EdgeWorkers 最佳实践丨助力流媒体创新

近日亚太区 Akamai EdgeWorkers 首届编程挑战赛圆满落幕。参赛团队充分利用 Akamai 的智能边缘平台&#xff0c;探索无服务器计算的应用潜力。爱奇艺等获胜团队凭借 Akamai EdgeWorkers 和 EdgeKV 产品开发功能&#xff0c;将 DNS 解析时间降低 40% 。 一、云上竞逐&#xff0…

21LTR-Scene打靶渗透【附POC】(权限提升)

靶机下载地址&#xff1a;21LTR: Scene 1 ~ VulnHub21LTR: Scene 1, made by JayMaster2000. Download & walkthrough links are available.https://www.vulnhub.com/entry/21ltr-scene-1,3/ 1. 主机发现端口扫描目录扫描【192.168.2.120】 1.1. 主机发现 nmap -sn 192.…

牛客周赛 Round 54 (A~E)

#牛客周赛 Round 54 &#xff08;A~E&#xff09; 前言&#xff1a; 以后会定时更新很多比赛的题解 希望借此让自己坚持赛后补题 要不然写完就结束 自己水平没有一点提高 本人很菜所以不会更新 太难的题 加油&#xff01;&#xff01;&#xff01;1. ​清楚姐姐的糖葫芦…