Mybatis学习总结(一) 介绍

来源:互联网 发布:win10单片机驱动程序 编辑:程序博客网 时间:2024/05/21 14:06
1.什么是Mybatis?
    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以
及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的
Java对象)映射成数据库中的记录。

2.Mybatis需要的包

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.6</version></dependency> <!-- 导入Mysql数据库链接jar包 -->            <dependency>                <groupId>mysql</groupId>                <artifactId>mysql-connector-java</artifactId>                <version>5.1.39</version>            </dependency>  

3. 获取 SqlSession

    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
    从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。

Reader reader = Resources.getResourceAsReader("mybatis.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);sqlSession = factory.openSession(true); // true 参数代表自动提交事务,否则需要手动管理事务,不然更改数据库的操作不能COMMIT


mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//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="jdbc:mysql://localhost:3306/db_nba?allowMultiQueries=true" /><!-- allowMultiQueries 允许一次性执行多个SQL,否则在一个映射文件中执行多个条SQL时会报格式错误 --><property name="username" value="root" /><property name="password" value="123456" /><property name="defaultAutoCommit" value="true"/> <!-- 配置事务自动提交,但是没有用 --></dataSource></environment></environments><mappers><mapper resource="resources/mybatis/PlayerMapper.xml" /></mappers></configuration>


4. Mybatis的缓存机制
    MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的SQL 映射文件中添加一行

<cache/>

MyBatis支持二级缓存:

一级缓存:基于porpetualCache的HashMap本地缓存,存储作用域为session,当session被close或者flush后会被清空。

二级缓存:基于porpetualCache的HashMap本地缓存,存储作用域为Mapper(文件域),可自定义存储源。

当一个作用域(session,Mapper)内进行了CUD操作后,作用域下所有select缓存将被update。

三种情况下不能使用一级缓存:

1.执行了session.clearCache()

2.执行了CUD操作

3.不是同一个session

4.当不是一个session时只要使用同一个mapper文件中的select,使用二级缓存。

关于缓存的其他知识点:

1.映射语句文件中的所有 select 语句将会被缓存。
2.映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
3.缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
4.根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
5.缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
6.缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。


参考文献:

http://www.yiibai.com/mybatis/

http://www.mybatis.org/mybatis-3/zh/index.html



原创粉丝点击