MyBatis超详细学习笔记(黑马)

news2024/12/27 15:34:47

目录

一、MyBatis快速入门

(一)打开MyBatis中文官网

(二)在工程中(pom.xml)导入MyBatis依赖

(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题

(四)创建SQL映射文件——统一管理SQL语句

(五)编写实现类

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

(二)设置SQL映射文件的namespace属性为Mapper接口全限定名

(三)在Mapper接口中定义方法

(四)编码实现

(五)SQL映射小技巧

三、MyBatis总结

四、MyBatis中sql语句的处理

(一)MyBatisX插件

(二)SQL映射文件中的sql片段

(三)结果集映射resultMap

(四)SQL传值

(五)sql语句中特殊字符处理

(六)自动提交事务

(七)返回添加数据的主键

(八)动态批量删除

(九)注解开发


一、MyBatis快速入门

(一)打开MyBatis中文官网

https://mybatis.net.cn/getting-started.htmlhttps://mybatis.net.cn/getting-started.html

(二)在工程中(pom.xml)导入MyBatis依赖

👇👇👇从官网导入:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题

👇👇👇从官网导入:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库的连接信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="✅✅✅"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 加载sql的映射文件 -->
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

注意:1. 数据库的连接信息需要自己修改

           2. 加载SQL映射文件见后文

(四)创建SQL映射文件——统一管理SQL语句

👇👇👇从官网导入:

 例如,我们要操作user表,则创建对应的SQL映射文件UserMapper.xml,代码如下:

(注意:先创建对应的实体类Uesr)

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

<!-- namespace名称空间 -->
<mapper namespace="test">

    <!-- id是唯一标识,resultType是返回类型 -->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select *
        from tb_user;
    </select>

</mapper>

修改mybatis-config.xml文件的内容:

<mappers>
     <!-- 加载sql的映射文件 -->
     <mapper resource="userMapper.xml"/>
</mappers>

(五)编写实现类

创建MyBatisDemo类,代码如下:

/**
 * MyBatis快速入门
 */
public class MyBatisDemo {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        List<User> users = sqlSession.selectList("test.selectAll");
        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();

    }
}

结果:

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

        定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下。

1. 新建Mapper接口:UserMapper

 2. 将该接口与SQL映射文件放在同一目录

        初始的项目结构如图:

         但xml文件一般默认放在resources文件夹中,不建议直接将其移动到接口UserMapper所在的文件夹中,我们可以这样做:

  • 在resources文件夹中新建文件夹(没有包),输入:com/itheima/mapper
    (注意:不要写成com.itheima.mapper,资源文件夹中不识别句点)
  • 将userMapper.xml移入该文件夹中,如下图:

        (同时记得修改mybatis-config配置文件中的sql映射文件路径)

 <mapper resource="com/itheima/mapper/userMapper.xml"/>

        Maven执行编译compile后,就会看到两个文件在同一目录下了:

 🎉🎉🎉在一起,在一起!!!🎉🎉🎉

(二)设置SQL映射文件的namespace属性为Mapper接口全限定名

        在SQL映射文件UserMapper.xml文件中部分修改为:

<mapper namespace="com.itheima.mapper.UserMapper">

(三)在Mapper接口中定义方法

        方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值的类型一致。

        UserMapper接口中代码为:

public interface UserMapper {
    List<User> selectAll();
}

(四)编码实现

        新建一个实现类:MyBatisDemo2,代码如下:

public class MyBatisDemo2 {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        //List<User> users = sqlSession.selectList("test.selectAll");
        //3.获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();
    }
}

结果:

(五)SQL映射小技巧

        假如数据库的实体类有很多,那么mybatis-config文件中加载sql映射文件的语句就会很长,类似这样:

<mappers>
        <!-- 加载sql的映射文件 -->
        <mapper resource="com/itheima/mapper/userMapper.xml"/>
        <mapper resource="com/itheima/mapper/orderMapper.xml"/>
        <mapper resource="com/itheima/mapper/detailsMapper.xml"/>
        <mapper resource="com/itheima/mapper/foodMapper.xml"/>
        ...
        ...
</mappers>

        如果我们的Mapper接口和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。

<mappers>
        <!-- 加载sql的映射文件 -->
        <package name ="com.itheima.mapper"/>
</mappers>

三、MyBatis总结

【一般步骤】

  1. 编写接口方法:Mapper接口(xxxMapper.java)
    (分析是否有参数,分析语句的返回结果类型)
  2. 编写SQL语句:SQL映射文件(xxxMapper.xml)
  3. 执行方法,测试

四、MyBatis中sql语句的处理

(一)MyBatisX插件

1.自动识别Mapper接口文件和与之对应的SQL映射文件,会显示为两个不同颜色的小鸟

2.点击小鸟会自动跳转到另一个文件的对应代码处

3.会对代码做进一步的智能化提示

