MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式

MyBatis-Dao层Mapper接口化开发

二、注意事项

1、Mapper接口与Mapper.xml映射文件要满足4个对应

(1)Mapper接口的全类名必须与Mapper映射文件中的namespace相同

(2)Mapper接口中的每一个方法名在Mapper映射文件中都要有一个id为方法名的标签相对应

(3)Mapper映射文件中的标签的参数类型必须与Mapper接口中的对应方法的参数类型相同

(4)Mapper映射文件中的标签的结果类型必须与Mapper接口中的对应方法的结果类型相同

三、参数传递

1、单参数传递

直接使用方法的参数名传递参数

Admin findAdminById(int id);
<select id="findAdminById" parameterType="int" resultType="Admin">select * from admin where id = #{id}</select>

2、少参数传递

使用注解标签传递参数

Admin login(@Param("acc") String account, @Param("pwd") String password);
<select id="login" resultType="Admin">select * from admin where account = #{acc} and password = #{pwd}</select>

3、多参数传递

使用对象传递参数

void saveAdmin(Admin admin);
<insert id="saveAdmin" parameterType="admin">insert into admin(account,password,gender)value(#{account},#{password},#{gender})</insert>

注意:执行增删改sql语句时必须要提交数据库事务(一次与数据库交互的过程管理)

两种提交数据库事务的方式

方式一

给定参数设置为自动提交数据库事务

sqlSessionFactory.openSession(true);

方式二

调用方法手动提交数据库事务

sqlSession.commit();

对比两种方式,最好使用第二种,可以使得多条sql在遇到异常时保持状态一致,要么都提交成功,要么都提交失败,避免出现交钱不下单问题

四、#{}表达式和${}表达式

1、#{}表达式

(1)作用:传递参数值

(2)传递方式:预编译方式传递

(3)优点:安全,避免出现or 1=1表内数据全部删除的情况

2、${}表达式

(1)作用:传递列名

(2)传递方式:字符串拼接方式传递

(3)优点:

优点一:通过加‘’可实现参数值传递

优点二:可以实现排序列名传递数据显示列名传递两个功能

五、insert标签的3个属性,获取插入数据的主键值

1、useGeneratedKeys 设置方法是否返回此条数据的主键值

2、keyColumn 设置类中谁来接收主键值

3、keyProperty 设置表中谁为主键(只针对当前返回主键值这个过程)

 <insert id="saveAdmin" parameterType="admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">insert into admin(account,password,gender)value(#{account},#{password},#{gender})</insert>

六、单元测试

1、功能:实现对单个方法进行测试

2、配置:

将junit包导入到项目中

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>provided</scope>
</dependency>

3、使用:注意:单元测试的方法必须是public访问权限修饰符

@Testpublic void find(){System.out.println("你好");}

七、查询接口

1、返回值为一个值

int findAdminCount();
<select id="findAdminCount" resultType="java.lang.Integer">select count(*) from admin</select>

2、返回值为一个对象

Admin findAdminById(int id);
<select id="findAdminById" parameterType="int" resultType="Admin">select * from admin where id = #{id}</select>

3、返回值为多个对象

List<Admin> findAdmins();
<select id="findAdmins" resultType="com.ffyc.mybatispro.model.Admin">select * from admin</select>

注意:必须使用集合去接收返回回来的多个对象,否则就会

八、单表自动将查询结果中的记录封装为一个对象需要注意的事项

1、模型类中一定要有无参构造方法,否则就会

并且在模型类中一定要对私有属性全部实现get和set方法

2、数据库表中的列名一定要与对应模型类中的属性名相同,否则就会

快捷方式:java中使用标准驼峰命名,数据库中使用下划线连接命名,可以开始全局设置实现自动转换,即就是adminPhone与admin_phone相对应

实现方式:在全局配置中添加此配置

<setting name="mapUnderscoreToCamelCase" value="true"/>

九、方法中传递String类型的参数时,必须使用注解标签@Param与参数值绑定才能将将参数值正确传到sql中,否则就会

正确做法:

List<Admin> findAdmins(@Param("col") String col);
<select id="findAdmins" resultType="com.ffyc.mybatispro.model.Admin" parameterType="string">select * from admin order by ${col}</select>

十、resultType特殊处理结果集

1、作用:

处理模型类的属性名与数据库列名不对应的问题

2、使用

<resultMap id="adminMap" type="admin"><id property="id" column="id"></id><result property="account" column="account"></result><result property="password" column="password"></result><result property="gender" column="gen"></result><result property="adminPhone" column="admin_phone"></result></resultMap><select id="findAdminById" parameterType="int" resultMap="adminMap">select id,password,account,gen as gender,admin_phone from admin where id = #{id}</select>

解析:resultMap中的id属性是POJO类,是唯一标识,sql语句的查询结果被对应的resultMap接收,type属性是结果类,内部的id标签映射主键,result标签映射非主键,property设置POJO类的属性名,column设置查询结果的列名

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

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

相关文章

961题库 北航计算机 操作系统 附答案 选择题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 计算机系统的组成包括&#xff08; &#xff09; A、程序和数据 B、处理器和内存 C、计算机硬件和计算机软件 D、处理器、存储器和外围设备 财务软件是一种&#xff…

iOS——类与对象底层探索

类和对象的本质 当我们使用OC创建一个testClass类并在main函数创建它的实例对象的时候&#xff0c;OC的底层到底是什么样的呢&#xff1f; 首先&#xff0c;我们要了解OC对象的底层结构&#xff0c;那么我们就得知道&#xff1a;OC本质底层实现转化其实都是C/C代码。 使用下面…

11Linux学习笔记

Linux 实操篇 目录 文章目录 Linux 实操篇1.rtm包&#xff08;软件&#xff09;1.1 基本命令1.2 基本格式1.3安装rtm包1.4卸载rtm包 2.apt包2.1 基本命令结构2.2 常用选项2.3常用命令 1.rtm包&#xff08;软件&#xff09; 1.1 基本命令 1.2 基本格式 1.3安装rtm包 1.4卸载r…

④单细胞学习-cellchat细胞间通讯

目录 1&#xff0c;原理基础 流程 受体配体概念 方法比较 计算原理 2&#xff0c;数据 3&#xff0c;代码运行 1&#xff0c;原理基础 原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov) GitHub - sqjin/CellChat: R toolk…

字符串操作java

题目&#xff1a; 描述 给定长度为n的只有小写字母的字符串s&#xff0c;进行m次操作&#xff0c;每次将[l,r]范围内所有c1字符改成c2&#xff0c;输出操作完的字符串 输入描述&#xff1a; 第一行两个数n,m 第二行一个字符串s 之后m行&#xff0c;每行两个数l 、r两个字符…

[DDR5 Jedec 4-1] 预充电命令 Precharge

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 1. 预充电&#xff08;Precharge&#xff09;含义 由于SDRAM的寻址具体独占性&#xff0c;因此在进行完读写操作后&#xff0c;若需对同一L-Bank的另一行进行寻址&#xff0c;则必须先关闭原…

针对大模型的上下文注入攻击

大型语言模型&#xff08;LLMs&#xff09;的开发和部署取得了显著进展。例如ChatGPT和Llama-2这样的LLMs&#xff0c;利用庞大的数据集和Transformer架构&#xff0c;能够产生连贯性、上下文准确性甚至具有创造性的文本。LLMs最初和本质上是为静态场景设计的&#xff0c;即输入…

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…

C++进阶之AVL树+模拟实现

目录 目录 一、AVL树的基本概念 1.1 基本概念 二、AVL树的模拟实现 2.1 AVL树节点的定义 2.2 插入操作 2.3 旋转操作 2.4 具体实现 一、AVL树的基本概念 1.1 基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

微信里的东西怎么打印出来呢

随着微信的普及&#xff0c;我们的日常生活和工作都离不开这个强大的社交工具。无论是重要的工作文件、孩子的作业、还是精彩的旅行照片&#xff0c;我们都习惯在微信里保存和分享。但是&#xff0c;当需要将这些微信里的内容打印出来时&#xff0c;很多人可能会感到困惑和麻烦…

【C++】vector的模拟实现

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 1. vector的核心框架接口 2. 构造函数 2.1 基本构造 2.2 拷贝构造&#xff08;传统写法&#xff09; 2.3 析构函数 2…

验证外星语词典

在解决算法题时&#xff0c;哈希表是经常被使用的工具&#xff0c;可以用来记录字符串中字母出现的次数&#xff0c;字符串中字符出现的位置等&#xff0c;这里用到的就是利用哈希表储存字符串中字符出现的的位置。 “外星语”的字母表顺序是不一样的&#xff0c;所以…

SIMBA:单细胞嵌入与特征

目前大多数单细胞分析管道仅限于细胞嵌入&#xff0c;并且严重依赖于聚类&#xff0c;而缺乏显式建模不同特征类型之间相互作用的能力。此外&#xff0c;这些方法适合于特定的任务&#xff0c;因为不同的单细胞问题的表述方式不同。为了解决这些缺点&#xff0c;SIMBA作为一种图…

43.自定义线程池(一)

ThreadPool是线程池&#xff0c;里面是一定数量的线程&#xff0c;是消费者。 BlockingQueue阻塞队列&#xff0c;线程池中的线程会从阻塞队列中去拿任务执行。任务多了线程池处理不过来了&#xff0c;就会到Blocking Queue中排队&#xff0c;等待执行。链表结构&#xff0c;特…

使用python实现超市购物系统(一个小例子)

可以增加其他功能&#xff0c;这里就展示一个小的例子~

Crosslink-NX器件应用连载(11): 图像(数据)远程传输

作者&#xff1a;Hello&#xff0c;Panda 大家下午好&#xff0c;晚上好。这里分享一个Lattice Crosslink-NX器件实现图像或数据&#xff08;卫星数据、雷达数据、ToF传感器数据等&#xff09;远程传输的案例&#xff08;因为所描述的内容颇杂&#xff0c;晒图不好晒&#xff…

【刷题】初探递归算法 —— 消除恐惧

送给大家一句话&#xff1a; 有两种东西&#xff0c; 我对它们的思考越是深沉和持久&#xff0c; 它们在我心灵中唤起的惊奇和敬畏就会日新月异&#xff0c; 不断增长&#xff0c; 这就是我头上的星空和心中的道德定律。 -- 康德 《实践理性批判》 初探递归算法 1 递归算…

我给线程池管理框架hippo4j找bug

1 虚拟机参数不生效 hippo4j的docker启动脚本位于 docker/docker-startup.sh 。从下图可以看到 JAVA_OPT放在了jar包名 hippo4j-server.jar之后&#xff0c;而只有项目参数才放在jar包名之后。 实际上这里JAVA_OPT中包含虚拟机参数&#xff0c;而虚拟机参数要放在jar包名之前…

前端之HTML语言(持续更新)

前端之HTML语言 学习完后端的各种层之后&#xff0c;今天开始学习前端&#xff0c;前端和后端都是一个项目的组成部分。 前端对应得到语言是HTML&#xff0c;HTML最重要的有三块&#xff0c;行为&#xff0c;样式&#xff0c;J结构。行为就是交互&#xff0c;理解为鼠标的点击…

【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型

文章目录 一、背景二、方法2.1 提升点2.2 训练样本 三、效果3.1 整体效果对比3.2 模型对于 zero-shot 形式的指令的结果生成能力3.3 模型对于 zero-shot 多语言的能力3.4 限制 四、训练4.1 数据4.2 超参 五、代码 论文&#xff1a;Improved Baselines with Visual Instruction …