【Mybatis篇】Mybatis的注解开发

news2024/10/6 22:41:52

 

      🧸安清h:个人主页

   🎥个人专栏:【计算机网络】,【Mybatis篇】

🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。

文章目录

🎯 @Select注解

🚦 创建数据表worker

🚦创建持久化类Worker

🚦创建接口WorkerMapper

🚦核心配置文件

🚦测试类及测试方法

🎯@Insert注解

🚦示例

 ✨接口类编写

✨测试方法

🎯@Update注解

🚦示例

 ✨接口类编写

✨测试方法

🎯@Delete注解

🚦示例

 ✨接口类编写

✨测试方法

🎯@Param注解

🚦示例

 ✨接口类编写

✨测试方法


🎯 @Select注解

@Select 注解是 MyBatis 框架中用于执行查询语句的注解,通常用于映射 SQL 查询语句到 Java 方法上。在 MyBatis 中,注解是一种将 SQL 语句直接嵌入到 Java 代码中的便捷方式,而不需要使用 XML 配置文件。

下面通过一个例子来展示其用法。

🚦 创建数据表worker

create table worker(
    id int auto_increment primary key ,
    name varchar(100),
    age int,
    sex varchar(50),
    worker_id int UNIQUE
);
insert into worker(name,age,sex,worker_id) values ('丽丽',18,'女',1001);
insert into worker(name,age,sex,worker_id) values ('刚刚',24,'男',1002);
insert into worker(name,age,sex,worker_id) values ('甜甜',21,'女',1003);

🚦创建持久化类Worker

public class Worker {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private Integer worker_id;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getWorker_id() {
        return worker_id;
    }

    public void setWorker_id(Integer worker_id) {
        this.worker_id = worker_id;
    }

    @Override
    public String toString() {
        return "Worker{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", worker_id=" + worker_id +
                '}';
    }
}

🚦创建接口WorkerMapper

public interface WorkerMapper {
    @Select("select * from worker where id=#{id}")
   public Worker findAllById(int id);
}

🚦核心配置文件

<mappers>
        <mapper class="com.haust.dao.WorkerMapper"/>
    </mappers>

🚦测试类及测试方法

 @Test
    public void testFind(){
        SqlSession sqlSession=MyBatisUtil.getSession();
        WorkerMapper workerMapper=sqlSession.getMapper(WorkerMapper.class);
        Worker worker=workerMapper.findAllById(1);
        System.out.println(
                worker.toString()
        );
        sqlSession.close();
    }

🎯@Insert注解

@Insert 注解用于映射 SQL 的插入语句。当需要向数据库表中插入一条新记录时,可以使用此注解。如果插入操作后需要返回生成的主键,可以使用 @Options 注解配合 useGeneratedKeyskeyProperty 属性来实现。

🚦示例

 ✨接口类编写

向接口类WorkerMapper中添加以下代码:

 @Insert("insert into worker(name,age,sex,worker_id) values(#{name},#{age},#{sex},#{worker_id})")
    int insertWorker(Worker worker);

✨测试方法

 @Test
    public void testInsert(){
        SqlSession sqlSession=MyBatisUtil.getSession();
       Worker worker=new Worker();
       worker.setId(4);
       worker.setName("青青");
       worker.setAge(22);
       worker.setSex("男");
       worker.setWorker_id(1004);
       WorkerMapper workerMapper=sqlSession.getMapper(WorkerMapper.class);

       int result=workerMapper.insertWorker(worker);
       if(result>0){
           System.out.println("成功插入"+result+"条信息");
       }else{
           System.out.println("插入失败");
       }
       System.out.println(worker.toString());
       sqlSession.commit();
       sqlSession.close();
    }

🎯@Update注解

@Update 注解用于映射 SQL 的更新语句。当需要更新数据库表中的记录时,可以使用此注解。可以指定更新的条件,例如根据某个字段的值。

🚦示例

 ✨接口类编写

向接口类WorkerMapper中添加以下代码:

@Update("update worker set age=#{age} and sex=#{sex} where id=#{id}")
    int UpdateWorker(Worker worker);

✨测试方法

 @Test
    public void testUpdate(){
        SqlSession sqlSession=MyBatisUtil.getSession();
        Worker worker=new Worker();
        worker.setId(4);
        worker.setAge(23);
        worker.setSex("女");
        WorkerMapper workerMapper=sqlSession.getMapper(WorkerMapper.class);
        int result=workerMapper.UpdateWorker(worker);
        if(result>0){
            System.out.println("成功修改"+result+"条数据");
        }else{
            System.out.println("修改数据失败");
        }
        System.out.println(worker.toString());
        sqlSession.commit();
        sqlSession.close();
    }

🎯@Delete注解

