1. Mybatis 入门

news2024/10/9 22:15:33

文章目录

  • 1. Mybatis 简介
  • 2. Mybatis 快速入门
  • 3. 使用 idea 写 SQL
  • 4. Mapper 代理开发
  • 5. MyBatis 核心配置文件

1. Mybatis 简介

MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。
官方文档:https://mybatis.org/mybatis-3/zh/index.html

持久层:操作数据库的那些代码。
JavaEE三层架构:表现层(页面展示)、业务层(逻辑处理)、持久层。

框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

2. Mybatis 快速入门

在这里插入图片描述

(1) 用 Navicat 连接 MySQL 创建 user 表,添加数据

create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char (1),
	addr varchar(30)
);
INSERT INTO tb_user VALUES(1,'zhangsan','123','男','北京');
INSERT INTO tb_user VALUES (2,'李四','234','女','天津');
INSERT INTO tb_user VALUES(3,'王五','11','男','西安');

在这里插入图片描述

(2) 创建模块,导入坐标

<dependencies>
    <!--mybatis依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!--要连接数据库就得需要mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--JUnit单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
    <!--添加slf4j日志api-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.20</version>
    </dependency>
    <!--logback:日志相关-->
    <!--添加logback-classic依赖-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!--添加logback-core依赖-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

(3) 编写 MyBatis 核心配置文件,替换连接信息,解决硬编码问题
(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.jdbc.Driver"/>
                <!--mybatis:数据库名-->
                <!--jdbc:mysql:///mybatis?useSSL=false"也可以-->
                <property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

(4) 编写 SQL 映射文件,统一管理 SQL 语句,解决硬编码问题
(UserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间。不同名称空间里的同名id不冲突-->
<mapper namespace="test">
    <!--resultType:返回类型,应该是User,所以要定义一个User类-->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
</mapper>

(5) 编码

① 定义 POJO 类

public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;
    //getter、setter 方法
    //toString 方法
}

② 加载核心配置文件,获取 SqlSessionFactory 对象
③ 获取 SqlSession 对象,执行 SQL 语句
④ 释放资源

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //加载mybatis核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取SqlSession对象,用它来执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行SQL
        List<User> users = sqlSession.selectList("test.selectAll");
        System.out.println(users);
        //释放资源
        sqlSession.close();
    }
}

附:日志相关的配置文件(logback.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level]  %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="com.itheima" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>


    <!--

      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

输出结果:
在这里插入图片描述

3. 使用 idea 写 SQL

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Mapper 代理开发

目的:解决原生方式中的硬编码,简化后期执行 SQL。

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

public interface UserMapper {
}

在项目中,由于 Java 代码和配置文件一般是分开的,所以简单地将 UserMapper 接口和 UserMapper.xml(SQL 映射文件)放在一起是不合理的。

编译 module 后发现,class 文件和 UserMapper.xml(SQL 映射文件)同在 target/classes/com/ 目录下。
在这里插入图片描述

所以编写代码时,可以在 resources 目录下也新建 com/itheima/mapper 目录,并把 UserMapper.xml 放入其中。这样编译后,class 文件就能与 UserMapper.xml 同在 mapper 目录下,也就相当于满足了 “Mapper 接口和 SQL 映射文件放置在同一目录下” 的条件。

在这里插入图片描述

注意:在 resources 中新建目录时,只能 new directory,分隔符不能用 “·”,要用 “/”:
在这里插入图片描述

既然更改了 SQL 映射文件所在目录,就要更改 MyBatis 核心配置文件中加载该文件的路径:
(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.jdbc.Driver"/>
                <!--mybatis:数据库名-->
                <!--jdbc:mysql:///mybatis?useSSL=false"也可以-->
                <property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--更改sql映射文件路径-->
        <!--注意:resource下新建的是dictionary,
        分隔符用“/”,不能用“.”-->
        <mapper resource="com/itheima/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

(2) 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名。
(UserMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间。不同名称空间里的同名id不冲突-->
<!--设置SQL映射文件的namespace属性为Mapper接口全限定名-->
<mapper namespace="com.itheima.mapper.UserMapper">
    <!--resultType:返回类型,应该是User,所以要定义一个User类-->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
</mapper>

(3) 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致。
(UserMapper 接口)

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

(4) 编码
① 通过 SqlSession 的 getMapper 方法获取 Mapper 接口的代理对象
② 调用对应方法完成 SQL 的执行

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //加载mybatis核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取SqlSession对象,用它来执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用对应方法完成 SQL 的执行
        List<User> users = userMapper.selectAll();
        System.out.println(users);
        //释放资源
        sqlSession.close();
    }
}

