Mybatis(1)---框架概述,第一个Mybatis

一、框架概述

1.1 MyBatis

MyBatis相当于JDBC的增强版

1.2 软件开发常用架构

三层架构
界面层(视图层):接收用户的数据,显示请求的处理结果(html,jsp,servlet等)
业务逻辑层:接收界面层传递来的数据,检查数据,调用数据访问层获取数据
数据访问层(持久层):完成数据库的操作(增删改查)

三层对应的包:
界面层:controller包(servlet)
业务逻辑层:service包
数据访问层:dao包

三层类的交互

界面层->业务逻辑层->数据访问层->数据库

三层对应的处理框架

界面层—servlet—SpringMVC框架
业务逻辑层—service类—Spring框架
数据访问层—dao类—mybatis框架

1.3 框架是什么?

框架是一个舞台,也是一个模板(简历,保险单等)

模板中已经规定好了一些条款和内容,里面填自己的东西

框架中定义好了一些功能,可以加入项目中的功能,这些功能可以利用框架中写好的功能

框架类似于一个半成品的软件,这个软件里已经定义好了一些基本的功能,加入所需要的功能即可,这些基础功能是可复用,可升级的

1.4 框架的特点

1)框架一般不是全能的,不能做所有事情

2)框架只针对某个领域有效。比如mybatis只针对数据库操作

1.5 JDBC缺陷

代码多,效率低

重复代码多

需要实现Connection,Statement,ResultSet对象的创建和销毁

业务代码和数据库操作混合

1.6 mybatis概述

mybatis早期叫做ibatis,是sql映射框架

1)sql mapper:sql映射

可以把数据库表中的一行数据映射为一个Java对象
一行数据可以看作是一个Java对象,操作这个对象就相当于操作表的数据

2)data access object(DAO):数据访问,对数据库执行增删改查

1.7 mybatis的功能

1)提供了创建Connection,Statement和ResultSet的能力

2)提供了执行sql语句的能力

3)提供了循环sql,将sql语句的结果转换为Java对象(List集合)的能力

4)提供了关闭资源的能力

开发人员要提供sql语句-mybatis处理sql-开发人员得到List集合或java对象

1.8 总结

mybatis是一个sql映射框架,提供了数据库的操作能力,是增强的JDBC。使用mybatis让开发人员只写sql语句就可以了,不必关心Connection,Statement,ResultSet的创建,销毁和sql语句的执行

二、Mybatis使用步骤

2.1 创建第一个mybatis

步骤

(1)新建一个表并插入数据

CREATE TABLE `t_test` (
  `id` int NOT NULL,
  `name` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

表中数据:
在这里插入图片描述

(2)在pom.xml文件中加入Maven的Mybatis坐标,以及MySQL驱动的坐标

<!--加入mybatis依赖-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.1</version>
</dependency>
<!--加入MySQL驱动依赖-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.19</version>
</dependency>
</dependencies>

(3)创建实体类Test,用于保存表中的一行数据

//用于保存t_test表中一列数据的类
public class Test
{
    
    
    private Integer id;
    private String name;

    public Integer getId() {
    
    
        return id;
    }

    public String getName() {
    
    
        return name;
    }

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

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

    public String toString() {
    
    
        return "Test{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

(4)创建持久层的DAO接口,定义操作数据库的方法

import java.util.List;

//定义操作test表的接口
public interface TestDao
{
    
    
    //查询test表中所有数据的方法
    public List<Test> selectTests();
}

(5)创建Mybatis使用的配置文件,sql映射文件,用于写sql语句,一般一个表一个sql映射文件,这个文件的后缀名是.xml
这个文件写在DAO接口所在的目录中,文件的名称与接口保持一致

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    当前文件为sql映射文件
    可以在里面编写sql语句
-->
<!--
    1.指定约束文件
        mybatis-3-mapper.dtd是约束文件名称,扩展名是dtd的
    2.约束文件的作用
        限制,检查当前文件中出现的标签和属性是否满足mybatis规范
-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
    3.mapper:当前文件的根标签,是必须值
    4.namespace:命名空间的,是唯一值,可以自定义标签的字符串,要求使用dao的全限定名称
-->
<mapper namespace="HelloMybatis.TestDao">
    <!--
        5.当前文件中,可以使用特定的标签,表示数据库的特定操作
        <select>表示查询,里面放的是select语句
        <update>表示更新数据库的操作:写update语句
        <insert>表示插入操作,写insert语句
        <delete>表示删除,执行的是delete语句
    -->
    <!--
        select:表示查询操作
        id:要执行的sql语句的唯一标识,mybatis会使用这个id的值找到要执行的sql语句
        这个id可以自定义,但要求使用接口中的方法名称
        resultType:遍历sql语句执行后得到的ResultSet之后得到的Java对象的类型
        值写的是类型的全限定名称
    -->
    <select id="selectTests" resultType="HelloMybatis.Test">
        select * from t_test ORDER BY id;
    </select>
</mapper>

(6)创建mybatis的主配置文件,一个项目中只有一个,主配置文件提供了数据库中的连接信息和sql映射文件的位置信息

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    当前文件为mybatis的主配置文件
    主要定义了数据库的配置信息,sql映射文件的位置等
-->
<!--
    1.约束文件名称:mybatis-3-config.dtd
-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--
    2.configuration:根标签
-->
<configuration>
    <!--
        3.环境配置:数据库的连接信息
        default的值必须和某个environment的id相同,告诉mybatis要使用哪个数据库的信息
        即要访问哪个数据库
    -->
    <environments default="development">
        <!--
            4.environment:一个数据库信息的配置
            5.id:一个自定义的唯一值,用于表示环境的名称
        -->
        <environment id="development">
            <!--
                6.transactionManager:mybatis的事务类型
                type:JDBC(表示使用jdbc中Connection对象的commit,rollback做事务处理)
            -->
            <transactionManager type="JDBC"/>
            <!--
                7.dataSource:表示数据源,用于连接数据库的
                type:用于表示数据源的类型
                    POOLED:表示使用连接池的
            -->
            <dataSource type="POOLED">
                <!--
                    8.driver,url,username,password是固定的,不能自定义
                -->
                <!--数据库的驱动类名-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--连接数据库的url字符串-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=UTC&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"/>
                <!--访问数据库的用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="123456ac"/>
            </dataSource>
        </environment>
    </environments>
    <!--
        9.用于指定sql映射文件(sql mapper)的位置
    -->
    <mappers>
        <!--
            一个mapper标签指定一个文件的位置
            从类路径开始的路径信息:位于target/classes(类路径)之后的路径
        -->
        <mapper resource="HelloMybatis/TestDao.xml"/>
    </mappers>
</configuration>

(7)创建使用mybatis的类,通过mybatis去访问数据库

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.InputStream;
import java.util.List;

public class MyApp
{
    
    
    public static void main(String[] args) throws Exception
    {
    
    
        //访问mybatis读取t_test中的数据
        //1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes之后的)
        String config = "mybatis.xml";
        //2.读取这个config表示的文件
        InputStream in = Resources.getResourceAsStream(config);
        //3.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        //5.获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //6.指定要执行的sql语句的标识
        //sql映射文件中的namespace+"."+标签的id值
        String sqlId = "HelloMybatis.TestDao" + "." + "selectTests";
        //7.执行sql语句,通过sqlId找到语句
        List<Test> testList = sqlSession.selectList(sqlId);
        //8.输出结果
        testList.forEach(test -> System.out.println(test));
        //9.关闭sqlSession对象
        sqlSession.close();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/114456669