Mybatis的增删改查操作

news2025/7/18 8:40:54

    增删改查操作对于我们程序员来说是最基本也是最重要的操作.那么在Mybatis框架下如何对jdbc中的数据进行增删改查操作?

首先,在介绍之前,我们先来了解一下我们在进行增删改查操作过程中会遇到的各种属性和重要方法:

属性

1.namespace:

称为命名空间,用来将dao与Mapper进行绑定,namespace中的值要与所需dao的目录一致

栗子:

比如我们创建了一个com.ffyc.mybatisdemo.dao包下的一个AdminDao,那么我们在进行绑定时就必须保证与所需目录一致.如下所示,这样我们就通过namespace将dao与Mapper进行了绑定.

<mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
 ​
 </mapper>

2.id:

命名空间下的唯一标识符,其中的值为namespace中对应的接口中的方法名称

栗子:

例如我们在AdminDao接口中创建了一个抽象方法Admin findAdminById(int id); ,那么我们就需要在id中传入所需的方法名.

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

3.resultType:

SQL执行语句的返回值类型.

  • 当返回值为对象或者对象的集合时,填写该对象的全限定名(包名+类名)

  • 当返回值为字符串或者整数类型时,填写对应的类型.如: String,Integer

注:

此处可以填写对应类型名java.lang.Integer,也可以填写int.因为Mybatis在jar包中为这些字符串和常用类型定义了别名.我们可以通过在jar包中查找源码验证:

栗子:

1.比如我们要通过id查询Admin,返回的是一个Admin对象,因此我们需要填入对象的类名

 <select id="findAdminById" resultType="Admin">
         select * from admin where id = #{id}
 </select>

2.比如我们需要查询表中Admin对象的数量,返回的是一个数值,因此我们需要传入对应的类型

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

4.parameterType:

dao接口中方法的参数数据类型.其值为java数据类型全限定名(包名+类名)或Mybatis中定义的别名

栗子:

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

方法:

此处有一个方法需要特别注意:

 commmit();

此方法为向数据库提交事物.

     在Mybatis中默认将commit()的值改为了false,即在执行完SQL后不会自动向数据库提交事物.我们在进行查询操作时,因为不涉及提交事物,因此不用编写.但是在进行数据的增加,修改,删除时,一定要记得手动加上sqlSession.commit()提交事物;否则只是在idea中执行了语句,而没有在数据库接收到事物,因此中真正执行.

栗子:

@Test
     //保存
     public void saveADmin() {
 ​
         SqlSession sqlSession = MybatisUtil.getSqlSession();
         AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
         Admin admin = new Admin("ls", "111","女");
         int res = adminDao.saveAdmin(admin);
         System.out.println(res);
 ​
         sqlSession.commit(); //提交数据库事物
         sqlSession.close();
     }

接下来我们来进行Mybatis的增删改查操作介绍:

1.首先,我们要在数据库中创建好表,并存入基本数据,此处不再进行演示

2.创建对应的对象,及所需get(),set(),toString()方法:

 package com.ffyc.mybatisdemo.model;
 ​
 public class Admin {
 ​
      private int id;
      private String account;
      private String password;
      private String xb;
      private String adminPhone;
 ​
     public String getXb() {
         return xb;
     }
 ​
     public void setXb(String xb) {
         this.xb = xb;
     }
 ​
     public String getAdminPhone() {
         return adminPhone;
     }
 ​
     public void setAdminPhone(String adminPhone) {
         this.adminPhone = adminPhone;
     }
 ​
     public Admin() {
         System.out.println("Admin无参构造");
         //此处无参构造必须编写
     }
 ​
     public Admin(String account, String password, String gender) {
         this.account = account;
         this.password = password;
         this.xb = gender;
     }
 ​
     public int getId() {
         return id;
     }
 ​
     public void setId(int id) {
         System.out.println("SetId");
         this.id = id;
     }
 ​
     public String getAccount() {
         return account;
     }
 ​
     public void setAccount(String account) {
         this.account = account;
     }
 ​
     public String getPassword() {
         return password;
     }
 ​
     public void setPassword(String password) {
         this.password = password;
     }
 ​
 ​
     @Override
     public String toString() {
         return "Admin{" +
                 "id=" + id +
                 ", account='" + account + '\'' +
                 ", password='" + password + '\'' +
                 ", xb='" + xb + '\'' +
                 ", adminPhone='" + adminPhone + '\'' +
                 '}';
     }
 }

3.接下来编写dao

 package com.ffyc.mybatisdemo.dao;
 ​
 import com.ffyc.mybatisdemo.model.Admin;
 import org.apache.ibatis.annotations.Param;
 ​
 public interface AdminDao {
 ​
     //此处int返回的值是操作的行数
     int saveAdmin(Admin admin);
 ​
     int updateAdmin(Admin admin);
 ​
     int deleteAdmin(int id);
 ​
     int findAdminCount();
 ​
 }