@Delete 注解用于映射 SQL 的删除语句。当需要从数据库表中删除记录时,可以使用此注解。可以指定删除的条件,例如根据某个字段的值。

🚦示例

 ✨接口类编写

 @Delete("delete from worker where id=#{id}")
    int DeleteWorker(int id);

✨测试方法

@Test
    public void testDelete(){
        SqlSession sqlSession=MyBatisUtil.getSession();
        WorkerMapper workerMapper=sqlSession.getMapper(WorkerMapper.class);
        int result=workerMapper.DeleteWorker(4);
        if(result>0){
            System.out.println("成功删除"+result+"条数据");
        }else{
            System.out.println("删除数据失败");
        }
        sqlSession.commit();
        sqlSession.close();
    }

🎯@Param注解

@Param 注解用于为 MyBatis 方法参数提供命名参数的功能。在 SQL 语句中,可以使用这些命名参数来引用方法参数。这对于动态 SQL 特别有用,也使得代码更加清晰。当方法有多个参数时,使用 @Param 注解可以避免参数索引的混乱。

🚦示例

 ✨接口类编写

 @Select("select * from worker where id=#{param1} and name=#{param2}")
    Worker selectWorker(@Param("param1")int id,@Param("param2")String name);

✨测试方法

    @Test
    public void testParam(){
        SqlSession sqlSession=MyBatisUtil.getSession();
        WorkerMapper workerMapper=sqlSession.getMapper(WorkerMapper.class);
        Worker worker=workerMapper.selectWorker(1,"丽丽");
        System.out.println(worker.toString());
        sqlSession.close();
    }

以上就是今天要讲的内容了,主要跟练了关于@Select,@Update,@Insert,@Delete,@Param的部分。到此为止,Mybatis部分已全部更完,后续会继续更新Spring相关内容,如果您感兴趣的话,可以订阅我的相关专栏。非常感谢您的阅读,如果这篇文章对您有帮助,那将是我的荣幸。我们下期再见啦🧸!

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

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

相关文章

Nuxt.js 应用中的 app:suspense:resolve 钩子详解

title: Nuxt.js 应用中的 app:suspense:resolve 钩子详解 date: 2024/10/6 updated: 2024/10/6 author: cmdragon excerpt: app:suspense:resolve 是一个强大的钩子,允许开发者在异步数据解析完成后的最后一步执行必要的处理。通过合理使用该钩子,我们可以优化组件的渲染…

AI赋能,旅游新纪元,看旅游大厂携程的AI实践

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 国庆假期马上过去了&#xff0c;2024年国庆…

智能制造的人机料法环的内涵

在生产和管理领域,有个很重要的概念叫 “人、机、料、法、环”。 “人” 就是参与其中的人员,他们的技能、态度、责任心等对事情的结果影响很大; “机” 指的是机器设备和工具等,就像干活要用的家伙事儿,好不好用、正不正常直接关系到工作的效率和质量; “料” 呢,就…

【动态规划-最长公共子序列(LCS)】【hard】【科大讯飞笔试最后一题】力扣115. 不同的子序列

给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 10^9 7 取模。 示例 1&#xff1a; 输入&#xff1a;s “rabbbit”, t “rabbit” 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种可以从 s 中得到 “rabbit”…

手撕正弦-余弦位置编码(Sinusoidal Positional Encoding)

改写后的代码&#xff1a; import torch import math import torch.nn as nnclass PositionalEncoder(nn.Module):def __init__(self, d_model, max_seq_len80):super().__init__()self.d_model d_model# 根据 pos 和 i 创建一个常量 PE 矩阵pe torch.zeros(max_seq_len, d_…

【unity游戏开发】彻底理解AnimatorStateInfo,获取真实动画长度

前言 前置知识&#xff1a;设置参数后&#xff0c;下一个循环才会切换对应动画&#xff0c;所以在下一个循环获取真实的动画长度 AnimatorStateInfo是结构体&#xff01;值类型&#xff0c;要不断重复获取才是最新的 主要是自动设置trigger切换的动画自动切回上一个动画&#x…

Linux命令:用于管理 Linux 系统中用户组的命令行工具gpasswd详解

目录 一、概述 二、使用方法 1、 基本语法 2、 常用选项 &#xff08;1&#xff09;无选项&#xff08;仅组名&#xff09; &#xff08;2&#xff09;-a 用户 &#xff08;3&#xff09;-d 用户 &#xff08;4&#xff09;-M 用户列表 &#xff08;5&#xff09;-A 管…

系统架构设计师-下午案例题(2021年下半年)

1.试题一(共25分) 阅读以下关于软件架构设计与评估的叙述在答题纸上回答问题1和问题2。 【说明】某公司拟开发一套机器学习应用开发平台支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&#xf…

