简单学会MyBatis原生API注解

😀前言
本篇博文是关于MyBatis原生API&注解的使用,希望能够帮助到你😊

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • 原生的API&注解的方式
    • MyBatis-原生的API 调用
      • 应用实例
        • 需求
        • 代码实现
    • MyBatis-注解的方式操作
      • 需求
      • 代码实现
      • 注意事项和说明
    • 😄总结

原生的API&注解的方式

MyBatis-原生的API 调用

应用实例

需求

感兴趣的可以看一下博主前面的项目----自己实现MyBatis 底层机制–抽丝剥茧(上).
在前面项目的基础上,将增删改查,使用MyBatis 原生的API 完成,就是直接通过SqlSession 接口的方法来完成。

1.增加 2. 删除

3.修改 4. 查询

代码实现

  1. 创建src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成添加数据
public class MyBatisNativeTest {//这个是Sql 会话,通过它可以发出sql 语句private SqlSession sqlSession;private MonsterMapper monsterMapper;@Beforepublic void init() throws Exception {//通过SqlSessionFactory 对象获取一个SqlSession 会话sqlSession = MyBatisUtils.getSqlSession();//获取MonsterMapper 接口对象, 该对象实现了MonsterMappermonsterMapper = sqlSession.getMapper(MonsterMapper.class);System.out.println(monsterMapper.getClass());}//使用sqlSession 原生的API 调用我们编写的方法@Testpublic void myBatisNativeCrud() {//=============add start==================Monster monster = new Monster();monster.setAge(200);monster.setBirthday(new Date());monster.setEmail("nlc100@sohu.com");monster.setGender(2);monster.setName("白骨精");monster.setSalary(9234.89);sqlSession.insert("com.nlc.mapper.MonsterMapper.addMonster", monster);//=============add end===================if (sqlSession != null) {sqlSession.commit();sqlSession.close();}System.out.println("操作成功!");}
}
  1. 修改src\test\java\com\nlc\mapper\MyBatisNativeTest.java, 完成删除/修改/查询数据.
//使用sqlSession 原生的API 调用我们编写的方法
@Test
public void myBatisNativeCrud() {//===========删除start======================sqlSession.delete("com.nlc.mapper.MonsterMapper.delMonster", 3);//===========删除end======================//===========update start======================Monster monster = new Monster();monster.setAge(300);monster.setBirthday(new Date());monster.setEmail("tn100@sohu.com");monster.setGender(2);monster.setName("狮驼国妖精");monster.setSalary(9234.89);monster.setId(7);sqlSession.update("com.nlc.mapper.MonsterMapper.updateMonster",monster);//===========update end======================//=========select start=================List<Monster> monsterList =  sqlSession.selectList ("com.nlc.mapper.MonsterMapper.findAllMonster");for (Monster monster : monsterList) {System.out.println(monster);}//=========select end=================if (sqlSession != null) {sqlSession.commit();sqlSession.close();}System.out.println("操作成功!");
}
  1. 完成测试

MyBatis-注解的方式操作

需求

在前面项目的基础上,将增删改查,使用MyBatis 的注解的方式完成
1.增加 2.删除
3.修改 4.查询

代码实现

  1. 创建src\main\java\com\nlc\mapper\MonsterAnnotation.java
public interface MonsterAnnotation {//添加方法,将我们的sql 语句直接写在@Insert 注解即可@Insert("INSERT INTO monster (age,birthday,email,gender,name,salary) "+ "VALUES(#{age},#{birthday},#{email},#{gender},#{name},#{salary})")public void addMonster(Monster monster);//根据id 删除一个Monster@Delete("DELETE FROM monster "+ "WHERE id=#{id}")public void delMonster(Integer id);//修改Monster@Update("UPDATE monster SET age=#{age}, birthday=#{birthday}, "+ "email = #{email},gender= #{gender}, "+ "name=#{name}, salary=#{salary} "+ "WHERE id=#{id}")public void updateMonster(Monster monster);//查询-根据id@Select("SELECT * FROM monster WHERE "+ "id = #{id}")public Monster getMonsterById(Integer id);//查询所有的Monster@Select("SELECT * FROM monster ")public List<Monster> findAllMonster();
}
  1. 修改mybatis-config.xml , 对MonsterAnnotaion 进行注册
<!-- 这里会引入(注册)我们的Mapper.xml 文件-->
<mapper resource="com/nlc/mapper/MonsterMapper.xml"/>
<!--1. 如果是通过注解的方式,可不再使用MonsterMapper.xml2. 但是需要在mybatis-config.xml 注册含注解的类
-->
<mapper class="com.nlc.mapper.MonsterAnnotation"/>
  1. 创建com\nlc\mapper\MonsterAnnotationTest.java , 完成测试
