教你手把手使用 MyBatis 框架

news2024/10/7 12:21:58

目录

MyBatis 是什么?

配置 MyBatis 开发环境

方法一:创建项目时添加依赖

方法二:创建项目后添加依赖

配置连接字符串

配置 MyBatis 中的 XML 路径

业务代码

添加实体类

添加 Service

添加 Controller

增加,删除和修改操作

增加用户操作

修改用户操作

删除用户操作

参数占位符 #{} 和 ${}

like 查询(模糊匹配)

多表查询

下期我们继续了解更多关于mybatis框架的知识,喜欢就关注我吧~


MyBatis 是什么?

MyBatis 是一款款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 

一句话概括就是 MyBatis 是更简单完成程序和数据库交互的工具

配置 MyBatis 开发环境

方法一:创建项目时添加依赖

首先我们创建一个新项目,如下图所示:

 然后点击next

最后我们就创建好了一个项目

如果创建好了一个项目想添加mybatis依赖怎么办?

别急,我们还有planB

方法二:创建项目后添加依赖

 我们先在插件(settings)里面下载 EditStarters,如下图所示:

EditStarters 插件的使法: 

点击蓝色框框: 

 搜索“MyBatis”添加即可:

配置连接字符串

在 application.yml 添加如下内容:

# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

配置 MyBatis 中的 XML 路径

MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置如下:

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

把这段代码放在配置连接字符串的下面

业务代码

添加实体类

先添加用户的实体类:

import lombok.Data;
import java.util.Date;
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private Date createTime;
    private Date updateTime;
}

添加 mapper 接口:

import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
    public List<User> getAll();
}

添加 UserMapper.xml:

在这里建一个包,再创建一个xml文件:

数据持久成的实现,mybatis 的固定 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.mybatisdemo1.mapper.UserMapper">
    
</mapper>

在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.mybatisdemo1.mapper.UserMapper">
    <select id="getAll" resultType="com.example.mybatisdemo1.entity.User">
        select * from userinfo
    </select>
</mapper>

mapper 标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接口的全限定名,包括全包名.类名。

查询标签:是用来执行数据库的查询操作的

id:是和 Interface(接口)中定义的方法名称⼀样的,表示对接口的具体实现方法。

resultType:是返回的数据类型,也就是开头我们定义的实体类。

添加 Service

服务层实现代码如下:

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
       @Resource
       private UserMapper userMapper;
       public List<User> getAll() {
              return userMapper.getAll();
       }
}

添加 Controller

控制器层的实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/u")
public class UserController {
    @Resource
    private UserService userService;
    @RequestMapping("/getall")
    public List<User> getAll(){
        return userService.getAll();
    }
}

以上代码写完,整个 MyBatis 的查询功能就实现完了,接下来使用 postman 来测试⼀下

增加,删除和修改操作

下面我们来实现⼀下用户的增加、删除和修改的操作,对应使用 MyBatis 的标签如下:

<insert>标签:插入语句

<update>标签:修改语句

<delete>标签:删除语句

增加用户操作

controller 实现代码:

@RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
        return userService.getAdd(user);
    }

在mapper接口里面增加一个抽象方法:

Integer add(User user);

在mapper.xml里面增加增加sql语句