在 mybatis-config.xml 核心配置文件里,需要加载 SQL 映射文件,现在的加载方式要写 SQL 映射文件的路径,一旦映射文件变多(UserMapper.xml,OrderMapper.xml,GoodsMapper.xml…),就会很繁琐。

但是,如果用了 Mapper 代理的方式,就可以用包扫描的简单方式来加载 SQL 映射文件。

<mappers>
     <!--用包扫描的方式来加载 SQL 映射文件-->
     <!--通过接口来找,所以路径中的分隔符用"."-->
     <package name="com.itheima.mapper"/>
 </mappers>

输出结果:

在这里插入图片描述

5. MyBatis 核心配置文件

在 mybatis-config 中,environments 用于配置数据库连接环境信息。它的内部可以配置多个 environment,通过 default 属性切换不同的 environment。

<environments default="test">

    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <!--mybatis:数据库名-->
            <!--jdbc:mysql:///mybatis?useSSL=false"也可以-->
            <property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
    
    <environment id="test">
        <!--...-->
    </environment>
    
</environments>

在 UserMapper.xml 中,select 语句的 resultType 原本是 com.itheima.pojo.User,可以进行简化,方法是:
先在 mybatis-config.xml 中设置类型别名,相当于给 pojo下面的所有实体类都取了别名。别名默认是类名,不区分大小写,使用时可以不带所在包的名称。

在这里插入图片描述

下面是一些为常见的 Java 类型内建的类型别名,都是不区分大小写的。
注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在 mybatis 核心配置文件(mybatis-config.xml)中,各个标签要遵守的前后顺序:

在这里插入图片描述

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

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

相关文章

【自学Docker】Docker cp命令

Docker cp命令 大纲 docker cp命令教程 docker cp 命令用于在本地文件系统与 Dokcer容器 之间复制文件或者文件夹。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker cp命令语法 从容器复制到宿主机 haicoder(www.haicoder.net)# docker cp [OPTION…

第57篇-某日头条signature参数分析【2023-02-01】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析三、signature参数四、完整代码一、前言 今天来看一下新闻网站,分析一下参数 二、网站分析 网…

WebDAV之葫芦儿·派盘+一叶日记

一叶日记 支持WebDAV方式连接葫芦儿派盘。 推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景&…

补充:论Unity_InputSystemPacakage如何使用

图1补充一下默认特殊值如何设定&#xff0c;点击ProjectingSettings——InputSystemPacakage——Create Settings Asset 即可设置默认特殊值&#xff0c;或者点击图1中的Open input settings也可以打开此界面。 创建后会在Project窗口出现一个配置文件&#xff0c;不需要时删除…

你说反射有点难追,我觉得应该知难而退。

文章目录问题源码解析溯源问题解决方案第一种&#xff1a;第二种&#xff1a;第三种&#xff1a;问题 今天小伙伴遇到一个问题&#xff0c;有关于反射的&#xff0c;写个demo&#xff0c;大家看一下。 如上&#xff0c;运行之后会报错&#xff1a;出现了非法参数。 Exception…

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现 YOLOv6 v3.0: A Full-Scale Reloading PDF: https://arxiv.org/pdf/2301.05586.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch…

2023年IB考试该如何备考?

IB课程考试时间 考试时间&#xff1a;IBO官方近期公布了2023年的考试时间与计划&#xff0c;中国学生IB考试时间定在2023.5.1至5.19。 在世界各地&#xff0c;学生在IB体系中均按照相同的教学大纲进行&#xff0c;并且于毕业时参加全球统一考试。一年两次&#xff08;北半球于5…

拉伯证券|北向资金1月净买入超1400亿,啥信号?

2023年1月份&#xff0c;电视剧《狂飙》热播&#xff0c;被视为A股投资“风向标”的北向资金也敞开“狂飙”态势&#xff0c;月内五次净买入额超百亿&#xff0c;1月30日单日净买入额更是创2021年12月以来新高。 单月净买入超1400亿&#xff0c;刷新纪录&#xff01; 北向资金…