public class MonsterAnnotationTest {//这个是Sql 会话,通过它可以发出sql 语句private SqlSession sqlSession;@Beforepublic void init() throws Exception {//通过SqlSessionFactory 对象获取一个SqlSession 会话sqlSession = MyBatisUtils.getSqlSession();}//测试通过注解的方式来完成接口中方法的实现//其它的删除,修改,查询是一样一样,自己测试即可@Testpublic void addMonster() {Monster monster = new Monster();monster.setAge(500);monster.setBirthday(new Date());monster.setEmail("nlc@sohu.com");monster.setGender(2);monster.setName("白虎精");monster.setSalary(9234.89);MonsterAnnotation monsterAnnotation =sqlSession.getMapper(MonsterAnnotation.class);monsterAnnotation.addMonster(monster);//增删改,需要提交事务if (sqlSession != null) {sqlSession.commit();sqlSession.close();}System.out.println("操作成功");}
}

注意事项和说明

  1. 如果是通过注解的方式, 就不再使用MonsterMapper.xml 文件, 但是需要在mybatis-config.xml 文件中注册含注解的类/接口。
  2. 使用注解方式,添加时, 如果要返回自增长id 值, 可以使用@Option 注解, 组合使用
@Insert(value = "INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`,`salary`) " +
"VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
public void addMonster(Monster monster);
  1. 在Junit 进行添加/查询测试即可。

😄总结

  1. 原生API的使用方法有很多,我们在使用时要弄清楚自己需要使用的是哪一个。
  2. 不清楚用哪一个的时候可以尝试去猜一下,猜它的参数、猜它的类型,看看哪个符合条件。
  3. 使用注解时需要在mybatis-config.xml 注册含注解的类,否则无法使用。
  4. SQL语句最好先在Navicat上测试一下,否则SQL语句不正确。

😁热门专栏推荐
手写底层机制篇–
自己实现MyBatis 底层机制–抽丝剥茧(上).
揭开神秘的面纱–自己实现MyBatis 底层机制[下]

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

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

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

相关文章

VUE使用docxtemplater导出word(带图片) 踩坑 表格循环空格 ,canvas.toDataURL图片失真模糊问题

参考&#xff1a;https://www.codetd.com/article/15219743 安装 // 安装 docxtemplater npm install docxtemplater pizzip --save // 安装 jszip-utils npm install jszip-utils --save // 安装 jszip npm install jszip --save // 安装 FileSaver npm install file-save…

【力扣每日一题】2023.7.29 环形链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表&#xff0c;让我们判断这个链表是否有环。我们可以直接遍历这个链表&#xff0c;最后能走到链表末尾也就是空指针那就…

VMware虚拟机无法上网的解决办法

&#xff08;1&#xff09;1、在虚拟机右下角的网络适配器上面观察该图标是否是有绿色的灯在闪烁&#xff0c;如果网络适配器是灰色的证明虚拟机的网络没有打开&#xff0c;而是被禁用了&#xff0c;在适配器上点击鼠标右键&#xff0c;打开【设置】&#xff0c;在【已连接】、…

数据结构—链表

链表 前言链表链表的概念及结构链表的分类 无头单向非循环链表的相关实现带头双向循环链表的相关实现顺序表和链表&#xff08;带头双向循环链表&#xff09;的区别 前言 顺序表是存在一些固有的缺陷的&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度为O(N)&#xf…

windows C++多线程同步<2>-事件

windows C多线程同步&#xff1c;2&#xff1e;-事件 事件对象和关键代码段不同&#xff0c;它是属于内核对象&#xff1b;又分为人工重置事件对象和自动重置事件对象&#xff1b; 同一个线程不允许在不释放事件的情况下多次获取事件&#xff1b; 相关API 白话来讲&#xff1…

认识 springboot 并了解它的创建过程 - 1

前言 本篇介绍什么是SpringBoot, SpringBoot项目如何创建&#xff0c;认识创建SpringBoot项目的目录&#xff0c;了解SpringBoo特点如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1.什么是springboot?2.为什么…

PKG内容查看工具:Suspicious Package for Mac安装教程

Suspicious Package Mac版是一款Mac平台上的查看 PKG 程序包内信息的应用&#xff0c;Suspicious Package Mac版支持查看全部包内全部文件&#xff0c;比如需要运行的脚本&#xff0c;开发者&#xff0c;来源等等。 suspicious package mac使用简单&#xff0c;只需在选择pkg安…

农业中的计算机视觉 2023

物体检测应用于检测田间收割机和果园苹果 一、说明 欢迎来到Voxel51的计算机视觉行业聚焦博客系列的第一期。每个月&#xff0c;我们都将重点介绍不同行业&#xff08;从建筑到气候技术&#xff0c;从零售到机器人等&#xff09;如何使用计算机视觉、机器学习和人工智能来推动…

网络安全-防御需知

目录 网络安全-防御 1.网络安全常识及术语 资产 漏洞 0day 1day 后门 exploit APT 2.什么会出现网络安全问题&#xff1f; 网络环境的开放性 协议栈自身的脆弱性 操作系统自身的漏洞 人为原因 客观原因 硬件原因 缓冲区溢出攻击 缓冲区溢出攻击原理 其他攻击…

网络安全行业相关证书

一&#xff1a;前言 对于考证这个话题&#xff0c;笔者的意见是&#xff1a;“有比没有好&#xff0c;有一定更好&#xff0c;但不一定必须&#xff1b;纸上证明终觉浅&#xff0c;安全还得实力行”。很多人对于各种机构的考证宣传搞得是云里雾里&#xff0c;不知道网络安全行业…

flex盒子 center排布,有滚动条时,拖动滚动条无法完整显示内容

文章目录 问题示例代码解决问题改进后的效果 问题 最近在开发项目的过程中&#xff0c;发现了一个有趣的事情&#xff0c;与flex盒子有关&#xff0c;不知道算不算是一个bug&#xff0c;不过对于开发者来说&#xff0c;确实有些不方便&#xff0c;感兴趣的同学不妨也去试试。 …

设计模式-建造者模式

在前面几篇文章中&#xff0c;已经讲解了单例模式、工厂方法模式、抽象工厂模式&#xff0c;创建型还剩下一个比较重要的模式-建造者模式。在理解该模式之前&#xff0c;我还是希望重申设计模式的初衷&#xff0c;即为解决一些问题而提供的优良方案。学习设计模式遗忘其初衷&am…

VLAN原理(Virtual LAN 虚拟局域网)

VLAN&#xff08;Virtual LAN 虚拟局域网&#xff09; 1、广播/广播域 2、广播的危害&#xff1a;增加网络/终端负担&#xff0c;传播病毒&#xff0c; 3、如何控制广播&#xff1f;&#xff1f; ​ 控制广播隔离广播域 ​ 路由器物理隔离广播 ​ 路由器隔离广播缺点&…

解决在云服务器开放端口号以后telnet还是无法连接的问题

这里用阿里云服务器举例&#xff0c;在安全组开放了对应的TCP端口以后。使用windows的cmd下的telnet命令&#xff0c;还是无法正常连接。 telnet IP地址 端口号解决方法1&#xff1a; 在轻量服务器控制台的防火墙规则中添加放行端口。 阿里云-管理防火墙 如图&#xff0c;开放…

右击不显示TortoiseGit图标处理方法

第一种 右键--》TortoiseGIt--》setting--》Icon Overlays--》Status cache&#xff0c;按照下图设置&#xff0c;然后重启电脑。 第二种 进入注册信息&#xff0c;按照步骤找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIden…

AI帮你制作海报

介绍 Microsoft Designer是由微软推出的图像处理软件&#xff0c;能够通过套用模板等方式快速完成设计加工&#xff0c;生成能够在社交媒体使用的图片。Designer的使用更为简单便捷&#xff0c;用户能够通过套用模板等方式快速完成设计加工&#xff0c;生成能够在社交媒体使用…

python离散仿真器

文章目录 类图示例 类图 示例

Stability AI推出Stable Diffusion XL 1.0,文本到图像模型

Stability AI宣布推出Stable Diffusion XL 1.0&#xff0c;这是一个文本到图像的模型&#xff0c;该公司将其描述为迄今为止“最先进的”版本。 Stability AI表示&#xff0c;SDXL 1.0能生成更加鲜明准确的色彩&#xff0c;在对比度、光线和阴影方面做了增强&#xff0c;可生成…

MySQL使用xtrabackup备份和恢复教程

1、xtrabackup说明 xtrabackup是percona开源的mysql物理备份工具。 xtrabackup 8.0支持mysql 8.0版本的备份和恢复。 xtrabackup 2.4支持mysql 5.7及以下版本的备份和恢复。 这里我以xtrabackup 8.0为例讲解备份和恢复的具体操作方法。 xtrabackup 2.4版本的使用上和8.0版本相…

【HDFS】Block、BlockInfo、BlockInfoContiguous、BlockInfoStriped的分析记录

本文主要介绍如下内容: 关于几个Block类之间的继承、实现关系;针对文章标题中的每个类,细化到每个成员去注释分析列出、并详细分析BlockInfo抽象类提供的抽象方法、非抽象方法的功能针对几个跟块组织结构的方法再进行分析。moveBlockToHead、listInsert、listRemove等。一、…