【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

2024-05-01 12:44

本文主要是介绍【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
💓 博客主页:从零开始的-CodeNinja之路

⏩ 收录文章:【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

🎉欢迎大家点赞👍评论📝收藏⭐文章
在这里插入图片描述
在这里插入图片描述

目录

  • My Batis
    • 前言(配置环境)
        • 开启驼峰命名(推荐)
        • 打印日志
    • 一. 使用注解方式
        • 1.1 增(Insert)
        • 1.2 删(Delete)
        • 1.3 改(Update)
        • 1.4 查(Select)
    • 二.使用 XML 方式
      • 配置连接字符串和MyBatis
      • 写持久层代码
        • 2.1 增(Insert)
        • 2.2 删(Delete)
        • 2.3 改(Update)
        • 2.4 查(Select)
  • 总结

My Batis

Mybatis的开发有两种方式:

  1. 注解
  2. XML

下⾯将学习注解和XML的方式

,使用Mybatis的注解方式,主要是来完成⼀些简单的增删改查功能.如果需要实现复杂的SQL功能,建
议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.

前言(配置环境)

开启驼峰命名(推荐)

通常数据库列使用蛇形命名法进行命名(下划线分割各个单词),而Java属性⼀般遵循驼峰命名法约定.
为了在这两种命名方式之间启用自动映射,需要将 mapUnderscoreToCamelCase 设置为true。

mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换

驼峰命名规则:abc_xyz=>abcXyz

• 表中字段名:abc_xyz

• 类中属性名:abcXyz

Java代码不做任何处理:

@Select("select id, username, `password`, age, gender, phone, delete_flag as
deleteFlag, " +
"create_time as createTime, update_time as updateTime from userinfo")public List<UserInfo> queryAllUser();

添加上述配置,运行代码,字段全部进行正确赋值.

打印日志

在Mybatis当中我们可以借助日志,查看到sql语句的执行、执行传递的参数以及执行结果在配置文件中进行配置即可

mybatis:configuration: # 配置打印 MyBatis日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

如果是application.properties,配置内容如下:

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

重新运行程序,可以看到SQL执行内容,以及传递参数和执行结果

一. 使用注解方式

我们学习了Mybatis的查询操作,接下来我们学习MyBatis的增,删,改操作

1.1 增(Insert)

SQL语句:

insert into userinfo (username, `password`, age, gender, phone) values
("zhaoliu","zhaoliu",19,1,"18700001234")

把SQL中的常量替换为动态的参数

Mapper接口

@Insert("insert into userinfo (username, `password`, age, gender, phone)
values (#{username},#{password},#{age},#{gender},#{phone})")
Integer insert(UserInfo userInfo);
1.2 删(Delete)

SQL语句:

delete from userinfo where id=6

把SQL中的常量替换为动态的参数

Mapper接口

@Delete("delete from userinfo where id = #{id}")
void delete(Integer id);
1.3 改(Update)

SQL语句:

update userinfo set username="zhaoliu" where id=5

把SQL中的常量替换为动态的参数
Mapper接口

@Update("update userinfo set username=#{username} where id=#{id}")
void update(UserInfo userInfo);
1.4 查(Select)

我们在上⾯查询时发现,有⼏个字段是没有赋值的,只有Java对象属性和数据库字段⼀模⼀样时,才会进行赋值
接下来我们多查询⼀些数据

@Select("select id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo")
List<UserInfo> queryAllUser();

二.使用 XML 方式

如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.

MyBatisXML的方式需要以下两步:

  1. 配置数据库连接字符串和MyBatis
  2. 写持久层代码

配置连接字符串和MyBatis

此步骤需要进行两项设置,数据库连接字符串设置和MyBatis的XML文件配置。

如果是application.yml文件,配置内容如下:

# 数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis:mapper-locations: classpath:mapper/**Mapper.xml

如果是application.properties文件,配置内容如下:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false#连接数据库的用⼾名
spring.datasource.username=root#连接数据库的密码
spring.datasource.password=root# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

写持久层代码

持久层代码分两部分

  1. 方法定义Interface
  2. 方法实现:XXX.xml

在这里插入图片描述

2.1 增(Insert)

UserInfoMapper接口:

Integer insertUser(UserInfo userInfo); 

UserInfoMapper.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"><mapper namespace="com.example.demo.mapper.UserInfoXMlMapper"><insert id="insertUser">insert into userinfo (username, `password`, age, gender, phone) values (#{username}, #{password}, #{age},#{gender},#{phone})</insert>
</mapper>

以下是对以上标签的说明:

  • 标签:需要指定 namespace 属性,表示命名空间,值为mapper接口的全限定 名,包括全包名.类名。
  • 查询标签:是用来执行数据库的查询操作的:
  • id :是和 Interface (接口)中定义的方法名称⼀样的,表示对接口的具体实现方法。
  • resultType :是返回的数据类型,也就是开头我们定义的实体类.

在这里插入图片描述

2.2 删(Delete)

UserInfoMapper接口:

Integer deleteUser(Integer id);

UserInfoMapper.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"><mapper namespace="com.example.demo.mapper.UserInfoXMlMapper"><delete id="deleteUser">delete from userinfo where id = #{id}</delete></mapper>
2.3 改(Update)

UserInfoMapper接口:

Integer updateUser(UserInfo userInfo);

UserInfoMapper.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"><mapper namespace="com.example.demo.mapper.UserInfoXMlMapper"><update id="updateUser">update userinfo set username=#{username} where id=#{id}</update></mapper>
2.4 查(Select)

同样的,使用XML的方式进行查询,也存在数据封装的问题我们把SQL语句进行简单修改,查询更多的字段内容

<?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.example.demo.mapper.UserInfoXMlMapper"><select id="queryAllUser" resultType="com.example.demo.model.UserInfo">select id, username,`password`, age, gender, phone, delete_flag,create_time, update_time from 		userinfo</select></mapper>

运行结果:在这里插入图片描述

总结

MySQL开发企业规范

  1. 表名,字段名使用小写字母或数字,单词之间以下划线分割.尽量避免出现数字开头或者两个下划线
    中间只出现数字.数据库字段名的修改代价很⼤,所以字段名称需要慎重考虑。

MySQL在Windows下不区分⼤小写,但在Linux下默认是区分⼤小写.因此,数据库名,表名,字

段名都不允许出现任何⼤写字母,避免节外⽣枝 正例:aliyun_admin,rdc_config,level3_name

反例:AliyunAdmin,rdcConfig,level_3_name

  1. 表必备三字段:id,create_time,update_time

id必为主键,类型为bigintunsigned,单表时自增,步⻓为1
create_time,update_time的类型均为datetime类型,create_time表示创建时间,
update_time表示更新时间 有同等含义的字段即可,字段名不做强制要求

  1. 在表查询中,避免使用*作为查询的字段列表,标明需要哪些字段(课堂上给⼤家演示除外).

    1. 增加查询分析器解析成本
    2. 增减字段容易与resultMap配置不⼀致
    3. 无用字段增加网络消耗,尤其是text类型的字段

这篇关于【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951726

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum