MyBatis的基础操作

news2024/11/15 13:32:53

目录

一.什么是MyBatis?

二.使用MyBatis的准备工作

1.引入依赖:

2.配置数据库连接字符串(建立MaBatis和MySQL的连接)

3.在model包中建立数据库对应的实体类UserInfo

三.通过@注解的方式实现MyBatis的开发

1.插入语句(Insert)

2.删除语句(Delete)

3.更新语句(Update)

4.查询语句(Select) 

1.起别名:

2.结果映射:

3.开启驼峰命名:

四.通过xml的方式实现MyBatis的开发

1.前提准备:

1)添加关于xml的配置(yml)

2)在resources文件夹中添加xml文件,在文件写入固定格式

3)接着就可以在里写数据库语句了

2.插入语句(Insert)

3.删除语句(Delete)

4.更新语句(Update)

5.查询语句(Select)


一.什么是MyBatis?

MyBatis是一个开源的持久层框架,它提供了一种优雅的方式来管理数据库访问代码。MyBatis通过将SQL语句映射到Java方法,使得在Java应用程序中执行数据库操作变得更加简单和直观。

MyBatis的核心思想是将SQL语句与Java方法和参数进行绑定,这样可以避免传统的JDBC编程中的大量样板代码。开发人员可以使用XML或注解来定义SQL映射,将SQL语句保存在外部文件中,并将其与Java接口或类进行绑定。


二.使用MyBatis的准备工作

1.引入依赖:

        <dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.3.1</version>
		</dependency>

		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>

2.配置数据库连接字符串(建立MaBatis和MySQL的连接)

spring:
 datasource:
   url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
   username: root
   password: root
   driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
 configuration: # 配置打印 MyBatis⽇志
   map-underscore-to-camel-case: true #配置驼峰⾃动转换
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.在model包中建立数据库对应的实体类UserInfo

public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

前提工作做完后,就可以实现数据库操作了


三.通过@注解的方式实现MyBatis的开发

1.插入语句(Insert)

使用@Insert("")注解,并在("")中实现插入语句

示例:

@Insert("insert into userinfo (username, password, age, gender, phone) " +
            "values (#{userInfo.username},#{userInfo.password},#{userInfo.age}," +
            "#{userInfo.gender},#{userInfo.phone})")
    Integer insertUserInfo(UserInfo userInfo);

//在上述代码中实现了插入一个userInfo对象的信息到数据库中userinfo的表中
//userInfo的属性不能直接写到sql语句中,而是通过#{userInfo.属性字段}来自动查找userInfo的属性并填入sql语句中

同时可以搭配@Param注解使用,为方法中的参数指定名称

@Insert("insert into userinfo (username, password, age, gender, phone) " +
            "values (#{user.username}, #{user.password}, #{user.age}," +
            "#{user.gender}, #{user.phone})")
    Integer insertUserInfo2(@Param("user") UserInfo userInfo);
    
    //将userInfo识别成user使用
    

当传入参数有多个时,会按顺序填入各属性,而使用@Param就可以更自由的使用参数,同时可以提高代码的清晰度和可读性

Insert 语句默认返回的是受影响的行数,如果想要拿到⾃增id, 需要在方法上添加⼀个@Options注解

    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into userinfo (username, password, age, gender, phone) " +
            "values (#{user.username}, #{user.password}, #{user.age}," +
            "#{user.gender}, #{user.phone})")
    Integer insertUserInfo2(@Param("user") UserInfo userInfo);
  • useGeneratedKeys = true表示告诉 MyBatis 在执行插入操作后要生成主键。当这个参数设置为 true 时,MyBatis 会通知数据库生成主键,并将生成的主键值返回给应用程序。

  • keyProperty = "id"表示指定将生成的主键值设置到对象的哪个属性上。在这里,keyProperty 指定了要将生成的主键值设置到对象的 id 属性上。

示例:

UserInfo newUser = new UserInfo();
newUser.setUsername("testUser");
newUser.setPassword("123456");
newUser.setAge(25);
newUser.setGender("male");
newUser.setPhone("123456789");

Integer result = insertUserInfo2(newUser);

System.out.println("插入成功,生成的主键值为:" + newUser.getId());

//返回的主键值自动设置到newUser的id属性上了
//⽅法返回值result依然是受影响的⾏数

2.删除语句(Delete)

使用@Delete("")注解,并在("")中实现删除语句

示例:

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

//通过id删除某个用户

 同样可以使用@Param注解 

3.更新语句(Update)

使用@Update("")注解,并在("")中实现更新语句

示例:

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

//通过id更新用户的姓名

4.查询语句(Select) 

使用@Select("")注解,并在("")中实现查询语句

示例:

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

MyBatis会自动将查询出的表的数据按照字段名依次放入List<UserInfo> 对象中

但是,如果表的字段名类的属性不一致时,就无法正常赋值了,例如表中的create_time字段类的createTime属性

