MyBatis----01----MyBatis简介&&MyBatis搭建

MyBatis----01

1. MyBatis简介

1.1 软件开发三层架构

在这里插入图片描述

     MyBatis作用于持久层,属于数据持久化框架。

1.2 什么是框架?

     简单来说框架可以理解为一个半成品项目,已经有人完成好了一部分功能,我们只需要在其基础上完成我们需要做的业务逻辑即可,将重复的代码抽取出来,让程序员把精力专注于业务逻辑之上。

1.3 常见的框架

     Java的世界中存在着无数的框架,每个框架都为了解决某一领域的问题而存在的。

  • 持久层框架:专注于解决持久化,例如:Hibernate|MyBatis|JPA规范
  • 表现成框架:专注于解决与用户交互,例如:struts2|SpringMVC
  • 全栈框架:能在各层都发会作用的框架,例如:Spring

     目前市面上流行的框架组合:SSM(Spring | SpringMVC | MyBatis),早年曾经流行SSH(Spring | Strusts2 | Hiberbate),SSH已经过时了。

1.4 MyBatis介绍

      MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  • iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
  • 当前,最新版本是MyBatis 3.5.5 ,其发布时间是2020年6月4日。

      特点:

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

1.5 MyBatis是一款半自动ORM框架

在这里插入图片描述

     ORM是能够完全面向对象操作数据库的框架,因为SQL语句完全由Hibernate负责生成,我们只需要负责面向对象的调用API操作数据库即可,不需要写SQL;
      MyBatis是半自动的ORM框架,因为SQL语句还是由开发人员手写,MyBatis负责封装结果到对象中,以及从对象中提取参数。

Hibernate与MyBatis:

     Hibernate缺点:

  • 运行效率低,内存占用高->功能强大
  • 因为Hibernate对于持久层的封装过于完整(甚至帮我们书写SQL)导致sql语句优化不容易进行,不适用于数据量大的大型项目

      MyBatis优点:

  • MyBatis灵活,因为SQL语句还是由我们负责书写,书写到XML中
  • SQL语句与程序分离,降低了耦合度,便于管理
  • 执行效率较高

2. MyBatis搭建

2.1 准备数据库

CREATE TABLE t_user(
	id INT PRIMARY KEY,
	NAME VARCHAR(255) NOT NULL,
	PASSWORD VARCHAR(255) NOT NULL
)

2.2 添加测试数据

INSERT INTO t_user VALUE
(1,'Tom','1234'),(2,'Jerry','1234'),
(3,'Jack','1234'),(4,'Rose','1234')

2.3 创建Maven工程

     引入依赖

    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

2.4 创建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>
    <!-- 环境配置的父元素,可以配置多套环境
            default属性:指定某一套配置为默认配置
     -->
    <environments default="development">
        <!-- 一个environment元素就是一套配置环境
                id:为当前配置起一个名字
         -->
        <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/mybatis?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="hanjuechen"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
    </mappers>
</configuration>

2.5 创建实体类映射表

public class User {

    private Integer id;
    private String name;
    private String password;

    public User() {
    }

    public User(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2.6 创建Mapper接口

public interface UserMapper {

    //查询所有用户
    List<User> findAll();

}

2.7 创建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">
<!-- 命名空间:指定为哪个mapper接口做配置 -->
<mapper namespace="com.leo.mapper.UserMapper">
    <!-- 接口方法配置
            xml元素决定了方法的性质
                select元素:查询
                insert元素:插入
                update元素:删除以及修改操作
            id属性:映射方法名
            resultType: 返回结果的类型,注意:属性名必须与列名相对应
            标签体:书写要执行的sql语句
     -->
    <select id="findAll" resultType="com.leo.domain.User">
    select * from t_user
  </select>
</mapper>

2.8 将xxxMapper.xml注册到主配置文件

     在mybatis-config.xml配置文件末尾注册:

    <mappers>
        <!-- 注册Mapper文件
                resource属性:指定Mapper文件路径
        -->
        <mapper resource="com/leo/mapper/UserMapper.xml"/>
    </mappers>

2.9 其他配置

     为了让src/main/java目录中的xml文件能够作为资源文件编译输出,在pom.xml中加入如下配置:

<build>
        <!-- 资源配置 -->
        <resources>
            <resource>
                <!-- 指定资源目录 -->
                <directory>src/main/resources</directory>
                <!-- 资源文件规则 -->
                <includes>
                    <!-- 所有文件都符合资源文件规则 -->
                    <include>**/*.*</include>
<!--                    <include>**/*.xml</include>-->
<!--                    <include>**/*.yml</include>-->
<!--                    <include>**/*.properties</include>-->
                </includes>
                <!-- 不需要gaojiguolv -->
                <filtering>false</filtering>
            </resource>
            <!-- 新加入规则 -->
            <resource>
                <!-- 将src/main/java 目录也定义为资源目录 -->
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <!-- 文件排除条件,排除Java文件 -->
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

2.10 代码测试

public class UserMapperTest {
    @Test
    public void testFindAll(){
    	//定义配置文件路径
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
        	//加载配置文件
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //根据配置文件创建SessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        //获得UserMapper接口的实现类
        UserMapper mapper = session.getMapper(UserMapper.class);
        //调用UserMapper方法,执行xml中定义的SQL语句
        List<User> list = mapper.findAll();
        //打印list: list.sout
        System.out.println(list);

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45245455/article/details/107962093