(二)SQL映射文件中的sql片段

        如果sql语句中某一句太长,且经常用到,可以将其写为sql片段,然后每次引用sql片段即可实现相同的功能。
例如:

(三)结果集映射resultMap

        解决实体类属性名和数据库表字段列名不对应的情况,比如数据库某列名为brand_name,实体类中为brandName,这是可以用resultMap实现映射。

(四)SQL传值

参数占位符:#{ }——会将其替换为?,为了防止sql注入

一、单值传递


1.brandMapper.xml

 2.测试类.java

二、多值传递


1.bandMapper.xml

 2.brandMapper.java接口

    三种方法:

 3.测试类.java

三、动态SQL


        即SQL语句写死了3个参数,但用户提供的参数个数会随时变化,有可能只输入一个参数就要查询,这就会涉及动态SQL

        详见官网👇👇👇

 1.brandMapper.xml

 注意:如果只有companyName,sql会出现语法错误从而报错,myBatis这样处理:加入<where>字段(<set>同理),并且每一个条件语句都写入and。

(五)sql语句中特殊字符处理

在xml中,sql语句的小于号<会出现报错,要这样处理,输入CDATA,在CDATA区域输入<

(六)自动提交事务

   实现添加、修改sql语句时,默认自动提交事务是关闭的,需要我们手动提交一下,也可以直接在sqlSession中设置为true

(七)返回添加数据的主键

(八)动态批量删除

   使用foreach

(九)注解开发

【适用于简单的SQL语句】

可以不在xml中写SQL语句,直接在Mapper接口中通过注解写明SQL语句,例如:

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

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

相关文章

关于加强网络舆情监测的几点建议,TOOM强化舆情监控有方法

网络舆情监测是一项旨在通过监测网络上的舆情信息&#xff0c;了解社会舆论和网络话语状况&#xff0c;分析舆情动态&#xff0c;预测舆情走向&#xff0c;并进行舆情管控的工作。主要通过计算机技术和信息科学手段对网络信息进行收集、整理、分析和报告&#xff0c;以便于管理…

Golang - 操作Redis

Golang - 操作Redis go-redis是Golang语言连接、操作Redis服务的客户端&#xff0c;几乎包含了对Redis的所有操作&#xff0c;具体如下&#xff1a; 简单易用 兼容多种Redis部署架构,可用于Redis服务器、Redis群集、Redis Sentinel&#xff0c;甚至Redis服务器环go-redis 支持…

配置TF-A源码

