IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 01-Mybatis持久层框架快速入门(环境搭建、xml配置文件、注解) -> 正文阅读

[Java知识库]01-Mybatis持久层框架快速入门(环境搭建、xml配置文件、注解)

博主精心整理的Mybatis笔记,希望对小伙伴们有所帮助哦~
源码链接在文末,点击免费下载

1、框架

1.1、框架概念

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。简单的说,框架就是某种应用的半成品。

  • 使用框架要解决的问题

框架要解决的最重要的一个问题是技术整合的问题,技术自身的复杂性和技 术的风险性将会直接对应用造成冲击。应用是软件企业的核心,因此应该将应用自身的设 计和具体的实现技术解耦。
框架一般处在底层应用平台(如 J2EE)和高层业务逻辑之间的中间层。

1.2、软件分层开发

框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现 软件工程中的“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的 MVC 软件设计思想就是很好的分层思想。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3、JDBC编程分析

public class Jdbc {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet =null;

        try {
            // 1. 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2. 获取数据库连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
            // 3. 定义sql
            String sql = "select * from user where username = ?";
            // 4. 获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            // 5. 执行sql
            preparedStatement.setString(1, "老王");
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            // 6. 释放资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • jdbc所存在的问题
    1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
    2. Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
    3. 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护。
    4. 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记 录封装成 pojo 对象解析比较方便。

2、Mybatis框架

2.1、Mybatis框架概述

mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我 们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

  • ORM:Object Relational Mappging 对象关系映射

    就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表(实体类属性和数据库字段名需要保持一致)。
    在这里插入图片描述

2.2、Mybatis开发环境搭建

  1. 创建maven工程,引入Mybatis坐标
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>
  1. 创建实体类 domain,和持久层接口 XXXDao.java
  2. 编写Mybatis主配置文件 SqlMapConfig.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">
  1. 编写持久层接口映射配置文件 XXXDao.xml 或 XXXMapper.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">

【注意】

  1. mybatis的映射配置文件位置必须和dao接口的包结构相同;
  2. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名;
  3. 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名。
  4. 遵循以上几点之后,在开发中就无需再写Dao的实现类。

2.3、Mybatis入门案例

在这里插入图片描述

  • 实现步骤
    1. 读取主配置文件;
    2. 创建SqlSessionFactoryBuilder构建者对象;
    3. 创建SqlSessionFactory工厂对象;
    4. 创建SqlSession对象;
    5. 创建Dao的代理对象;
    6. 使用代理对象执行Dao中的方法;
    7. 释放资源。
  • 主配置文件
<!-- mybatis的主配置文件 -->
<configuration>
  <!-- 配置环境 -->
  <environments default="mysql">
    <!-- 配置mysql的环境 -->
    <environment id="mysql">
      <!-- 配置事务类型 -->
      <transactionManager type="JDBC"/>
      <!-- 配置数据源(连接池) -->
      <dataSource type="POOLED">
        <!-- 配置连接数据库的4个基本信息 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>

  <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
  <mappers>
    <mapper resource="com/junlong/dao/UserDao.xml"/>
  </mappers>
</configuration>
  • 持久层接口
public interface UserDao {
    /**
     * 查询所有用户
     *
     * @return List<User> 返回所有用户列表
     */
    List<User> findAll();
}
  • 映射配置文件
<mapper namespace="com.junlong.dao.UserDao">
  <!-- 配置查询所有 -->
  <select id="findAll" resultType="com.junlong.domain.User">
    select * from user
  </select>
</mapper>
  • 测试
public class UserDaoTest {
    @Test
    public void testFindAll() throws Exception {
        // 1. 读取Mybatis主配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2. 创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 3. 使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = builder.build(in);
        // 4. 使用工厂对象创建 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 5. 使用 SqlSession 对象创建 Dao 接口的代理对象
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        // 6. 使用代理对象执行查询所有方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 7. 释放资源
        sqlSession.close();
        in.close();
    }
}

2.4、基于注解的Mybatis

  • 实现步骤
    1. 将映射配置文件移除,在Dao接口的方法上使用 @Select 注解,并指定 sql 语句;
    2. 在主配置文件 SqlMapConfig.xml 中配置mapper时,使用 class 属性指定Dao接口的全限定类名。

【注意】在实际开发中都是采用不写dao实现类的方式。但是Mybatis是支持写dao实现类的。

  • 主配置文件
<!-- mybatis的主配置文件 -->
<configuration>
  <!-- 配置环境 -->
  <environments default="mysql">
    <!-- 配置mysql的环境 -->
    <environment id="mysql">
      <!-- 配置事务类型 -->
      <transactionManager type="JDBC"/>
      <!-- 配置数据源(连接池) -->
      <dataSource type="POOLED">
        <!-- 配置连接数据库的4个基本信息 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>

  <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
  <mappers>
    <mapper class="com.junlong.dao.UserDao"/>
  </mappers>
</configuration>
  • 持久层接口
public interface UserDao {
    /**
     * 查询所有用户
     *
     * @return List<User> 返回所有用户列表
     */
    @Select("select * from user")
    List<User> findAll();
}
  • 测试
public class UserDaoTest {
    @Test
    public void testFindAll() throws Exception {
        // 1. 读取Mybatis主配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2. 创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 3. 使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = builder.build(in);
        // 4. 使用工厂对象创建 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 5. 使用 SqlSession 对象创建 Dao 接口的代理对象
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        // 6. 使用代理对象执行查询所有方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 7. 释放资源
        sqlSession.close();
        in.close();
    }
}

3、源码下载

源码下载链接👉 点击直达下载地址

感谢小伙伴们的关注!
你的点赞评论关注收藏是对博主的最大鼓励!
持续更新Mybatis学习笔记!欢迎订阅专栏!

相关内容
👉 Mybatis详细笔记专栏
👉 JavaSE详细笔记专栏

往期精彩内容
👉 Java小白学习手册 - SE

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:53:51  更:2021-12-07 11:54:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:20:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码