<insert id="add">
 insert into userinfo(username,password,photo,state)
 values(#{username},#{password},#{photo},1)
</insert>

在postman中添加一个json格式的数据:

默认情况下返回的是受影响的行数 

特殊的添加:返回自增 id

controller 实现代码:

@RequestMapping(value = "/add2", method = RequestMethod.POST)
    public Integer add2(@RequestBody User user) {
        userService.getAdd2(user);
        return user.getId();
    }

在usermapper里面增加add2()方法:

Integer add2(User user);

mapper.xml 实现如下sql语句:

<!-- 返回⾃增id -->
    <insert id="add2" useGeneratedKeys="true" keyProperty="id">
        insert into userinfo(username,password,photo,state)
        values(#{username},#{password},#{photo},1)
    </insert>

useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,默认值为false

keyColumn:设置生成键值在表中的列名

keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止⼀个,可以用逗号分隔多个属性名称

使用 postman 返回结果:

修改用户操作

controller添加修改密码方法: 

@RequestMapping("/updatePassword")
    public int update(Integer id, String password, String newPassword) {
        return userService.updatePassword(id,password,newPassword);
    }

在usermapper接口里面定义一个update方法:

Integer updatePassword(Integer id, String password,String newPassword);

服务端service代码:

public Integer updatePassword(Integer id, String password, String newPassword){
              return userMapper.updatePassword(id,password,newPassword);
       }

mapper.xml 实现代码(只有原来密码正确和id正确才能修改密码):

<update id="updatePassword" >
        update userinfo set password=#{newPassword} where id=#{id} and password=#{password}
    </update>

用postman进行测试:

 

 注意:返回1代表受影响的行数为1

删除用户操作

controller添加删除方法:

@RequestMapping("/delete")
    public Integer delById(Integer id){
        return userService.delById(id);
    }

 在usermapper接口里面定义一个update方法:

Integer delById(Integer id);

服务端service代码:

public Integer delById(Integer id){
              return userMapper.delById(id);
       }

 mapper.xml 实现代码:

<delete id="delById" parameterType="java.lang.Integer">
        delete from userinfo where id=#{id}
    </delete>

用postman进行测试:

 

参数占位符 #{} 和 ${}

#{}:预编译处理。

${}:字符直接替换。

预编译处理是指:MyBatis 在处理#{}时,会将 SQL 中的 #{} 替换为?号,使用 PreparedStatement 的 set 方法来赋值。直接替换:是MyBatis 在处理 ${} 时,就是把 ${} 替换成变量的值。

like 查询(模糊匹配)

不能直接使用 ${},可以使用 mysql 的内置函数 concat() 来处理,实现代码如下:

<select id="findUserByName3" resultType="com.example.demo.model.User">
     select * from userinfo where username like concat('%',#{username},'%');
</select>

多表查询

如果是增、删、改返回搜影响的行数,那么在 mapper.xml 中是可以不设置返回的类型的

然而即使是最简单查询用户的名称也要设置返回的类型,否则会报错

对于查询标签来说至少需要两个属性:

id 属性:用于标识实现接口中的那个方法;

结果映射属性:结果映射有两种实现标签: <resultMap> 和 <resultType> 。

如下图所示:

下期我们继续了解更多关于mybatis框架的知识,喜欢就关注我吧~

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

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

相关文章

Spring Boot 中的 @Configuration 注解

Spring Boot 中的 Configuration 注解 在 Spring Boot 中&#xff0c;我们经常使用注解来简化代码&#xff0c;提高效率。其中&#xff0c;Configuration 注解是一个非常重要的注解&#xff0c;它用于声明一个类作为 Spring 应用程序上下文的配置类。 在本文中&#xff0c;我…

CentOS-8 - AppStream 错误:为 repo ‘AppStream‘ 下载元数据失败

刚安装的 CentOS8 系统执行yum命令报错 CentOS-8 - AppStream 为 repo AppStream 下载元数据失败 错误&#xff1a;为 repo AppStream 下载元数据失败 原因&#xff1a;系统默认的yum源的问题…

MySQL MHA 单主架构 主从切换 高可用

MHA (Master High AvailabilityManager and tools for MySQL) 目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它是由日本人youshimaton采用Perl语言编写的一个脚本管理工具。目前MHA主要支持一主多从的架构&#xff0c;要搭建MHA,要求一个复制集群必须最少有3台数…

基于java+swing+mysql选课管理系统V2.0

基于javaswingmysql选课管理系统V2.0 一、系统介绍二、功能展示1.项目骨架2.项目内容3.登陆4.注册界面5、主界面6、添加选课8、修改选课 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java SE项目&#xff08;GUI图形界面&#xff09; 项目名称&…

深入浅出设计模式 - 桥接模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

68、基于51单片机语音识别控制小车行走系统设计(程序+原理图+PCB源文件+参考论文+开题报告+任务书+元器件清单等)

摘 要 随着电子工业的发展&#xff0c;具有语音控制功能的小车越来越受到人们的青睐&#xff0c;在人们的日常消费生活中起着不可忽视的作用。目前&#xff0c;声控技术已在很多领域得到使用。 本文对语音控制功能的小车概况做了阐述。在硬件设计方面&#xff0c;本论文以凌阳…

【Java高级语法】(二十)数学运算类:全面讲解Java数学计算的高级类库,BigDecimal、Math、Random、DecimalFormat...~

Java高级语法详解之数学运算类 1️⃣ 概念&#x1f50d; 数学运算类汇总 2️⃣ 优势和缺点3️⃣ 使用3.1 各数学计算支持类使用案例3.2 Math类解析3.3 BigDecimal类解析3.4 Random类解析3.5 DecimalFormat类解析 4️⃣ 应用场景5️⃣ 使用技巧&#x1f33e; 总结&#x1f4d1; …

ssm校园防疫管理系统-计算机毕设 附源码80315

ssm校园防疫管理系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来&#xff0c;大家都在听从政府的号召在居家隔离&#xff0c;不管是在城市还是在乡镇、农村&#xff0c;这引起我的注目&#xff0c;设计一套大学ssm校园防疫管理系统&#xff0c;疫情防疫需要大家共同…

配置了git config --global credential.helper store后,还是弹出输入密码框

使用http协议拉取代码时,每次pull/push都会弹出账号密码框,可以使用git的配置credential.helper来保存每次输入的账号密码到硬盘上,命令git config --global credential.helper store,store表示存到硬盘中,但是按照这样操作后git pull还是弹出密码框,通过git config --list发现…

ESP32(MicroPython) WS2812 RGB流水灯 新版

ESP32&#xff08;MicroPython&#xff09; RGB流水灯 新版 本程序相比上一个程序&#xff0c;改用了24灯的环形WS2812模块&#xff0c;数据引脚改用13脚。增加了把相应颜色重复2次&#xff08;即前半部分和后半部分的灯颜色排列相同&#xff09;和4次的模式&#xff0c;模式增…

关于element-ui form表单必填项已经选入值并回填了,但是还会报错必填提示

哈喽 大家好啊 今天用el-form表单的时候 发现明明已经选入值并回填了 发现还是会触发必填报错 如图所示&#xff1a; 因为我这里是点击后右边是一个select选项帮助 然后点击确认后回填 经过发现&#xff0c;是因为rule表单触发校验规则 receiverName: [{ required: true, t…

HiveSQL之datediff、date_add、date_sub详解及注意坑点

文章目录 datediff介绍&#xff1a;示例1&#xff1a;正常情况示例2&#xff1a;负值情况注意&#xff1a;使用场景示例总结 date_add介绍&#xff1a; date_sub介绍&#xff1a; 注意&#xff1a; datediff 介绍&#xff1a; datediff语法: datediff(string enddate,string …

2023上半年Java高频面试题库总结(600+java面试真题含答案解析)

不知什么时候起&#xff0c;互联网行业掀起一股寒冬之风&#xff0c;到处都给人一种岌岌可危的寒颤之感&#xff0c;总觉得是要见不到明日的太阳一般&#xff0c;细细想来&#xff0c;最近的行业内的各种状况确实让不少人有此担忧。 从我认识的好几个程序员口中了解到&#xff…

8.0、Java_IO流 - 如何利用缓冲区提高读写效率 ?

8.0、Java_IO流 - 如何利用缓冲区提高读写效率 &#xff1f; 简单介绍&#xff1a; FileInputStream 通过字节的方式读取文件&#xff0c;适合读取所有类型的文件&#xff08;图像、视频、文本文件等&#xff09;&#xff1b;Java 也提供了 FileReader 字符流 专门读取文本文件…

linux系统之lvm方式挂载磁盘

目录 一、简介二、创建LVM三、删除 一、简介 LVM&#xff1a;逻辑卷管理(Logical Volume Manager) 它是Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层&#xff0c;来提高磁盘分区管理的灵活性。它由ibm公司提出。目的&#xff1a;在原始设…

简单认识Nginx配置块location及rewrite

文章目录 一、location配置块1、分类2、location 常用的匹配规则3、location 优先级&#xff1a;4.location 匹配流程5、location实际使用规则1、直接匹配网站根目录首页2、处理静态文件请求3、通用规则 二、rewrite配置块1、简介2、rewrite跳转实现3、rewrite 执行顺序4.rewri…

数据结构——归并排序和计数排序的介绍

文章目录 归并排序归并排序的思想单趟排序的实现归并排序实现非递归版本的实现特性总结 计数排序计数排序的思想计数排序的实现特性总结 归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治&#xff08;Divide and…

【Java】Map和Set

目录 一、搜索树 1、概念 2、操作-查找 3、操作-插入 4、操作-删除&#xff08;难点&#xff09; 6、性能分析 二、搜索 1、概念及场景 2、模型 三、Map 的使用 1、关于Map的说明 2、关于Map.Entry的说明,> 3、Map 的常用方法说明 4、TreeMap的使用案例 四、…

Django之ORM

一、Django模型层之ORM介绍 使用Django框架开发web应用的过程中&#xff0c;不可避免地会涉及到数据的管理操作&#xff08;增、删、改、查&#xff09;&#xff0c;而一旦谈到数据的管理操作&#xff0c;就需要用到数据库管理软件&#xff0c;例如mysql、oracle、Microsoft S…

护航行业安全!安全狗入选2023年度中国数字安全能力图谱(行业版)

近日&#xff0c;数世咨询正式发布了《2023年度中国数字安全能力图谱&#xff08;行业版&#xff09;》。 作为国内云原生安全领导厂商&#xff0c;安全狗也入选多个细项。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;…