4.编写mapper

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
     <insert id="saveAdmin" parameterType="Admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         insert into admin (account,password,gender)values (#{account},#{password},#{gender})
     </insert>
     <update id="updateAdmin" parameterType="Admin">
         update admin set account=#{account},password=#{password}
         where id=#{id}
     </update>
     <delete id="deleteAdmin" parameterType="Admin">
         delete from admin where id = #{id}
     </delete>
     <select id="findAdminCount" resultType="java.lang.Integer">
         select count(*) from admin
     </select>
 </mapper>

5.编写测试类

 package com.ffyc.mybatisdemo.test;
 ​
 import com.ffyc.mybatisdemo.dao.AdminDao;
 import com.ffyc.mybatisdemo.model.Admin;
 import com.ffyc.mybatisdemo.util.MybatisUtil;
 import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 ​
 import java.io.IOException;
 ​
 public class Test2 {
 ​
     @Test
     //新增
     public void saveADmin() {
 ​
         SqlSession sqlSession = MybatisUtil.getSqlSession();
         AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
         Admin admin = new Admin("ls", "111","女");
         int res = adminDao.saveAdmin(admin);
         System.out.println(res);
 ​
         sqlSession.commit(); //提交数据库事物
         sqlSession.close();
     }
 ​
     @Test
     //修改
     public void updateADmin() {
 ​
         SqlSession sqlSession = MybatisUtil.getSqlSession();
         AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
         Admin admin = new Admin("zz", "111","女");
         admin.setId(4);
         int res = adminDao.updateAdmin(admin);
         System.out.println(res);
 ​
         sqlSession.commit(); //提交数据库事物
         sqlSession.close();
     }
 ​
     @Test
     //删除
     public void deleteADmin() {
 ​
         SqlSession sqlSession = MybatisUtil.getSqlSession();
         AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
         int res = adminDao.deleteAdmin(5);
         System.out.println(res);
 ​
         sqlSession.commit(); //提交数据库事物
         sqlSession.close();
     }
 }
 ​

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

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

相关文章

[Python教程]三位数倒序

前言 最近博主也是没有什么时间来写文章&#xff0c;估计已经快两个月没写新文章了吧&#xff0c;这不&#xff0c;今天有空&#xff0c;所以想着写一篇文章。 今天的文章主要是面对Python刚刚入门的读者写的 涉及知识点 数据的基本运算字符串与数字的拼接输入与打印 相信…

Python正则表达式(持续更新,各种字符串筛选,总有一款适合您当前的功能)

前言 整个文章都是以精华部分为主&#xff0c;主要分文2个部分&#xff1a; 1、python的【re】正则表达式使用方法。 2、【re】正则表达式以及对应的demo。 第一部分让你知道【re】的几个函数的区别&#xff0c;更好的匹配项目中的需求。 第二部分让你快速的匹配具体需要的正则…

学习笔记-java代码审计-表达式注入

java代码审计-表达式注入 0x01漏洞挖掘 spel spel表达式有三种用法&#xff1a; 注解 value("#{表达式}") public String arg; 这种一般是写死在代码中的&#xff0c;不是关注的重点。 xml <bean id"Bean1" class"com.test.xxx"><prop…

Jquery

目录 一、基本介绍 二、下载地址 三、基本使用 四、jQuery对象和dom对象 五、jQuery选择器 六、jQuery的DOM操作 七、总结 相关文章 JSP的使用JSP的使用 JSON&AjaxJSON&Ajax一、基本介绍jQuery 是一个快速的&#xff0c;简洁的 javaScript 库&#xff0c;使用户能更方便…

DINO学习笔记

DINO学习笔记 DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection Abstract 我们提出了DINO(DETR with Improved deNoising anchOr boxes)&#xff0c;一种先进的端到端对象检测器。DINO采用对比的去噪训练方法、混合查询选择方法进行锚点初…

【蓝桥杯专项】动态规划_背包问题合集(Java)

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【蓝桥杯专项】 ✈️✈️本篇内容:动态规划_背包问题合集&#xff01; &#x1f680;&#x1f680;码云仓库gitee&#xff1a;Java数据结构代码存放! ⛵⛵作者简介…

【C++笔试强训】第二十二天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

动态内存管理

目录 内存中的栈区和堆区 malloc free calloc realloc 内存中的栈区和堆区 我们知道php的底层是C (任何语言其实都可以分为大同小异的几块) 而C语言的内存模型分为5个区&#xff1a;栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下&#xff1a; 1、栈区&…

网络:IP与MAC