配置TF-A源码 1.对tf-a源码进行解压 $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2.打补丁 进入/home/ubuntu/FSMP1A/tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2目录 执行 for p in ls -1 ../*.patch; do patch -p1 < $p; done 3.配置工具链 1)进入/home/ubuntu/FS…

05 CSS-CSS语法【尚硅谷JavaWeb教程】

05 CSS-CSS语法【尚硅谷JavaWeb教程】 JAVAWEB的学习笔记 学习视频来自&#xff1a;https://www.bilibili.com/video/BV1AS4y177xJ/?vd_source75dce036dc8244310435eaf03de4e330 为什么需要CSS 传统的园区网络采用设备和链路冗余来保证高可靠性&#xff0c;但其链路利用率低、…

Task7:动态函数

目录注意一 Filter函数二 Subtotal函数注意 filter&#xff0c;目前只有office365支持 一 Filter函数 作用&#xff1a;需要根据指定的条件&#xff0c;将符合条件的所有记录从数据源表格式查找过来之前方法&#xff1a; 用高级筛选&#xff08;缺点&#xff1a;在查询下一个…

SAP ADM100-Unit4 数据库工作原理:中央数据库管理与DBA Cockpit

概览 本节介绍DBA Cockpit,介绍SAP环境下数据库管理和监控的要点。 使用DBA Cockpit计划日历去计划数据和日志信息的周期性备份。 课程目标 备份数据库内容 检查数据库备份是否成功被执行。 1、DBA Cockpit总览 为了最少的系统停机时间和更高的系统性能,必须计划定期的…

云计算|OpenStack|社区版OpenStack安装部署文档(一 --- 前期硬件准备和部署规划)

前言&#xff1a; 社区版OpenStack是比较难以安装部署的&#xff0c;本文将就安装部署做一个详细的说明。 首先&#xff0c;OpenStack社区版本众多&#xff0c;如何选择一个合适的版本是第一个要解决的问题&#xff08;这里的合适是指的OpenStack版本和操作系统的版本合适&am…

MATLAB-自动控制原理-时域分析

目录 step函数&#xff08;求阶跃响应&#xff09;: impulse函数&#xff08;求脉冲响应&#xff09;: lsim函数&#xff08;求输出&#xff09;: 1&#xff0c;求二阶系统不同阻尼比条件下的阶跃响应曲线 2&#xff0c;求二阶负反馈系统的动态性能指标 利用MATLAB可以方…

五、好友关注,feed流推送

文章目录关注和取消关注&#xff0c;共同关注Feed流推送Feed介绍Timeline推模式Feed流滚动分页滚动分页查询收邮箱官方命令文档&#xff1a;https://redis.io/commands/ 关注和取消关注&#xff0c;共同关注 需求&#xff1a; 可以对一个用户进行关注和取消关注查询和一个用…

深刻理解状态机设计需要避免的冒险;处理单元里的control和datapath;时序电路可能存在essential hazard;竞争冒险【SV】【VLSI】

深刻理解状态机设计需要避免的冒险&#xff1b;处理单元里的control和datapath&#xff1b;时序电路可能存在essential hazard&#xff1b;竞争冒险【SV】【VLSI】0. 前言&#xff1a;时序电路可能存在essential hazard1. 理解control和datapath1.1 Datapath control2. 硬件电路…

JavaScript XHR、Fetch

前后端分离的优势 ◼ 早期的网页都是通过后端渲染来完成的&#xff1a;服务器端渲染&#xff08;SSR&#xff0c;server side render&#xff09;&#xff1a; \qquad 客户端发出请求-> 服务端接收请求并返回相应HTML文档-> 页面刷新&#xff0c;客户端加载新的HTML文…

如何采用conda配置python虚拟环境

文章目录一、创建python虚拟环境二、配置刚创建的虚拟环境三、将虚拟环境配置到相应项目一、创建python虚拟环境 首先选中要配置环境的文件 如下&#xff1a; 在此处输入cmd按回车 此处我创建一个环境名为hands3dtext&#xff0c;环境版本为3.7.2的初始环境 conda create -n…

Visual Studio 2015配置OpenCV4.5.3(c++版)

学习目标学会在Visual Studio 2015部署Opencv一个简单的C Opencv实例一、 Visual Studio 2015配置Opencv4.5.31.1 Visual Studio 2015网上关于Visual Studio 2015的下载&#xff0c;也有很多介绍。大家自行搜索安装。1.2 OpenCVOpenCV大家根据需求下载相应版本&#xff0c;官网…

ObjectARX如何修改多行文字的格式

一 AutoCAD中多行文字的格式设置 AutoCAD在设置多行文字格式时使用了非常特殊的方式&#xff0c;多行文字整体可以有诸多格式属性&#xff0c;比如字高、颜色、旋转角度等等&#xff1b;但是&#xff0c;多行文字的每一个字符其实也可以有自己单独的格式。 比如&#xff0c;下…

java ssm学校二手服饰交易系统服装商城的卖家

目 录 Abstract 1 第一章 绪论 2 1.1课题背景 2 1.2课题研究的目的和意义 3 1.3论文所做的主要工作 3 第二章 技术介绍 4 2.1 B/S架构 4 2.2 MySQL 介绍 4 2.3 JSP技术介绍 4 第三章 系统分析与设计 6 3.1 可行性分析 6 3.2系统说明 6 3.…

Hexo 添加 Github 贡献图

参考&#xff1a;https://akilar.top/posts/1f9c68c9/ 安装 hexo-filter-gitcalendar 插件 执行命令安装 hexo-filter-gitcalendar 插件 npm install hexo-filter-gitcalendar --save在站点配置文件 _config.yml 或者主题配置文件如 _config.butterfly.yml 中添加 # hexo-filte…

jmeter录制脚本及报错:Could not create script recorder解决办法

本文分两部分&#xff1a;一、录制脚本最简单步骤&#xff1b;二、报错解决步骤 一、录制脚本步骤 1、右击【测试计划】添加一个线程组&#xff08;用于存放录制的脚本&#xff09;&#xff1b; 2、右击测试计划添加一个HTTP代理服务器&#xff08;添加--非测试元件--HTTP代理…

(mysql的相关操作)和(Navicat与MySQL的连接使用)

mysql的相关操作 详细教程 链接1: http://edu.jb51.net/mysql/mysql-tutorial.html 链接2: http://c.biancheng.net/view/2441.html mysql安装教程&#xff1a;https://blog.csdn.net/weixin_36369605/article/details/113599400?ops_request_misc%257B%2522request%255Fid%…

ABAP CDS-介绍(ABAP CDS视图)

目录前言架构概述CDS版本SAP平台CDS的可用性CDS其他的好处后续参考前言文章翻译自Tushar Sharma的文章&#xff0c;转载请注明原作者和译者&#xff01;在SAP发展到SAP HANA版本之后&#xff0c;SAP内部的技术正在快速地变化&#xff0c;SAP开发业务应用程序的方式已经发生了范…

CUDA编程笔记(8)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言原子函数完全在GPU中归约性能比较总结前言 原子函数的合理使用 原子函数 在cuda里&#xff0c;一个线程的原子操作可以在不受其他线程的任何操作的影响下完成对…