Mybatis——增删改查

目录

一、准备工作

二、mybatis——新增

三、mybatis——删除

四、mybatis——更新

五、mybatis——查询

六、XML映射文件


 

 

一、准备工作

1.准备一个数据库表

69bd7434996d4ba68d1d3468f9693c23.png

2.创建一个新的springboot工程,选择引入对应的起步依赖(Mybatis、mybatis等)

3.application.properties中引入数据库连接信息

4.创建对应的实体类Emp(实体类属性采用驼峰命名)

5.准备Mapper接口EmMapper

866d104c4033444c98bfbb63d5aefc66.png

在这里我就不过多的描述,在我的上一篇博客我已经详细介绍了。

        配置mybatis日志:

#配置mybatis的日志,指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

二、mybatis——新增

    1.基于注解方式

37d97dfd2ece4c5ab675cba19de2ca3f.png0b6b60feca86411199adad66a2deff26.png

刷新表,数据插入成功。554e7a8dab3d4f0cad673749063a5050.png

        在某些特定的条件下,在数据添加成功后,我们是需要的获取数据库的主键。(主键返回)

//    自动将生成的主键值,赋值给emp对象id属性
    @Options(keyProperty="id",useGeneratedKeys = true)

        获取主键的值:

 System.out.println(emp.getId());

三、mybatis——删除

        根据记录的唯一标识(主键)进行删除。

        1.基于注解方式

739b7d5f31784f5196944124e9126269.png

bc62be07dc744129b35b2ba2358718c2.png

注意事项:

        如果mapper接口方法的形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如#{id},#{value}。建议两者保持一致增强可读性。

f812e450265540ff9a8b003dfe054580.png

        update后面的数字表示受影响的记录行数,如果你的后面是的1,则代表删除成功,我的是0是因为在此之前我已经把Id为17的记录给删除了。 “Id=?”:?是一个参数占位符,它最终会用Parameters来替代。被我框出来的SQL语句有一个专业的名字叫预编译SQL,在这里我们为什么要用预编译SQL而不是直接进行拼接呢?

        预编译SQL有两大优势:

        1.性能更高。

        执行SQL语句要经历以下流程:

e2871a7a1b4d40fd9cbbd62ecb7010c5.png

        如果进行拼接,不同Id 表示不同的SQL语句,需要执行多次。而预编译采用?进行占位,然后用参数去替代,在数据库中是同一条SQL语句,不用再去重新缓存(缓存中已存在),速度更快性能更优。

        2.更安全(防止SQL注入)。

        SQL注入是指通过操作输入数据来修改实现定义好的SQL语句,已达到执行代码对服务器进行攻击的方法。('or'1'='1')

        参数占位符:#{}(生成预编译SQL,会自动设置参数值),${}(直接进行拼接,存在SQL注入问题)。

四、mybatis——更新

        1.基于注解方式

2c1ccd4dcf014daf9f802c1fe1e43594.png30585f69fa3a40ef83e0eb901a569134.png7858d2294bed4f5fb1fc64ee50fd28b0.png

更新成功。5a70a6f81ca84e058a0994220ac5760a.png

五、mybatis——查询

        1.基于注解方式

        根据id进行查询

54660fc97d2e4b89acd89acde85dc4d8.png

680ccb6c00f74893bf649d04e7118cae.png7d25d4bc25024d4bb8bb32b05dcfdb2c.png

        虽然idea没有报错,但是我们仔细看一下控制台的输出会发现,后面三个变量值为null,为什么会出现这样的结果呢?之前有提到过,实体类属性名和数据库表查询返回的字段名一致,myBatis会自动进行封装。但是如果不一致就不能就行自动封装。有一下几种方案可以解决上述问题:

        方案一:给字段起别名,让别名和实体类属性保持一致

1a0e76af67994a718a57f2024d778da8.png

        方案二:通过@results,@result注解手动进行映射

ff271b07c0634ec5bc8a054b475ee268.png

        方案三:开启mybatis的驼峰命名的自动映射的开关(前提:字段名和属性名符合驼峰命名的规则,才能自动映射)

bf4fe8cee58b4ab2b3001ed2dbcee261.png

        经过上述任意操作,我们可以后面三个的属性值已经不再为空,已经成功封装。

28fa728dbb38459aa8cbc35fb01f4b51.png

       根据条件查询(员工姓名支持模糊匹配,性别进行精准查询,入职时间进行范围查询,进行排序)9c8b096d98754242bd1eac294d5978c8.png9a2e10648fea412681efdc8044af00cb.png

        #{}不能出现在单引号内,再进行预编译的时候?在单引号内,会变成一个普通的?,起不到预编译的作用,在这里我们可以使用${}。虽然可以达到想要的结果,但是${}性能低,会存在SQL注入问题,我们可以使用concat函数(推荐使用)。(and前后有空格不要忘记)

5230920444af48f188e7539352429909.pngacca9c9678e44ce7a44d7255bf4db215.png        测试代码

6a10dee95fe840ea8863bffc2891fa24.png        参数名的说明:在早期springboot中,多个参数与参数值不能进行对应,需要通过一个@Param注解 

80b37253b0224d00b4409acfc903e456.png

        恭喜你,你已经成功学习mybatis的基本操作增删改查 (基于注解方式的)。

六、XML映射文件

        我们除了可以通过注解配置SQL语句,还可以通过xml进行配置。下面介绍一下xml映射文件:

  • xml映射文件的名称与Mapper接口名称一致,并且xml映射文件和Mapper接口要在相同的包下(目录使用/分隔)
  • xml映射文件的namespace属性为Mapper接口全限定名一致
  • xml映射文件中SQL语句的id与Mapper接口中的方法名保持一致,并保持返回类型一致(resultType 单条记录封装的类型一致)

xml映射文件的约束

<?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">

         使用注解配置简单的SQL语句会使代码更加的简洁,但是对于稍微复杂一点的语句,java注解会使本就复杂的SQL语句更加的混乱不堪,因此做一些复杂的操作最好用xml语句。没有统一的标准,永远不要拘泥一种方式,你可以在基于注解和xml语句映射方式自由的进行切换。

 

 

 

 

 

 

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]: SpringCloud整合Mybatis增删改查。引用\[2\]: 我相比之前写的结合springcloud结合mybati实现增删改查。这一次写了一个纯注解方式来实现简单的增删改查。引用\[3\]: springCloud常用的六大组件 服务发现 —— Eureka 服务调用 —— Feign 服务熔断 —— Hystrix 负载均衡 —— Ribbon 服务网关 —— Zuul 分布式配置— Config。 回答: 在SpringCloud中,可以使用Mybatis来实现增删改查操作。通过整合SpringCloud和Mybatis,我们可以使用纯注解方式来实现简单的增删改查。同时,SpringCloud还提供了一些常用的组件,如服务发现(Eureka)、服务调用(Feign)、服务熔断(Hystrix)、负载均衡(Ribbon)、服务网关(Zuul)和分布式配置(Config)等。这些组件可以帮助我们更方便地开发和管理微服务架构。 #### 引用[.reference_title] - *1* *3* [SpringCloud整合Mybatis增删改查](https://blog.csdn.net/Gfz80k/article/details/103509825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [springcloud微服务实现增删改查](https://blog.csdn.net/FindHuni/article/details/85049506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值