如果我们要跟对方通信&#xff0c;我们需要知道对方的IP地址与MAC地址。 一、IP IP地址&#xff0c;32位&#xff0c;工作在网络层&#xff0c;属IP协议族。在互联网中逻辑的代表某一台设备&#xff0c;但是在不同的时间&#xff0c;与我合作的主机非常多。某一个设备使用完我…

2022/11/12 json格式转换对象 动态sql

PostMapping public Integer save(RequestBody User user){return userMapper.insert(user); }选择json格式。以为本人忘记选了415错误&#xff0c;media错误 mybatisx插件 sprinboot yml文件导入xml mybatis: mapper-locations: classpath:mapper/*.xml 一直报错 发现重复了…

【华为ICT大赛】华为云激活设备的方法以及数据上下行

先展示一下没有激活的时候在线调试的状态 然后下面我将激活他&#xff0c;让他变为下面这个样子 官方教程 这里我从0演示一个产品的创建到MQTT.fx连接到云平台并且接收数据。 进入华为云平台控制台 然后开始创建一个产品 创建完毕产品之后就可以开始创建服务了&#xff0c;一…

提高工作效率的 keychron 键盘,你还没有入手吗?

前言 大家好&#xff0c;今天给大家推荐一款我最近入手并且一直在使用的机械键盘 keychron K4 。我自己是一个键盘的重度使用者&#xff0c;由于工作的需求&#xff0c;对键盘有很大的依赖&#xff0c;而一款可以提高工作效率的键盘&#xff0c;往往可以让我们的工作事半功倍。…

文化馆建筑方案设计原理及方案

文化馆建筑的分类与作用 根据职能不同&#xff0c;文化馆建筑可分为文化馆、群众艺术馆和文化站等形式。 文化馆是国家设立的开展社会宣传教育、普及科学文化知识、组织辅导群众文化艺术(活动)的综合性文化事业机构和场所。 群众艺术馆是国家设立的组织指导群众文化艺术活动及…

Github工程中的Markdown语言应用

Github工程中的Markdown语言应用1. 介绍2. 工具2.1 下载链接2.2 编辑界面2.3 插件安装3. 基本操作3.1 标题编写3.2 正文编写3.3 代码块编写3.4 加粗倾斜3.5 有序列表3.6 无序列表3.7 行内代码编写4. 参考资料最早开源代码中&#xff0c;接触的最多的就是Readme文件&#xff0c;…

Altium格式PCB转换成Allegro操作指导

Altium格式PCB转换成Allegro操作指导 首先打开Altium Design的PCB文件,输出一个“PCB ASCII File(*.pcbdoc)”格式的文件。如下图 打开Allegro,选择was performance L模式,新建空白的brd。 导入Altium PCB 选择文件转换即可 转换成功 This section is describe what t…

Spring更简单的实现Bean对象的存取

目录 一、前言&#xff1a; 二、储存Bean对象 5大类注解 Bean方法注解 三、获取Bean对象 属性注入 优缺点 Setter注入 优缺点分析 构造方法注入 优缺点分析 经典面试题 &#xff1a;属性注入 &#xff0c;构造方法注入 和 Setter 注入 之间&#xff0c;有什么区别…

大数据Presto(四):Presto自定义函数和JDBC连接

文章目录 Presto自定义函数和JDBC连接 一、Presto 自定义函数 1、​​​​​​​UDF函数 2、​​​​​​​UDAF函数 二、Presto JDBC连接 Presto自定义函数和JDBC连接 ​​​​​​​一、Presto 自定义函数 我们可以登录Presto客户端&#xff0c;使用命令&#xff1a;s…

JavaScript 71 JavaScript JSON 71.5 JSON.parse()

JavaScript 文章目录JavaScript71 JavaScript JSON71.5 JSON.parse()71.5.1 实例 – 解析 JSON71.5.2 来自服务器的 JSON71.5.3 作为 JSON 的数组71.5.4 例外71.5.5 浏览器支持71 JavaScript JSON 71.5 JSON.parse() JSON 的常规用途是同 web 服务器进行数据传输。 在从 web…

Hive笔记-01 架构概述

文章目录1.概述2.Metadata/Metastore的作用3 Metastore三种配置方式3.1 Hive配置参数说明3.1.1 基本配置参数3.1.2 其他配置参数3.2 内嵌模式&#xff08;Embedded&#xff09; 3.2.1 hive-site.xml配置说明 3.2.2 hive-site.xml配置样例3.2.3 启动方式3.2.4 缺点3.3 本地模式&…

cmd常用命令行

前言 最近在看《深入剖析Tomcat》&#xff0c;其中涉及了常见的dos命令&#xff0c;这里做一些简单记录&#xff0c;其实跟linux命令很像。 案例 .bat&#xff1a;批处理文件 rem&#xff1a;用于注释&#xff0c;解释器不会执行以rem命令开始的行 - pause&#xff1a;暂停…