【Linux】信号知识三把斧——信号的产生、保存和处理

目录​​​​​​​ 1、关于信号的前置知识 1.1.什么是信号&#xff1f; 1.2.为什么要学习信号&#xff1f; 1.3.如何学习信号&#xff1f; 1.4.一些常见的信号 1.5.信号的处理方式 1.6.为什么每一个进程都可以系统调用&#xff1f; 2.信号的产生 2.1.kill命令产生信号…

[Python学习日记-40] 函数进阶之装饰器

[Python学习日记-40] 函数进阶之装饰器 简介 引子 什么是装饰器 装饰器终结版 装饰器的层层叠加 简介 在前面铺垫了这么多终于该讲到重点了&#xff0c;前面说的匿名函数、高阶函数、闭包等等都是为了这篇文章所讲的装饰器而使用的&#xff0c;本篇文章将会一一个故事通俗…

个人网站,怎么操作才能提升个人网站的流量

运营个人网站以提升流量是一个综合性的过程&#xff0c;涉及内容优化、技术调整、用户体验提升以及外部推广等多个方面。以下是一些专业建议&#xff0c;旨在帮助个人网站运营者有效提升网站流量&#xff1a; 1.精准关键词研究与优化 -关键词研究&#xff1a;利用工具如谷歌…

关于 Python 3.13 你所需要知道的几点

什么是全局解释器锁 (GIL)&#xff1f; 自20世纪80年代末&#xff0c;Guido Van Rossum在荷兰阿姆斯特丹东部的一个科技园区开始开发Python编程语言&#xff0c;它最初被设计为一种单线程的解释型语言。这到底是什么意思呢&#xff1f; 你可能会听说&#xff0c;编程语言分为解…

C++-容器适配器- stack、queue、priority_queue和仿函数

目录 1.什么是适配器 2.deque 1.简单了解结构 2.deque的缺陷 3.为什么选择deque作为stack和queue的底层默认容器 3.stack&#xff08;栈&#xff09; 4.queue&#xff08;队列&#xff09; 5.仿函数 6.priority_queue&#xff08;优先级队列&#xff09;&#xff08;堆…

IDEA 2024.3 预览:把开发者感动到哭了

幸运的人&#xff0c; 一生都被童年治愈&#xff1b; 不幸的人&#xff0c; 一生都在治愈童年 只有勇敢的人 和有钱的人才能先享受世界 缘分就是我还不知道 会见到你就误打误撞般 遇见了你 最近 IDEA 又发布了最新的 2024.3 的预览版本 EAP&#xff0c;把开发者的心激动的…

躺平成长-第四周的开发日记

回顾自己的小程序&#xff0c;现在自己有饮食/跑步/养生操/学习/学历提升/等多样化的kp值计算公式页面&#xff0c;自己tarbar导航页面有两个内容&#xff0c;kp值计算&#xff0c;躺平显示&#xff0c;单纯这些功能自己使用下来&#xff0c;会感到一种疲惫&#xff01;&#x…

详解Java中的堆内存

详解Java中的堆内存 堆是JVM运行数据区中的一块内存空间&#xff0c;它是线程共享的一块区域&#xff08;注意了&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;主要用来保存数组和对象实例等&#xff08;其实对象有时候是不在堆中进行分配的&#xff0c;想要了…

霓虹灯数字时钟(可复制源代码)

文章目录 一、效果演示二、CodeHTMLCSSJavaScript 三、实现思路拆分CSS 部分JavaScript 部分 四、源代码 一、效果演示 文末可一键复制完整代码 二、Code HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…

我对软件工程的理解

1 引言 从事软件行业这么年&#xff0c;写了10年代码&#xff0c;又从事了多年的项目产品方面的工作&#xff0c;一些每天用到的软件工程的方法&#xff0c;虽然天天都在用但一些概念总感觉似是而非&#xff0c;正好借假期的时间&#xff0c;好好整理下&#xff0c;以供自己或…

AI配音(声音克隆)

Fish Audio: Free Generative AI Text To Speech & Voice Cloning 【【AI配音】终于找到免费 & 小白友好的声音克隆软件了&#xff01;真人相似度98%!】https://www.bilibili.com/video/BV1MwbFeCE2X?vd_source3cc3c07b09206097d0d8b0aefdf07958 我终于找到总这3款免…

Java中的封装、继承、多态

目录 封装 概念 包 继承 多态 向上转型 一、直接赋值 二、方法传参 三、返回值 向上转型注意事项 向下转型 格式 重写 重写和重载的区别 动态绑定 静态绑定和动态绑定 封装 概念 简单来说就是套壳屏蔽细节。 举例&#xff1a; 想要访问它们时需要一些“接口”…