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.mzph.cn/pingmian/21243.shtml

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

相关文章

创建对象和继承的多种方式

1. 创建对象的多种方式&优缺点 1.1 工厂模式 function createPerson(name) {var o new Object();o.name name;o.getName function () {console.log(this.name);};return o; }var person1 createPerson(kevin);优点&#xff1a;简单&#xff1b; 缺点&#xff1a;对象…

Linux C/C++ 系统错误

在C中&#xff0c;如果调用了库函数&#xff0c;可以通过函数的返回值判断调用是否成功。其实还有一个整型的全局变量errno&#xff0c;存放了函数调用过程中产生的错误代码。 如果调用库函数失败&#xff0c;可以通过errno的值来查找原因 #include <errno.h>strerror(…

密码学——银行应用程序安全:理解和解决关键安全问题

1. 认证和访问控制 1.1 用户认证 银行应用程序通过Web服务器让客户访问其银行账户的操作历史。用户首先通过用户名和密码进行认证&#xff0c;然后才能查看其账户历史。这个过程涉及基本的认证和访问控制机制&#xff0c;确保只有合法用户可以访问其个人信息。 2. 安全执行环境…

时序数据库介绍及应用场景,C#实例

一&#xff0c;时序数据库介绍 时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;是一种专门用于存储、处理和查询时间序列数据的数据库系统。以下是关于时序数据库的详细解释&#xff1a; 定义 时序数据库是一种优化用于摄取、处理和存储时间戳数据的…

回溯算法之电话号码字母组合

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "2…

【MySQL】探索 MySQL 窗口函数(Window Functions)

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在大数据分…

Java web应用性能分析之【jvisualvm远程连接云服务器】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具&#xff0c;现在可以详细看看jvisualvm的使用&#xff0c;一般java进程都是部署云服务器&#xff0c;或者托管IDC机…

【MySQL】探索 MySQL 中的 CASE WHEN 表达式

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在数据库查…

每周统计-20240531

用于测试程序的稳定性&#xff1a; 龙虎榜&#xff1a; 成交额&#xff1a; 封成比&#xff1a; 收盘前放量&#xff1a; 开盘抢筹&#xff1a; 封单额&#xff1a;

论文阅读:Correcting Motion Distortion for LIDAR HD-Map Localization

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;http://arxiv.org/pdf/2308.13694.pdf 代码地址&#xff1a;https://github.com/mcdermatt/VICET 概要 激光雷达的畸变矫正是一个非常重要的工作。由于扫描式激光雷达传感器需要有限的时间来创建…

YOLOv5训练数据集的配置文件格式与使用技巧

文章目录 一 概述二 配置文件说明2.1 官方配置文件解析2.2 自定义数据集配置文件2.3 其他格式指定数据集路径2.4 多个数据集路径指定 三 总结注意事项 一 概述 本文档主要记录 YOLOv5 算法在进行模型训练前&#xff0c;关于加载数据集的配置文件的说明。 默认情况下&#xff…

RPC-----RCF

RPC RPC(Remote Procedure Call Protocol&#xff09;——远程过程调用协议。 RCF

linux命令:调试必备工具dmesg

在服务器上进行芯片调试时&#xff0c;我们会遇到各种各样的问题&#xff0c;很多问题与操作系统相关。此时就需要了解操作系统发生了哪些事件。 dmesg 是linux系统中用来打印或控制内核缓冲区内容的命令。这个环形缓冲区记录了系统启动以来发生的各种事件消息&#xff0c;包括…

ChatTTS改良版 - 高度逼真的人类情感文本生成语音工具(TTS)本地一键整合包下

先介绍下ChatTTS 和之前发布的 Fish Speech 类似&#xff0c;都是免费开源的文本生成语音的AI软件&#xff0c;但不同的是&#xff0c;ChatTTS测试下来&#xff0c;对于人类情感语调的模仿&#xff0c;应该是目前开源项目做的最好的&#xff0c;是一款高度接近人类情感、音色、…

MYSQL学习笔记-基础篇

一、SQL 1、DDL 2、DML 3、DQL 4、DCL 主要包括用户管理和权限控制 1&#xff09;DCL-管理用户 --查询用户 use mysql select * from user&#xff1b;--新增用户 CREATE USER 用户名主机名 IDENTIFIED BY 密码eg&#xff1a; create user hahalocalhost identied by 123; cre…

ppo-clip的本质以及它为什么是另一种ppo-KL-penalty

显然&#xff0c;clip在优势函数A>0且重采样比例过大时截断了上限&#xff0c;在优势函数A<0且重采样比例过小时也截断了负值的上限。 我以第一种情况解释clip的作用。 首先&#xff0c;所有选择的action都是RL中你希望增大概率的action。 当A>0时&#xff0c;说明这…

WordPress中借助Table of Contents Plus+Widget Options插件,实现仅在文章侧边栏显示文章目录的功能

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;今天心血来潮&#xff0c;写了一篇文章&#xff0c;忽然发现自己的文章极少有目录&#xff0c;这对于长文章的阅读来说是十分不利的&#…

【自动驾驶】针对低速无人车的线控底盘技术

目录 术语定义 一般要求 操纵装置 防护等级 识别代号 技术要求 通过性要求 直线行驶稳定性 环境适应性要求 功能安全要求 信息安全要求 故障处理要求 通信接口 在线升级(OTA) 线控驱动 动力性能 驱动控制响应能力 线控制动 行车制动 制动响应能力 线控转向 总体要求 线控…

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点&#xff1a;使用场景&#xff1a; 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点&#xff1a;使用场景&#xff1a; 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…

SQL刷题笔记day8——SQL进阶——表与索引操作

目录 1 创建一张新表 2 修改表 3 删除表 4 创建索引 5 删除索引 1 创建一张新表 我的答案 create table if not exists user_info_vip (id int(11) primary key auto_increment Comment自增ID, # 有了主键就不用写not nul了 uid int(11) unique not null Comment用户ID, …