Mybatis学习(一)之入门

一、什么是框架?

这是一个很抽象的概念
在这里插入图片描述
框架是一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度(好处)。
它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
换个角度说:开发工程师建立在框架的基础之上完成开发者完成部分加框架自身完成部分组成一个完整的产品。
在这里插入图片描述

二、三层架构和ssm框架的对应关系

不同的框架解决的是不同的问题:
在这里插入图片描述

三、Jdbc操作数据库的问题分析

持久层技术解决方案:

  • (最原始的)Jdbc技术:
     Connection
     PreparedStatement
     ResultSet
  • spring中的JdbcTemplate:
     Spring对Jdbc的简单封装
  • Apache的DBUtils:
     它和spring中的JdbcTemplate很像,也是对Jdbc的简单封装

以上这些都不是框架
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils都只是工具类

四、mybatis的概述

详细讲解如下图
在这里插入图片描述
简单来说:
  mybatis是一个持久层框架,用java编写的。
  它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程。
  它使用了ORM思想实现了结果集的封装。
ORM:
  Object Relational Mappging 对象关系映射
即:
  就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
  user     User
  id       userId
  user_name  userName
上面的不是我们想要的,我们需要做到
    实体类中的属性和数据库表的字段名称保持一致。(如下)
      user     User
      id       id
      user_name  user_name

五、mybatis的入门

表的创建与数据的插入
在这里插入图片描述

mybatis的环境搭建

第一步:创建maven工程 ——> pom.xml导入依赖坐标
在这里插入图片描述
第二步:创建实体类和dao的接口
**User类:**成员变量命名、类型和表保持一致,并添加get、set和toString()方法
在这里插入图片描述
IUserDao接口:
在这里插入图片描述
第三步:创建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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/itheima/dao/IUserDao.xml"/>
    </mappers>
</configuration>

具体详解:
environments下面可以配置多个environment元素节点,而每个environment节点我们可以配置两个东西,一个是事务管理器配置transactionManager,另一个是数据源配置dataSource
environments中的default属性
用于指定当前情况下使用哪个数据库配置,也就是使用哪个environment节点的配置,default的值就是配置的environment标签元素的id值
加载流程:
先获取environments的default属性的值,然后遍历所有environment节点,获取其id的值,接着判断environment节点的id值default设置的值是否相同,如果是,则使用当前元素进行数据库连接的初始化。

第四步:创建映射配置文件

IUserDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 为Dao的全限定类名-->
<mapper namespace="com.itheima.dao.IUserDao">
    <!--配置查询所有-->
    <!--
        id为方法名,与Dao层接口方法相对应,所以不能乱写
        resultType指定得到的结果集要封装到哪个实体类中,然后将对象存到List里面去,并返回该List
        所以值为实体类的全限定类名
    -->
    <select id="findAll" resultType="com.itheima.domain.User">
        select * from user
    </select>
</mapper>
环境搭建的注意事项:
  • 第一个: 创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
    在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
    所以:IUserDao 和 IUserMapper是一样的
  • 第二个: 在idea中创建目录的时候,它和包是不一样的
    包 (Package) 在创建时:top.zoick.dao它是三级结构
    目录 (Directory) 在创建时:top.zoick.dao是一级目录
  • 第三个: mybatis的映射配置文件位置必须和dao接口的包结构相同
  • 第四个: 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  • 第五个: 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。

mybatis的入门案例

步骤:
   第一步: 读取配置文件
   第二步: 创建SqlSessionFactory工厂
   第三步: 创建SqlSession
   第四步: 创建Dao接口的代理对象
   第五步: 执行dao中的方法
   第六步: 释放资源
在这里插入图片描述
注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中
配置的方式:指定实体类的全限定类名

mybatis基于注解的入门案例:

把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
明确:
我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
不管使用XML还是注解配置。

但是Mybatis它是支持写dao实现类的。

六、自定义Mybatis的分析__执行查询所有的分析

mybatis在使用代理dao的方式实现增删改查时做什么事呢?
只有两件事:
第一:创建代理对象
第二:在代理对象中调用selectList

mybatis入门案例中的设计模式分析

在这里插入图片描述
自定义mybatis能通过入门案例看到类
class    Resources  使用类加载器读取配置文件的类
class    SqlSessionFactoryBuilder  用于创建一个SqlsessionFactory对象
interface   SqlSessionFactory  用于打开一个新的SqlSession
interface   SqlSession  自定义MYbatis中和数据库交互的核心类

对配置文件和创建代理对象(getMapper())进行分析

在这里插入图片描述

自定义mybatis开发流程图:

在这里插入图片描述
在这里插入图片描述
Project结构:
在这里插入图片描述
1.读取配置文件用io包里的Resources
2.读出所需要的信息交给SqlSessionFactoryBuilder构建者
3.构建者使用工具类XMLConfigBuilder构建出DefaultSqlsessionFactory工厂对象,xml读取的信息保存在Configuration里
4.工厂里的openSession提供了Sqlsession方法
5.再在SqlSession里实现创建代理对象和查询所有的功能

测试类

public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args) throws Exception{
        //1、读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2、创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3、使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4、使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5、使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users){
            System.out.println(user);
        }
        //6、释放资源
        session.close();
        in.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值