Ventoy安装教程

目录Ventoy五大优势Ventoy安装教程其他链接Ventoy是一款国人开发的新一代多ISO启动引导程序&#xff0c;用户只需要将所需的ISO镜像文件拷贝至优盘中即可在Ventoy界面中选择自己想要的ISO镜像文件。 Ventoy五大优势 广泛兼容&#xff1a;支持包括Windows 10、Windows 8.1、Wind…

【哈希表】leetcode15. 三数之和(C/C++/Java/Python/Js)--梦破碎的地方

leetcode15. 三数之和--梦破碎的地方1 题目2 思路2.1 哈希解法--含代码2.2 双指针2.3 去重逻辑的思考2.3.1 a的去重2.3.2 b与c的去重3 代码--双指针法3.1 C版本3.2 C版本3.3 Java版本3.4 Python3版本3.5 JavaScript版本4 总结用哈希表解决了两数之和 &#xff0c;那么三数之和呢…

[Lua实战]Skynet-2.如何启动(Win10-WSL环境Ubuntu18.04)[开箱可用]

Skynet-2.如何启动Win10-WSL环境Ubuntu18.04接上文,在linux运行skynet1.WIN10-WSL1.1 用Microsoft Store安装WSL(会遇到商店下载失败等问题...)1.1.1控制面板支持Linux配置1.1.2Microsoft Store 找到 Ubuntu18.041.1.3如果遇到安装问题如图请直接跳到1.21.2 使用PowerShell工具…

概论_第7章_参数估计_点估计之极大似然估计__性质

一 性质 极大似然估计 有一个简单有用的性质&#xff1a; 如果 θ^\hat\thetaθ^ 是 θ\thetaθ的极大似然估计&#xff0c; 则对任一 θ\thetaθ的函数g(θ)g(\theta)g(θ), 其极大似然估计为 g(θ^)g(\hat\theta)g(θ^) . 该性质称为极大似然估计的不变性&#xff0c;它使…

项目代码版本控制与维护

一、版本命名规则 1.1 需求开发分支命名规则 格式&#xff1a;dev_v版本号_需求名称 案例&#xff1a;dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式&#xff1a;uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…

操作系统权限提升(六)之系统错误配置-不安全的服务提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tusted Service Paths提权 操作系统权限提升(五)之系统错误配置-PATH环境变量提权 注&…

九种查找算法-B树/B+树

B树/B树 在计算机科学中&#xff0c;B树&#xff08;B-tree&#xff09;是一种树状数据结构&#xff0c;它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树&#xff0c;概括来说是一个节点可以拥有多于2个子节点的二…

数学建模与数据分析 || 2. 结构化与非结构化数据的读取方法

结构化与非结构化数据的读取方法 文章目录结构化与非结构化数据的读取方法1. 结构化数据的读取1.1 pandas 读取 excel 文件1.2 pandas 读取 csv 文件1.3 pandas 读取 txt 文件1.4 利用 scipy 读取 mat 格式文件数据1.5 利用 numpy 存储和读取 npz 格式文件2. python 读取图像的…

SpringBoot国际化

软件的国际化软件的国际化&#xff1a;软件开发时&#xff0c;要使它能同时应对世界不同地区和国家的访问&#xff0c;并针对不同地区和国家的访问&#xff0c;提供相应的、符合来访者阅读习惯的页面或数据。国际化internationalization&#xff0c;在i和n之间有 18 个字母&…

AXI 总线协议学习笔记(2)

引言 从本文开始&#xff0c;正式系统性学学习AXI总线。 如何获取官方协议标准&#xff1f; 第一步&#xff1a;登陆官网&#xff1a;armDeveloper 第二步&#xff1a;登录&#xff0c;无账号需要注册 第三步&#xff1a;点击文档 第四步&#xff1a; 第五步&#xff1a;浏…

最新最全阿里内推830道面试题合集,BATJ都有问到

小小叹语&#xff1a;你是否对你现在的生活状态有满足感呢&#xff1f;逝去日子经过多少风雨波折才有今天的成就&#xff0c;只有努力向上不断闯断&#xff0c;热爱竟逐每秒每分钟&#xff0c;才能拥有的更多。 而对于一个程序员来说&#xff0c;如果说你是想要在互联网行业找…