MyBatis基础使用

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

1)创建的springboot工程中,在application.properties中配置MyBatis相关连接信息:

#配置数据库的连接信息
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url地址
spring.datasource.url=jdbc:mysql://地址
#连接数据库的用户名
spring.datasource.username=用户名
#连接的密码
spring.datasource.password=密码

2)创建mapper接口类:

/**
 * 三层架构的数据处理层
 */
@Mapper // 表示程序在运行时,会自动生成该接口的实现类对象,将对象交给IOC容器管理
public interface EmpMapper {
​
    /**
     * 定义查询接口
     * @return 所有查询的结果
     */
    @Select("select * from tb_emp")  // 表示该接口是查询接口
    public List<User> insert();
​
    /**
     * 定义删除接口
     * @param id 通过指定的ID删除,#{}最后会被?替代形成预编译sql,${}是拼接有sql注入的风险
     */
    @Delete(value = "delete from tb_emp where id = #{id}")
    public void delete(Integer id);
​
}

3)配置sql提示:

4)配置mybatis日志信息:

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

5.1、JDBC介绍

jdbc:就是使用java语言操作关系型数据库的一套API,他只是接口,实现由各个数据库厂商实现,各个厂商实现的又叫数据库的驱动,由于JDBC操作赋值,效率低下,就有mybatis框架进行封装简化开发,提高效率

5.2、数据库连接池

转换数据库连接池时,只需要引入对应的依赖

5.3、lombok

5.4、主键返回

在添加数据成功后,需要获取插入数据库数据的主键,需要在插入数据的方法前面添加@Options(keyProperty="id",useGeneratedKeys=true)进行标识

5.5、数据封装

  • 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装,

  • 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装

解决方法:

5.6、XML映射文件

配置xml映射文件的约束:mybatis官网入门有相关配置,不需要记忆

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

</mapper>

使用IDEA中的mybatisx插件可以标识映射文件

5.7、动态sql

随着用户的输入或外部条件变化也变化的sql语句,称为动态sql

  • <if>:用于判断条件是否成立,使用text属性进行条件判断,如过条件为true,则拼接

  • <where>:where标签只会在子元素有内容的情况下插入where子句,而且还会自动去除子句开头的and或or

  • <set>:动态的在行首插入set关键字,并会删掉额外的逗号

