首页 > 其他分享 >一、Mybatis(基础)

一、Mybatis(基础)

时间:2022-11-26 15:01:00浏览次数:62  
标签:配置文件 基础 sqlSession Student sid Mybatis Integer public

一.Mybatis快速入门

1.1 框架介绍

  • 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求!
  • 如图:

img

1.2 ORM介绍

  • 如图:

img

具体映射关系如下图:

img

1.3 原始jdbc操作(查询数据)

img

1.4原始jdbc操作(插入数据)

img

1.5 原始jdbc操作的分析

原始 JDBC 的操作问题分析

​ 1.频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能。

​ 2.sql 语句在代码中硬编码,如果要修改 sql 语句,就需要修改 java 代码,造成代码不易维护。

​ 3.查询操作时,需要手动将结果集中的数据封装到实体对象中。

​ 4.增删改查操作需要参数时,需要手动将实体对象的数据设置到 sql 语句的占位符。

原始 JDBC 的操作问题解决方案

​ 1.使用数据库连接池初始化连接资源。

​ 2.将 sql 语句抽取到配置文件中。

​ 3.使用反射、内省等底层技术,将实体与表进行属性与字段的自动映射

1.6 什么是Mybatis

mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。

最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。

MyBatis官网地址:mybatis – MyBatis 3 | Introduction

1.7 Mybatis的快速入门

MyBatis开发步骤:

①创建maven项目 导入maven坐标

  • mysql-connector-java-5.1.37-bin.jar
  • mybatis-3.5.3.jar
  • log4j-1.2.17.jar
    <!--导包 以坐标的方式 -->
    <!--  dependencies 依赖包 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
    </dependencies>

②创建Student数据表

img

③编写Studentr实体类

package com.itss.bean;


import java.util.Date;

public class Student {
    //成员变量如果是基本数据类型 为了防止有null值出现  基本数据类型要使用包装类
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;

    public Student(Integer sid, String name, Integer age, Date birthday) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

④编写映射文件StudentMapper.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">

<!--namespace 命名空间-->
<mapper namespace="StudentMapper">
    <!--
    selectAll 代表查询全部的功能
    resultType  将来读取到的文件  封装到指定的对象中
    -->
    <select id="selectAll" resultType="com.itss.bean.Student">
        SELECT *
        FROM Student
    </select>
</mapper>

⑤编写核心文件MyBatisConfig.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 核心根标签-->
<configuration>
    <environments default="mysql">
        <!--environment配置数据库环境  id属性唯一标识-->
        <environment id="mysql">
            <!-- transactionManager事务管理。  type属性,采用JDBC默认的事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- dataSource数据源信息   type属性 连接池-->
            <dataSource type="POOLED">
                <!-- property获取数据库连接的配置信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db23"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- mappers引入映射配置文件 -->
    <mappers>
        <!-- mapper 引入指定的映射配置文件   resource属性指定映射配置文件的名称 -->
        <mapper resource="StudentMapper.xml"/>
    </mappers>
</configuration>

注意 配置文件需要放在resource 目录下

img

⑥编写测试类

import com.itss.bean.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author IT苏苏
 * @className StudentTest01.java
 * @Form no
 * @Description ToDo
 * @createTime 2022 年 11 月 21 日 10  10:38:37
 **/
public class StudentTest01 {
    //    查询全部
    @Test
    public void selectAll() throws IOException {
        //1.加载核心配置文件
        InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");

        //2.获取Sq1Session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        //3.通过sqiSession工厂对象获取SqiSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //4.执行映射配置文件中的sql语句,并接收结果
//        配置文件中的 名称空间.id
        List<Student> list = sqlSession.selectList("StudentMapper.selectAll");

        //5.处理结果
        for (Student stu : list
        ) {
            System.out.println(stu);
        }
        //6.释放资源
        sqlSession.close();
        is.close();
    }
}

运行测试结果 表中数据全部读取出来

img

1.8 知识小结

  • 框架 框架是一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求。
  • ORM 对象关系映射,数据和实体对象的映射。
  • MyBatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC。

二. MyBatis的相关api

2.1 Resources

  • org.apache.ibatis.io.Resources:加载资源的工具类。
  • 核心方法

img

2.2 构建器SqlSessionFactoryBuilder

  • org.apache.ibatis.session.SqlSessionFactoryBuilder:获取 SqlSessionFactory 工厂对象的功能类
  • 核心方法

img

  • 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
String resource = "org/mybatis/builder/mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。

2.3 工厂对象 SqlSessionFactory

  • org.apache.ibatis.session.SqlSessionFactory:获取 SqlSession 构建者对象的工厂接口。
  • 核心api

img

2.4 SqlSession 会话对象

  • org.apache.ibatis.session.SqlSession:构建者对象接口。用于执行 SQL、管理事务、接口代理。
  • 核心api

img

SqlSession 实例在 MyBatis 中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。

相关API小结

Resources:加载资源的工具类。

sqlSessionFactoryBuilder :获取SqlSessionFactory 工厂对象的功能类。

SqlSessionFactory :获取SqlISession构建者对象的工厂接口。指定事务的提交方式。

SqlSession :构建者对象接口、执行SQL、管理事务、接口代理。

三.MyBatis 映射配置文件

3.1 映射配置文件介绍

img

3.2 查询功能

标签:配置文件,基础,sqlSession,Student,sid,Mybatis,Integer,public
From: https://www.cnblogs.com/sql-bk/p/16927436.html

相关文章

  • 2022-2023-1 20221306《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于那个班级: https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求: https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标:学习......
  • 二、Mybatis(进阶)
    一.接口代理方式实现Dao1.1代理开发方式介绍​ 采用Mybatis的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流。Mapper接口开发方法只需要程序员编......
  • HTML重学--基础
    <html>与</html>之间的文本描述网页<body>与</body>之间的文本是可见的页面内容<h1>与</h1>之间的文本被显示为标题<p>与</p>之间的文本被显示为段落<!......
  • Python基础(三)
    Python基础(三)正则表达式import re#match 从开头位置匹配,失败返回NULLresult = re.match("^[a-z0-9]*@(sina|qq|126|136)\.com$","[email protected]")print("true","matc......
  • 2022-2023-1 20221322《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第十三周作......
  • 20221304 《计算机基础与程序设计》第十三周学习总结
    2022-2023-120221304《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作......
  • Linux基础第二章:文件压缩归档及文本编辑之神vi编辑器
    一、文件压缩及归档1、文件压缩2、归档3、解压 二、文本编辑之神vi编辑器1、vi介绍2、vi的三种模式3、vi的保存与退出(重点)4、vi使用技巧①命令模式下②末行模式......
  • Orleans基础知识以及使用示例
    Orleans简介Orleans是一个与ABP齐名,支持有状态云生应用/服务水平伸缩的基于VirtualActor模型的.NET分布式应用框架。 Actor模型简单来讲:Actor模型=状态+行为......
  • RISC-V RV32I 基础指令集
       转载自https://www.cnblogs.com/mikewolf2002/p/11196680.htmlRV32I是32位基础整数指令集,它支持32位寻址空间,支持字节地址访问,仅支持小端格式(little-endian......
  • 14基础元器件-隔离放大器
    一、初步认识1、定义隔离放大器是一种特殊的测量放大电路,其输入、输出和电源电路之间没有直接电路耦合,即信号在传输过程中没有公共的接地端。输入电路和放大器输出之间......