MyBatis初识

举报
十八岁讨厌编程 发表于 2022/08/06 00:42:10 2022/08/06
【摘要】 文章目录 什么是MyBatisJDBC的缺点MyBatis简化 MyBatis基础操作 什么是MyBatis MyBatis是一款优秀的持久层框架,用于简化JDBC开发 官网:...

什么是MyBatis

MyBatis是一款优秀的持久层框架,用于简化JDBC开发

官网:https://mybatis.org/mybatis-3/zh/index.html

持久层:

  • 负责将数据到保存到数据库的那一层代码。

    开发中我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。

  • JavaEE三层架构:表现层、业务层、持久层

表现层:用来做页面展示
业务层:用来做逻辑处理
持久层:对数据进行持久化的(也就是保存到数据库的)

框架:

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

JDBC的缺点

在这里插入图片描述

MyBatis简化

在这里插入图片描述

MyBatis基础操作

我们先给定一个需求:查询一张表中的所有数据,放到一个特定的对象中,再把一个个的对象装入到到集合中。

我们的思路是:

  • 创建表,添加数据
  • 创建模块,导入坐标
  • 编写MyBatis核心配置文件(替换连接信息,解决硬编码问题)
  • 编写SQL映射文件(统一管理sql语句,就解决硬编码问题)
  • 编码
    • 定义类
    • 加载核心配置文件,获取SqlSessionFactory对象
    • 获取SqlSession对象,执行SQL语句
    • 释放资源

步骤详解
①创建模块导入坐标
在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

<dependencies>
    <!--mybatis 依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>

    <!--mysql 驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</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-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>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

注意:需要在项目的 resources 目录下创建logback的配置文件

这个地方注意mysql的版本,如果是mysql8的话那么对应的驱动版本也要高一点
推荐8.0.27或者8.0.28都可以

②编写 MyBatis 核心配置文件
在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.xml,内容如下:

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

    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>
    
    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
       <!--加载sql映射文件-->
       <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

几个问题:
①如果你是从官网上cv下来的:
在这里插入图片描述
要注意将双引号中的${}都替换掉,别只是把driver替换掉了,那么后面会报错
②mapper中的文件路径是相对于resources文件夹来说的(如果你使用maven来创建的项目),不能是绝对路径或者内容根路径
③对于高驱动版本:com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver
④对于高驱动版本:jdbc:mysql://{ip}:{port}/{db}?useSSL=false&serverTimezone=UTC
⑤如果报错“对实体 “useSSL” 的引用必须以 ‘;’ 分隔符结尾。”。解决办法:修改URL,将&改为&amp;(注意amp后面有分号),
例如:将jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false
改为jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useSSL=false

③编写 SQL 映射文件
在模块的 resources 目录下创建映射配置文件 UserMapper.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="test">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
</mapper>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意:
resultType表示用什么类型的对象去装你的数据,此处要使用全限定类名。
namespace是命名空间,其值可以任意设置
id是此sql语句的唯一标识

注意
SQL映射文件的警告提示
在这里插入图片描述
它并不影响程序的执行

④编码
创建 User类
根据要取出来的数据,编写数据,然后再完善get/set方法

编写 MybatisDemo 测试类

public class MyBatisDemo {

    public static void main(String[] args) throws IOException {
        //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"); //参数是一个字符串,该字符串必须是映射配置文件的namespace.id
        System.out.println(users);
        //4. 释放资源
        sqlSession.close();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

MyBatis会直接将我们select出来的结果打包放在集合list里

注意:
①第一部分的代码比较固定 可以直接在官网粘贴
②selectList方法参数是一个字符串,该字符串必须是映射配置文件的namespace.id

文章来源: blog.csdn.net,作者:十八岁讨厌编程,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/zyb18507175502/article/details/124444309

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。