手把手从零开始学习入门mybatis(转载)

原文链接

简介

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

安装

要使用Mybatis只需要到官网下载Mybatis的Jar包,并复制到ClassPath下即可。如果您是使用Maven来构建Java项目,那只需要在其pom.xml文件中加入Mybatis的依赖关系即可。

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
         <version>3.3.0</version>
     </dependency>

连接数据库

在使用Mybatis之前,我们要先确保其可以正确连接到我们要使用的目标数据库。Mybatis连接数据库也是非常的简单,和JDBC类似,只需要在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>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
        <environment id="product">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
    </configuration>

Mybatis允许我们在同一个配置文件中指定多个数据库连接信息,实际工作中也是需要这样的。开发环境,我们需要一个用于开发的数据库;测试环境,我们需要一个用于系统测试的数据库;生产环境,我们需要一个保存真实数据的生产数据库。在Mybatis中,使用enviroments标签即可定义多个环境中需要使用的数据库连接信息,并使用default关键字指示出当前使用的环境信息。

数据库连接配置写好之后,我们就可以开始编写操作数据库的Java代码了。大家可以回想一下,使用JDBC是如何操作数据库的呢?熟悉Java开发模式的同学一定知道,我们需要在DAO层编写以下功能代码:

加载数据库驱动类 Class.forName(“com.mysql.jdbc.driver”);
获得数据库连接 DeriverManager.getConnection(url, username, password)
执行SQL语句
获取查询结果,进行封装
返回封装后的结果
其中前两步,通常我们会提取出来,封装在一个专门数据与数据库连接的类DBUtils中。为什么这样做呢?因为DAO层要做的只是后面三步的工作,至于如何连接数据库、连接哪个数据库,DAO层是不关心的。她需要的是一个能够与数据库交互,交执行SQL语句的对象。在使用JDBC时,就是Connection对象。那么在Mybatis中有没有这样一个对象呢?又是如何向DAO层提供这个对象的呢?

在正式开始编写Java代码之前,我们先了解一下Mybatis的相关基础知识。

答案是肯定的,在Mybatis中向DAO层提供的这个能够与数据库交互并执行SQL语句的对象叫做SqlSession。这个是Mybatis最核心的一个对象。SqlSession完全包含了面向数据库执行SQL命令所需的全部方法。

那么如何获得这个对象呢?分为三步。

通过配置文件获取数据库连接相关信息
通过配置信息创建SqlSessionFactory对象。一眼就可以看出这是一个工厂类,负责创建SqlSession对象实例
使用SqlSessionFactory创建SqlSession对象,打开一个数据库会话。
下面的代码展示了数据库连接实践。


    Reader reader;
    SqlSessionFactory sqlSessionFactory;
    try {
      //读取配置文件
        reader = Resources.getResourceAsReader("mybatis.xml");
    } catch (IOException e) {
    e.printStackTrace();
    }
    //创建SqlSessionFactory对象实例
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    //获得数据库会话对象实例
    SqlSession session = sqlSessionFactory.openSession();
    try {
        //数据库操作
        ……
    } finally {
        //关闭数据库会话
        session.close();
    }

范围和生命周期

这里顺带提一下上述代码中使用到的几个主要对象的范围和生命周期。

SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的范围是请求或方法范围。绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将 SqlSession 实例的引用放在任何类型的管理范围中,比如 Serlvet 架构中的 HttpSession。如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的范围中。换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis入门到精通的学习路径可以分为以下几个步骤: 1. 学习数据库基础知识:MyBatis是一个持久层框架,需要掌握数据库的基本知识和SQL语句的基本用法。 2. 学习MyBatis的基本概念和原理:了解MyBatis的架构和基本概念,包括SqlSessionFactory、SqlSession、Mapper等。 3. 学习MyBatis的配置文件:MyBatis的配置文件包括数据库连接信息、映射文件、插件等,需要了解如何正确地配置这些文件。 4. 学习MyBatis的映射文件:MyBatis的映射文件是将Java对象和数据库表进行映射的关键,需要了解映射文件的结构、标签和属性,以及如何编写SQL语句。 5. 学习MyBatis的API:MyBatis提供了丰富的API,包括SqlSessionFactory、SqlSession、Mapper等,需要了解它们的作用和用法,以及如何正确地使用它们进行数据库操作。 6. 学习MyBatis的高级特性:MyBatis还提供了一些高级特性,如缓存、动态SQL、插件等,需要了解它们的原理和用法,以便更好地使用MyBatis。 7. 实践项目经验:通过实践项目来巩固和应用所学的知识,掌握MyBatis的实际使用技巧,例如如何处理事务、如何优化SQL语句等。 8. 深入源码学习:深入学习MyBatis的源码,了解MyBatis的原理和实现细节,以便更好地使用和定制MyBatis。 总之,学习MyBatis需要掌握数据库的基本知识和SQL语句的基本用法,了解MyBatis的配置文件和映射文件,掌握MyBatis的API和高级特性,通过实践项目来巩固和应用所学的知识,深入学习MyBatis的源码,才能从入门到精通。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值