JavaWeb框架 - Mybatis01

Mybatis框架概述和入门案例

  1. 框架的概述:
    • 什么是框架:
      • 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
      • 简而言之,框架其实就是某种应用的半成品,就是一组组件,是软件开发系统中的一套解决方案,使用不同的方案来解决不同的问题。
    • 框架要解决的问题:
      • 框架要解决的最重要的问题就是:技术整合的问题,应用自身的设计和具体的实现技术解耦。软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。
    • 三层架构:表现层:是用于展示数据的 业务层:是处理业务需求 持久层:是和数据库交互的(为什么要使用三层架构:主要的原因就是为了实现工程中的高内聚、低耦合,将问题进行划分,从而便于控制和延展。)
    • 持久层技术的解决方案:
      • JDBC:存在的问题是:1、频繁的数据库连接和释放造成资源浪费,解决方式就是使用数据库连接池技术。2、就是sql语句中存在着硬编码,而实际开发中SQL语句的变动是很常见的,而这样就会造成Java代码的变动,降低程序的维护性。
      • 使用Spring的JdbcTemplate(Spring中对jdbc的简单封装)或者是Apache的DBUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装,这样虽然是增加了程序的开发的效率但是还是会出现上面的问题。
      • 使用框架:使用配置文件或者是注解来进行配置,降低程序的耦合性。常用的持久层框架有:MyBatis 和 Hibernate
  2. Mybatis框架的概述:
    • 什么是Mybatis框架:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。(来自百度百科)
    • Mybatis框架的优缺点和适用的场合:
      • 优点:.
        • 与JDBC相比,减少了50%以上的代码量。
        • MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
        • 提供XML标签,支持编写动态SQL语句。
        • 提供映射标签,支持对象与数据库的ORM字段关系映射。
      • 缺点:
        • SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
      • 使用的场合:
        • 对性能的要求较高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
  3. Mybatis框架的入门:
    • 从官网中下载Mybatis框架的jar包。

    • 搭建Maven开发环境:

      • 首先是创建一个Maven工程 导入相关的jar包。

      • 编写实体类User 和 持久层接口UserDao

      • 进行Mybatis配置:

        • 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的主配置文件
              Mybatis中使用的约束类型是DTD 而不是scame类型的
           -->
          <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_mybatis"/>
                          <property name="username" value="root"/>
                          <property name="password" value="root"/>
                      </dataSource>
                  </environment>
              </environments>
          
              <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
              <mappers>
                  <mapper resource="com/itheima/dao/UserDao.xml"/>
              </mappers>
          </configuration>
          
        • 创建配置映射文件: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.itheima.dao.UserDao">
              <!--配置查询所有 id 是方法的名称 不能够随便写  sql 语句的分号 一般不写-->
          		<!--配置查询所有-->
          		<select id="findAll" resultType="com.itheima.domain.User">
          	        select * from user
          	    </select>
          </mapper>
          
      • 配置信息:(现在就是了解一下 以后再详细的说)

        • SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

        • xxxMapper.xml/xxxDao.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

        • 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

        • 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

        • mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

        • Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

        • Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

        • Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    • 进行搭建环境的测试 (在tes/java 下创建一个测试类MybatisTest)

           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接口的代理对象
              UserDao userDao = session.getMapper(UserDao.class);
      
              //5.使用代理对象执行方法
              List<User> users = userDao.findAll();
              for(User user : users){
                  System.out.println(user);
              }
              //6.释放资源
              session.close();
              in.close();
          }
      }
      
    • 显示结果Mybatis使用的测试

    • 不使用UserDao.xml文件进行配置 而是使用注解的形式来进行配置:方式非常的简单

      • 在UserDao接口中 findAll 方法上使用@Select 注解
  4. 注意事项
    • 用户持久层接口编写的注意事项:
      • Mybatis中将持久层的接口名称和映射文件也叫做 Mapper 以前都是叫的是Dao,所以UserDao和UserMapper是一样的
      • 在IDEA创建directory 时不能直接创建 com.xxx.xxx 而是一级级的创建 这样创建出来的包是一级的,或者是使用com/xxx/xxx 这样的方式创建出来的是多级的
      • 遵循下面的要求在开发中就不用编写dao的实现类(实现类由Mybatis代为完成)
        • Mybatis映射配置文件的位置必须和dao接口的包结构相同。
        • 映射配置文件的mapper标签的namespace属性必须是dao接口的全类名 (全限定类名)
        • 映射配置文件的操作配置:id属性必须是dao接口的方法名
    • 映射配置文件注意事项:
      • mapper 标签中namespace属性 是必须的:是用于绑定Dao接口的,即面接口编程,想要找到要执行的SQL语句,属性是必须的。注解的属性就是要执行的SQL语句。
      • 在主配置文件SqlMapConfig.xml中,指定的是注解的位置 <mapper class="com.itheima.dao.IUSerDao"></mapper> 进行测试,同样是能执行
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上山打卤面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值