解决办法:

1.起别名:
@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> queryAllUser2();


//查询语句中 as 加上想改成的名字
2.结果映射:
@Select("select id, username, `password`, age, gender, phone, delete_flag, 
create_time, update_time from userinfo")
@Results({
 @Result(column = "delete_flag",property = "deleteFlag"),
 @Result(column = "create_time",property = "createTime"),
 @Result(column = "update_time",property = "updateTime")
})
List<UserInfo> queryAllUser();
3.开启驼峰命名:

在yml配置中加上:

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

到此关于注解实现MyBatis的方式就结束了~


四.通过xml的方式实现MyBatis的开发

1.前提准备:

1)添加关于xml的配置(yml)
mybatis:
 mapper-locations: classpath:mapper/**Mapper.xml
2)在resources文件夹中添加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.UserInfoMapper">
   //写MySQL语句
</mapper>
3)接着就可以在<mapper></mapper>里写数据库语句了

2.插入语句(Insert)

使用<insert>标签实现插入语句

<mapper namespace="com.example.demo.mapper.UserInfoMapper">
    <insert id="insertUser">
        insert into userinfo (username, password, age, gender, phone) values (#
        {username}, #{password}, #{age},#{gender},#{phone})
    </insert>

</mapper>

sql语句基本没有变化,只是放入了<insert>标签以及用id指定了mapper中要实现的接口的方法名

如果要返回自增 id,则需要设置useGeneratedKeys 和keyProperty属性

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
 insert into userinfo (username, `password`, age, gender, phone) values
 (#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>

3.删除语句(Delete)

使用<delete>标签实现删除语句

<delete id="deleteUser">
    delete from userinfo where id = #{id}
</delete>

4.更新语句(Update)

使用<update>标签实现更新语句

<update id="updateUser">
    update userinfo set username=#{username} where id=#{id}
</update>

5.查询语句(Select)

使用<select>标签实现查询语句

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

同理,如果表的字段名类的属性不一致时,就无法正常赋值了,解决方法和用注解的方式类似


到这里,有关MyBatis的基础操作的介绍就全部讲完了

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

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

相关文章

好用的便签如何独立和组合便签窗口

便签&#xff0c;那些小小的纸片&#xff0c;曾经是我生活中的忠实记录者。每当灵感闪现&#xff0c;或是有什么待办事项&#xff0c;我都会随手写在便签上&#xff0c;然后贴在我目所能及的地方&#xff0c;以便随时提醒我。然而&#xff0c;纸质便签总有其局限性&#xff0c;…

springboot个人旅游管理系统设计与实现-计算机毕业设计源码75806

摘要 在社会快速发展和人们生活水平提高的影响下&#xff0c;旅游产业蓬勃发展&#xff0c;旅游形式也变得多样化&#xff0c;使个人旅游的管理变得比过去更加困难。依照这一现实为基础&#xff0c;设计一个快捷而又方便的基于小程序的个人旅游管理系统是一项十分重要并且有价值…

4个月赚20万!一张图赚7500!多种变现方式,一个被忽视的暴力项目

大家好&#xff0c;今天给大家带来一个被很多人忽视&#xff0c;不起眼确很暴力的项目。 大胆放心干 课程获取&#xff1a; https://hsgww.com/https://hsgww.com/

(二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2

层序遍历 10 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 综合代码&#xff1a; class Solution{public List<List<Integer>> resList new ArrayList<List<Integer>>();public List<List<…

ComfyUI 简化工作流神器

安装也很简单&#xff0c;只需要在 ComfyUI 管理器中搜索「efficiency-nodes-comfyui」&#xff0c;点击安装就可以了。 插件也会放到文末的网盘中&#xff0c;有需要的小伙伴自取&#xff0c;复制到插件目录「\ComfyUI\custom_nodes」下就可以了。安装好了&#xff0c;记得重…

立创·天空星开发板-GD32F407VE-环境搭建

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VET6-环境搭建 单片机ARMARM内核系列Cortex-M系列常用ARM芯片厂商 GD32GD32的产品系列开发板开发板资源、尺寸标注图设计图纸 GD32F407 Keil ARM 安装下载地址…

视频营销的智能剪辑:Kompas.ai如何塑造影响力视频内容

引言&#xff1a; 在当今数字化的营销领域&#xff0c;视频内容已经成为品牌吸引用户注意力、建立品牌形象和提升用户参与度的重要方式。然而&#xff0c;要想制作出具有影响力的视频内容&#xff0c;并不是一件容易的事情。这就需要借助先进的技术和工具&#xff0c;如人工智能…

【Java面试】四、MySQL篇(上)

文章目录 1、定位慢查询2、慢查询的原因分析3、索引3.1 数据结构选用&#xff1a;二叉树 & 红黑树3.2 数据结构选用&#xff1a;B树 4、聚簇索引、非聚簇索引、回表查询4.1 聚簇索引、非聚簇索引4.2 回表查询 5、覆盖索引、超大分页优化5.1 覆盖索引5.2 超大分页处理 6、索…

前端JS必用工具【js-tool-big-box】学习,获取数据的详细类型

之前我们习惯性的用typeof方法去判断数据类型&#xff0c;但慢慢的发现&#xff0c;typeof这个方法能力有限&#xff0c;基础的数据类型倒是还能判断&#xff0c;但是复杂一点&#xff0c;或者是null之类的假类型&#xff0c;就判断不出来了。 比如以下这些判断&#xff1a; …

【软件设计师】——5.数据库系统

目录 5.1 基本概念 5.2 三级模式两级映射 5.3 设计过程和数据模型 5.4 关系代数 5.5 完整性约束 5.6 规范化和反规范化 5.7 控制功能 5.8 SQL语言 5.9 数据库安全 5.10 数据备份 5.11 数据库故障与恢复 5.12 数据仓库、数据挖掘和大数据 5.1 基本概念 相关术语 候选…

hypack如何采集多波束数据?(下)

多波束测量模块 1&#xff09;记录多波束和辅助传感器的数据&#xff1b; 2&#xff09;显示实时改正后的数据和数据质量信息。 ​编辑​ 测量准备 1&#xff09;设置大地测量参数和硬件设置&#xff1b; 2&#xff09;计划测线 计划测线是一定间距的平行线&#xff0c;…

XPosed项目的接入、模版制作、改名全过程

XPosed项目的接入、模版制作、改名全过程 写在前面 之前写过这篇Xposed Hook 过登录密码验证配置开发Xposed项目的文章&#xff0c;这次的接入使用的是当前最新版Android Studio&#xff0c;接入稍微有些差别&#xff0c;也记录下。 本篇文章主要是写关于XP项目接入、制作XP模…

Oracle中rman的增量备份使用分享

继上次使用RMAN的全量备份和异机还原以后&#xff0c;开始研究一下增量备份和还原的方法。相比于全量RMAN的备份还原&#xff0c;增量的备份还原就相对简单。本实践教程直接上操作&#xff0c;还是回归到一个问题&#xff0c;就是关于两个数据库创建时候&#xff0c;必须保持or…

如何应对触摸一体机触摸屏失灵问题?怎么校准?

触摸一体机是一种功能强大的设备&#xff0c;集成了电脑、电视和触摸屏等多种功能。其中&#xff0c;触摸屏是其重要组成部分之一。然而&#xff0c;当触摸屏突然失灵时&#xff0c;我们该如何应对呢&#xff1f;以下是一些建议&#xff0c;以帮助您排除问题并重新获得正常触摸…

汇凯金业:如何识别黄金价格图表中的关键支撑和阻力位

识别黄金价格图表中的关键支撑和阻力位是黄金交易的一个基本而关键的技能。以下是一些方法来帮助投资者发现这些重要的价格水平&#xff1a; 1. 历史价格水平 观察图表&#xff0c;找出黄金价格在过去曾多次反弹或回落的价格点。这些水平在未来的交易中可能再次成为关键的支撑…

记一次 .NET某工控WPF程序被人恶搞的 卡死分析

一&#xff1a;背景 1. 讲故事 这一期程序故障除了做原理分析&#xff0c;还顺带吐槽一下&#xff0c;熟悉我的朋友都知道我分析dump是免费的&#xff0c;但免费不代表可以滥用我的宝贵时间&#xff0c;我不知道有些人故意恶搞卡死是想干嘛&#xff0c;不得而知&#xff0c;希…

【链表】Leetcode 61. 旋转链表【中等】

旋转链表 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 解题思路 要将链表每个节点向右移动 k 个位置&#xff1a; 计算链表…

抖店类目错放怎么办?怎么改类目?快速解决抖店类目错放问题

大家好&#xff0c;我是电商花花。 我们运营抖音小店的时候&#xff0c;都知道不要放错类目&#xff0c;也知道放错类目的后果&#xff0c;类目错放可能导致商品无法在正确的类目中展示&#xff0c;从而影响到商品的一个曝光率。 严重的话还被平台扣分&#xff0c;扣保证金&a…

【大学物理】期末复习笔记总结

1-6章&#xff08;第2版&#xff09;以下是鄙人期末复习时总结的笔记&#xff0c;希望可以帮到大家 第一章&#xff1a; 第二章&#xff1a; 第三章&#xff1a; 第四章&#xff1a; 第五章&#xff1a; 第六章&#xff1a;

安泰电子:高压功率放大器应用场合介绍

高压功率放大器是一种电子设备&#xff0c;用于将低电压信号放大到较高电压水平&#xff0c;以满足各种应用需求。它在多个领域中具有广泛的应用&#xff0c;包括科学研究、工业生产、通信技术以及医疗设备。下面安泰电子将介绍高压功率放大器的应用场合。 科学研究 高压功率放…