<select id="接口名" resultType="com.springmybatis.pojo.User">
        select *
        from tb_emp
        <where>
            <if test="name != null">name like concat('%', #{name}, '%')</if>
            <if test="gender != null">and gender = #{gender}</if>
            <if test="start != null and end != null">and entryDate between #{start} and #{end}</if>
        </where>
        order by updateTime desc
    </select>
​
    <update id="接口名">
        update tb_emp
        <set>
            <if test="userName != null ">userName=#{userName},</if>
            <if test="name != null ">name=#{name},</if>
            <if test="gender != null ">gender=#{gender},</if>
            <if test="userName != null ">image=#{image},</if>
            <if test="image != null ">job=#{job},</if>
            <if test="entryDate != null ">entryDate=#{entryDate},</if>
            <if test="deptId != null ">dept_id = #{deptId},</if>
            <if test="updateTime != null ">updateTime=#{updateTime}</if>
            where id = #{id}
        </set>
    </update>
  • <forearch>:配合删除多个的时候使用

  • <sql>和<include>:定义重复sql时使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【打工日常】使用Docker部署zyplayer_doc团队协作文档

一、zyplayer-doc介绍 1.zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;提供在线化的知识库管理功能&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或个人的数据安全&#xff0c;公司小团队的话完全可以局域网部署一个。 2.它也可以…

PyQt6实战2

cron表达式解析器和生成器 基本功能&#xff1a; 1.输入cron表达式&#xff0c;显示接下来的几条即将执行的时间 (测试下来只有5位是生效的) 2.选择规则生成cron 运行CronRunner即可&#xff1a; 运行效果展示 from PyQt6.QtWidgets import * import sys from cron import C…

RuoYi-Vue开源项目2-前端登录验证码生成过程分析

前端登录验证码实现过程 生成过程分析 生成过程分析 验证码的生成过程简单概括为&#xff1a;前端登录页面加载时&#xff0c;向后端发送一个请求&#xff0c;返回验证码图片给前端页面展示 前端页面加载触发代码&#xff1a; import { getCodeImg } from "/api/login&q…

在pharmit里匹配药效团

我把400个无活性的小分子&#xff08;decoys&#xff09;提交到pharmit里。 命名为decoyset00~decoyset08&#xff0c;查找时&#xff0c;按这个找。 1、导入药效团配体&#xff1a; 进入药效团筛选界面&#xff1a; 导入代表药效团模型的活性肽构象&#xff1a; 2、选择预先…

Unity判断某个材质是否拥有某张贴图

在Unity中&#xff0c;一个材质是唯一的&#xff0c;也就是实例&#xff0c;当我们打开Debug面板时&#xff0c;就可以看清楚材质的具体信息。 其中SvaedProperties就是材质保存的属性&#xff0c;当然贴图也是属性&#xff0c;也就是TexEnvs下的属性 当然&#xff0c;要判断某…

Docker进阶教程 - 2 Docker部署SpringBoot项目

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 2 Docker部署SpringBoot项目 已经学习了 Dockerfile 了&#xff0c;下面介绍一下如何将 SpringBoot 项目通过 Dockerfile 来部署到 Docker 中。 1 修改项目配置 首先需要准备一个 SpringBo…

【Spring 篇】SpringMVC的请求:舞台上的开端

在Web开发的舞台上&#xff0c;请求就如同一场充满激情的开端&#xff0c;而SpringMVC是这场表演的舞台主持人&#xff0c;它能够优雅地接收和处理各种请求&#xff0c;引领我们进入一个美妙的编码之旅。在本篇博客中&#xff0c;我们将深入探讨SpringMVC的请求处理机制&#x…

oracle 19c打补丁到19.14

oracle 19c打补丁到19.14 oracle 19.3打补丁到19.14 查看oracle的版本&#xff1a; SQL> column product format A30 SQL> column version format A15 SQL> column version_full format A20 SQL> column status format A15 SQL> select * from product_compo…

鸿蒙开发之MPChart图表开发

一、简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一,因此需要经常使用图表,如折线图、柱形图等。OpenHarmony提供了一个强大而灵活的图表库是实现这一目标的关键。 在 ohpm 中心仓(https://ohpm.openharmony.cn/)中,汇聚了众多开发者…

3月报价:腾讯云服务器2024年优惠价格表,5元1个月

腾讯云服务器今日价格&#xff1a;轻量应用服务器2核2G3M价格61元一年、2核2G4M价格99元一年&#xff0c;540元三年、2核4G5M带宽165元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月&#xff1b;云服务器CVM S5实例2核2G配置280.8元一年、2核4G、4核8G…

常用芯片学习——DS3231M芯片

DS3231M RTC实时时钟 芯片介绍 DS3231M是一款低成本、极其精确的 I2C 实时时钟 &#xff08;RTC&#xff09;。该设备集成了电池输入&#xff0c;并在设备主电源中断时保持准确的计时。微型电子机械系统 &#xff08;MEMS&#xff09; 谐振器的集成提高了器件的长期精度&…

CesiumJS 沙盒

CesiumJS 沙盒 通过CesiumJS 沙盒快速测试CesiumJS的一些功能&#xff0c;免去安装开发环境的困恼。 Hello World https://sandcastle.cesium.com/index.html 简单修改&#xff08;F8运行&#xff09;&#xff1a;去掉界面上UI const viewer new Cesium.Viewer("cesi…

HBase在表操作--显示中文

启动HBase后&#xff0c;Master和RegionServer两个服务器&#xff0c;分别对应进程为HMaster和HRegionServe。&#xff08;可通过jps查看&#xff09; 1.进入表操作 hbase shell 2.查看当前库中存在的表 list 3.查看表中数据&#xff08;注&#xff1a;学习期间可用&#…

ve-list 列表

ve-list 列表 功能描述 最基础的列表展示&#xff0c;可承载文字、列表、图片、段落&#xff0c;常用于后台数据展示页面。 Api 效果图 <ve-list v-for"(item, index) in _list" :key"index" :data"item" type"list3"><t…

谷歌(edge)浏览器过滤,只查看后端发送的请求

打开F12 调试工具 选择Network 这是我们会发现 什么图片 文件 接口的请求很多很多&#xff0c;我们只需要查看我们后端发送的请求是否成功就好了 正常情况我们需要的都是只看接口 先点击这里这个 过滤 我们只需要点击 Fetch/XHR 即可过滤掉其他请求信息的展示 这样烦恼的问题就…

HDFS EXERCISES

bash: hdfs: command not found...这可能是因为hdfs命令不在系统环境变量中 whereis hadoop 找到hadoop的位置 一旦找到Hadoop安装目录&#xff0c;您需要将其 bin 目录添加到PATH环境变量中。 vi ~/.bashrc .bashrc 是一个在Linux和Unix系统中用于Bash shell的配置文件。当…

Python图像处理指南:PIL与OpenCV的比较【第136篇—PIL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python图像处理指南&#xff1a;PIL与OpenCV的比较 图像处理在计算机视觉和图像识别等领域…

[氮化镓]GaN中质子反冲离子的LET和射程特性

这篇文件是一篇关于氮化镓&#xff08;GaN&#xff09;中质子反冲离子的线性能量转移&#xff08;LET&#xff09;和射程特性的研究论文&#xff0c;发表在《IEEE Transactions on Nuclear Science》2021年5月的期刊上。论文的主要内容包括&#xff1a; 研究背景&#xff1a;氮…

Python的网络爬虫介绍与实战

Python的网络爬虫基础介绍与实战 定义流程包和函数静动态网页爬虫实战红牛分公司&#xff1f;二手房数据&#xff08;静态网页&#xff09;豆瓣读书&#xff08;动态网页&#xff09; 定义 网络爬虫是按照一定的规则&#xff0c;自动地抓取万维网&#xff08;www&#xff09;信…

Java代码审计安全篇-XXE(XML外部实体注入)漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计&#xff0c;记录自己的学习过程&#xff0c;还希望各…