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知识库 -> 后悔没有早学的MyBatis(1) -> 正文阅读

[Java知识库]后悔没有早学的MyBatis(1)

一、简介

1.1 什么是MyBatis

???????MyBatis是一个持久层框架,既然和持久层有关那就可以简单理解成和数据库有关,既然是框架那么就肯定是为了简化数据库有关的操作。由于传统的JDBC代码处理数据库有关的代码太复杂,所以出现了MyBatis来快速处理数据库。

1.2 MyBatis的特点

  • 支持定制化SQL、存储过程、高级映射
  • 省略了手动编写JDBC代码和手动设置参数、获取结果集
  • 可以使用简单的XML、注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录
  • SQL语句和代码分离,SQL写在xml中便于统一管理和优化
  • MyBatis不会对应用程序或数据库的现有设计强加任何影响

二、入门

2.1 搭建环境

  • 创建一个MySQL数据库
  • 创建一个Maven项目并导入相关的jar包。因为是通过Maven创建项目,项目会自带一个名为 pom.xml 的文件,在其中加入需要的依赖即可,IDEA会根据依赖自动下载对于的jar包。
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
    
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
</dependencies>

???????其中junit用于单元测试; mysql、org.mybatis含有mybatis相关的东西

???????除此之外,还需要pom.xml 中添加过滤信息,因为Maven项目编译之后会生成一个target文件夹存放各种编译后的文件,而MyBatis的关键就是使用各种XML配置文件,如果不进行一个过滤设置的话这些文件就不会自动放入到target文件夹中,从而会因为文件缺失而报错。

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
</build>

2.2 编写MyBatis核心配置文件

???????在目录src->main->resources中创建一个XML文件作为MyBatis的核心配置文件(命名随意)
在这里插入图片描述
???????这个配置文件的作用是填写一些环境信息,比如连接数据库所必须的url、用户名、密码等等信息。
除此之外还以有个非常重要的东西就是注册映射,由于使用MyBatis处理数据库都是通过mapper实现的,所以每创建一个mapper.xml都必须在这个核心配置文件中进行注册,这样好让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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/数据库名?useSSL=false"/>
                <property name="username" value="用户名"/>
                <property name="password" value="z密码"/>
            </dataSource>
        </environment>
    </environments>
    <!--每个Mapper.xml都需要在mybatis核心配置文件中注册 -->
    <mappers>
        <mapper resource="dao/UserMapper.xml"/>
    </mappers>
</configuration>

2.3 写代码

  • 实体类:既然是和数据库进行交互,那么就要有实体类和数据库中的每个表一一对应,每个属性的类型和名称要和数据库表中的一样,否则可能无法匹配上。
package entitl;

public class User {
    private String id;
    private String username;
    private String password;

    public User() {}
    public String getId() { return this.id; }
    public void setId(String id) { this.id = id; }
    public String getUsername() { return this.username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return this.password; }
    public void setPassword(String password) { this.password = password; }
    public String toString() {
        return "User [id=" + this.id + ", username=" + this.username + ", password=" + this.password + "]\n";
    }
}

  • MyBatis工具类:用来连接数据库、创建与数据库进行交互的SqlSession类的实体对象
    MyBatis中有三个比较重要的类:
类名作用
SqlSessionFactoryBuilder根据MyBatis核心配置文件中的环境信息创建SqlSessionFactory实体对象,只要创建完SqlSessionFactory对象之后就没有用了
SqlSessionFactory从名字可以看出这是一个工厂类,是专门用来创建SqlSession 实体对象的。一旦被创建就应该在应用的运行期间一直存在
SqlSession提供了在数据库执行 SQL 命令所需的所有方法,用于执行数据库相关的操作
package utils;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory ;

    //获取SqlSessionFactory对象
    static {
        try {
            String resource = "mybatis-config.xml";     //MyBatis的核心配置文件名
            InputStream inputStream = Resources.getResourceAsStream(resource);  //读取配置文件中的信息
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  //创建SqlSessionFactory对象
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //创建SqlSeesion对象
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession() ;
    }
}

  • Mapper接口类:指出想要实现的方法,只需要构造出方法名即可
package dao;

import entitl.User;
import java.util.List;

public interface UserDao {
    List<User> getAllUser();
}

  • Mapper.xml配置文件:通过配置文件将Mapper接口类和MyBatis联系起来,在该配置文件中写SQL语句即可,从而将SQL和代码分离。之后MyBatis就会根据这个配置文件进行相应的操作。
<?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="dao.UserDao">
    <select id="getAllUser" resultType="entitl.User">
        select * from T_USER		<!--在select元素中间写需要执行的SQL语句 -->
    </select>
</mapper>

其中有几个重要的属性:

属性名作用
namespace要绑定的接口类
id执行的方法名
resultType该方法的返回类型

??????? 需要再次强调的是,写完这个配置文件后一定要在MyBatis的核心配置文件中进行映射注册,在2.2中已经有所说明。如果不做这一步的话会报错:

org.apache.ibatis.binding.BindingException: Type interface XXXX is not known to the MapperRegistry.
  • 测试类:用于单元测试
    ???????单元测试用到了junit,通过@Test注解即可快速运行测试程序,在IDEA中会在类名、方法名左侧出现运行的图标,点击后便可直接运行相应部分的代码,非常方便,就不需要笨拙地再创建一个Main函数来运行代码。
    在这里插入图片描述
package dao;

import entitl.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils;
import java.util.List;

public class UserDaoTest {
	//通过注解调用junit的单元测试功能
    @Test
    public void tset() {
        SqlSession sqlSession = MybatisUtils.getSqlSession() ;
        try {
            UserDao userDao = sqlSession.getMapper(UserDao.class) ;	//通过mapper执行
            List<User> users = userDao.getAllUser() ;
            for(User user : users) {
                System.out.println(user) ;
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            sqlSession.close();		//使用完数据库要关闭
        }
    }
}

???????在测试的时候可以看出实际使用的效果和以往没什么区别,都是先创建一个Dao层对象,然后调用其中的方法,唯一的区别就是:
???????以往手动写JDBC的时候在Dao层都是需要先写一个接口,然后再实现对应的实现类,在使用的时候根据这个实现类创建对象。
???????而在MyBatis里我自己理解的是,只需要在配置文件中写好具体的SQL语句就可以了,剩下的代码MyBatis都帮我写好了,通过一个映射把这两部分合并在一起,最后就可以创建出想要的实例对象了,从而省去了麻烦的写JDBC代码的过程。

三、总结

???????在第二大点中的大部分代码都不是我自己硬拼起来的,而是根据MyBatis官方文档一步一步学习,模仿着例子写出来的。这也是我第一次通过官方文档学习一门新技术,确实很好用,如果能找到一些视频讲解的话,两个一起看效率会非常高,极力推荐这种学习方式!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 14:57:12  更:2021-08-20 14:59:08 
 
开发: 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/23 9:56:54-

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