Mybatis-1-概述、快速入门

# 内容

1.框架

2.Mybatis的概述

3.Mybatis快速入门

 

## 框架
    1. 什么是框架?
        * 概念:它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
        * 使用框架的好处:框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
    2. 三层架构:
        * 表现层:是用于展示数据的。包括Controller控制器,Model模型,View视图;
        * 业务层:是处理业务需求;
        * 持久层:是和数据库交互的;
    3. 持久层技术解决方案
        1.JDBC技术:
            Connection —— PreparedStatement —— ResultSet
        2.Spring的JdbcTemplate:Spring中对jdbc的简单封装
        3.Apache的DBUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
        注:以上这些都不是框架,JDBC是规范,而Spring的JdbcTemplate和Apache的DBUtils都只是工具类
    4. 分层开发下的常见的框架
        * 解决数据的持久化      Mybatis、hibernate(封装程度更高,但目前在国内流行度下降太多)、Spring Data(一种趋势)
        * 解决web层的MVC        spring MVC、Struts(现在一般不用)、Struts2
        * 解决技术整合            spring


## Mybatis的概述
    1. 概念:
        * mybatis是一个持久层框架,用java编写的,内部封装了JDBC,使开发者只需要关注sql语句本身而不需关注加载驱动、创建连接、创建会话、释放资源等过程。
        * Mybatis通过xml或注解的方式将要执行的各种Statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终的sql语句,最终由mybatis框架执行sql并将结果映射为java对象并返回。
        * 采用ORM思想解决实体和数据库映射的问题,对jdbc进行了封装,屏蔽jdbc api底层访细节,是我们不用与jdbc api打交道就可以实现数据库的持久化操作。

    2. 优点:
        * 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注加载驱动,创建连接、创建会话、释放资源等繁杂过程
        * 它使用了ORM(Object Relational Mapping对象关系映射)思想实现了结果集的封装。

    3. ORM:Object Relational Mappging 对象关系映射
        即:把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
            user            User
            id                userId
            user_name        userName

    4. 传统JDBC存在的问题:
        * 创建连接、创建会话、释放资源等过程造成系统资源的浪费从而影响系统性能,使用数据库连接池可以解决该问题;
        * Sql语句存在硬编码,代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码;
        * 使用preparedStatement向占位符传递参数存在硬编码,因为where语句存在不确定性,修改sql还要修改代码,系统不易维护;
        * 对结果集解析存在硬编码(查询列名),如果将数据库结果集封装成pojo对象解析比较方便;
        
    5. Mybatis的两个配置文件的约束:config和mapper
      * config的约束

<?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">


      * mapper的约束

<?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">



     5. Mybatis的基本构成
        * SqlSessionFactoryBuilder(构造器):
            * 根据配置信息或者代码生成SqlSessionFactory(XML配置和代码两种方式)
            * 生命周期仅在构建SqlSessionFactory的方法内
        * SqlSessionFactory(工厂接口):
            * 依靠工厂来生成SqlSession
            * 生命周期在MyBatis应用中的整个生命周期
            * 创建SqlsessionFactory是采用单例模式,使得每个数据库只对应一个SqlsessionFactory
        * SqlSession(会话):
            * 是一个接口,既可以发送SQL去执行并放回结果,也可以获取Mapper
            * 生命周期是请求数据库处理事务的过程中
            * 它是线程不安全的对象,使用时应该注意隔离级别、数据库锁等高级特性,应该及时关闭它,它长期存在就会使数据库连接池的活动资源减少。
            * 可以通过finally语句保证正确关闭SqlSession
        * SQL Mapper:
            * 由Java接口和XML文件(或者注解)构成,需要给出对应的SQL和映射规则。负责发送SQL去执行,并返回结构
            * 生命周期在SqlSession事务方法之内


## Mybatis快速入门
    1. 创建maven工程
    2. 添加Mybatis3.4.5的坐标(pom.xml文件中)
    3. 编写实体类(User类)
    4. 编写持久层接口UserDao(也可写为UserMapper)
          * 在Mybatis中它把持久层的操作接口名称和映射文件都叫做:Mapper,即IUserDao 和 IUserMapper是一样的
    5. 编写持久层接口映射文件UserDao.xml(内容见后面)
          * 创建位置:必须和持久层接口在相同的包中
          * 名称:必须以持久层接口命名文件名,拓展名为xml    
          * 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
          * 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
          * 映射配置文件中的select标签中resultType属性告知mybatis要封装到哪个实体类中(写入实体类的全限定类名)
          * 若在持久层接口中添加注解,则不需要xml文件:
              把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
              同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
    6. 编写SqlMapConfig.xml配置文件(内容见后面)
          * 配置环境
              * 配置事务的类型
              * 配置连接数据库
          * 配置映射
    7. 编写测试类(内容见后面)
          * 第一步:读取配置文件
          * 第二步:创建SqlSessionFactory工厂
          * 第三步:创建SqlSession
          * 第四步:创建Dao接口的代理对象
          * 第五步:执行dao中的方法
          * 第六步:释放资源

    * UserDao.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 namespace="com.lyp.maven.dao.UserDao">
             <!-- 配置查询所有操作 -->
             <select id="findAll" resultType="com.lyp.maven.domain.User">
                 select * from user
             </select>
         </mapper>


    * 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">
          
          <configuration>
              <!-- 配置mybatis的环境 -->
              <environments default="mysql">
                  <!-- 配置mysql的环境 -->
                  <environment id="mysql">
                      <transactionManager type="JDBC"></transactionManager>
                      <!-- 配置连接数据库的信息 -->
                      <dataSource type="POOLED">
                          <property name="driver" value="com.mysql.jdbc.Driver"/>
                          <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                          <property name="username" value="root"/>
                          <property name="password" value="12580"/>
                      </dataSource>
                  </environment>
              </environments>
              
              <!-- 配置映射 -->
              <mappers>
                  <mapper resource="com/lyp/maven/dao/UserDao.xml" />
              </mappers>
          </configuration>

 

* 测试类

public class MybatisTest {
    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.使用工厂创建dao对象
        IUserDao userDao = new UserDaoImpl(factory);
        //4.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //5.释放资源
        in.close();
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值