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访问权限修饰符

@Test
     public 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设置查询结果的列名

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

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

相关文章

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

pod 控制器介绍

一 pod 控制器相关理论介绍 1&#xff0c;Pod控制器 是什么 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行…

使用modbus-serial 库搭配 modbus slave 通过 modbus tcp client 协议来 写入 modbus 寄存器值

使用modbus-serial 库对modbus slave 写入寄存器值 modbus tcp client 代码 目标电脑&#xff08;启动modbus slave 的电脑&#xff09;ip为 192.168.3.46&#xff0c;端口502 // 读取另一台电脑&#xff0c;192.168.3.46:502 Modbus TCP // create an empty modbus client c…

2005NOIP普及组真题 4. 循环

线上OJ&#xff1a; 【05NOIP普及组】循环 核心思想&#xff1a;高精度 1、本题用到了标准的高精度乘法模板 void init(int a[]) //传入一个数组 {string s; cin >> s; //读入字符串s a[0] s.length(); //用a[0]计算字符串s的位数 for(i 1; i < a[0]; i) a[i] …

颠覆与重塑|AI助力汽车开发,汽车智能势不可挡

汽车行业深受人工智能的影响&#xff0c;人工智能正在为我们创造全新的出行方式。随着智能化的加速普及&#xff0c;越来越多的消费者开始关注汽车的智能化。智能化的水平已经成为众多消费者购车的参考因素&#xff0c;也成了车企竞争的主赛道&#xff0c;汽车行业也已经成为人…

高校科研信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;反馈管理&#xff0c;操作日志管理&#xff0c;科研项目管理&#xff0c;通知管理 科研人员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;反馈管理&#xff…

[SQL-SERVER:数据库安全及维护]:MSSM工具对用户进行用户授权和角色授权操作

文章目录 直接为用户授权&#xff08;20分&#xff09;1. 创建登录TLogin&#xff0c;自行指定登录密码服务器层面选择 安全性 > 点击 登录名 > 点击右键 > 点击 新建登录名 > 选择sqlserver验证 > 关闭强制登录更改密码异常解决&#xff1a;sqlserver 配置管理…

【最新鸿蒙应用开发】——什么是应用开发模型?Stage模型

在应用程序开发时通常需要使用应用模型来提供必备的组件和运行机制&#xff0c;有了应用模型&#xff0c;开发者可以基于一套统一的模型进行应用开发&#xff0c;使应用开发更简单、高效。接下来谈谈鸿蒙应用开发当中的两种模型&#xff1a; Stage模型&#xff1a; HarmonyOS …

过滤器、监听器、拦截器的区别

过滤器、监听器、拦截器的区别 过滤器&#xff08;filter&#xff09;、监听器&#xff08;Listener&#xff09;是JavaWeb的三大组件。而拦截器&#xff08;Interceptor&#xff09;是Spring框架中的。 我们主要是要分清除过滤器和拦截器的区别&#xff1a; 实现原理&#…

晶体(二):差分晶振

一、定义 差分晶振是一种有源晶体振荡器&#xff0c;输出差分信号&#xff08;由两个相位相反、幅度相等的信号组成&#xff09;&#xff0c;从而消除了共模噪声&#xff0c;具有抗干扰能力强、对参考电平完整性要求较弱、抑制串扰、EMI 能力强、功耗小、速率高、不受温度和电压…

【Ubuntu常用命令】终端个人常用命令总结

【Ubuntu常用命令】终端常用命令总结 查看硬盘挂载情况查看内存占用情况移动或重命名文件和目录复制文件或目录conda安装本地文件 查看硬盘挂载情况 mount 命令会列出当前系统上所有已挂载的文件系统。它会显示挂载点、文件系统类型、挂载选项等信息 mount df 命令用于显示文…

MySQL学习——影响选项文件处理的命令行选项和程序选项修改器

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件的处理&#xff0c;所以必须在命令行上给出&#xff0c;而不是在选项文件中给出。为了正常工作&#xff0c;这些选项中的每一个都必须先于其他选项给出&#xff0c;但以下情况除外&#xff1a; -prin…

AK F.*ing leetcode 流浪计划之费马小定理与组合数取模

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 费马小定理与证明 参考 https://zhuanlan.zhihu.com/p/594859227 费马小定理&#xff1a;如果p是一个质数&#xff0c;而正整数a不是p的倍数&#xff0c;那么a(p-1)≡…

继承的基本语法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在编写类时&#xff0c;并不是每次都要从空白开始。当要编写的类和另一个已经存在的类之间存在一定的继承关系时&#xff0c;就可以通过继承来达到代…

AI早班车6.3

1.蚂蚁技术日&#xff1a;支付宝三大「AI 管家」亮相。 2.百度赵世奇&#xff1a;百度搜索&#xff0b;文心智能体平台&#xff0c;助力智能体人人可用。 3.腾讯&#xff1a;发布大模型App腾讯元宝。 4.AFAC2024金融智能创新大赛启动&#xff0c;让高质量金融服务人人可用 …

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

lux和ffmpeg进行下载各大主流自媒体平台视频

1、lux下载&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1WjGbouL3KFTU6LeqZmACpA?pwdagpp 提取码&#xff1a;agpp 2、ffmpeg下载&#xff0c;跟lux放在同一个目录&#xff1b; 3、为lux、ffmpeg设置环境变量&#xff1b; 4、WINR&#xff0c;打开运行&#xff0…

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…

chat4-Server端保存聊天消息到mysql

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 同时将聊天消息保存到mysql 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql 本文档主要总结了将聊天…

基于django | 创建app,并启动django

1、删除系统默认的目录路径&#xff1a;BASE_DIR / templetes 2、在终端输入命令&#xff1a; python manage.py startapp app01 # 这里的app01是我创建app的名称 3、如果没有创建成功&#xff0c;手动点击 Creat App , 4、在 setting.py 中找到 INSTALLED_APPS ,添加 ap…