Mybatis框架

轻量级框架

EJB(Enterprise JavaBean)

  • EJB容器为EJB组件提供一个运行环境,并对组件提供分布式处理、事务处理与服务支持

EJB的缺陷

  • 编辑、编译、调试周期长
  • 编码冗长、繁琐
  • 必须编写数据传输对象(DTO)

Mybatis

对jdbc的封装:1.连接封装 2.SQL语句的封装(Mybatis没有封装) mybiatis为半自动化,需要自已写SQL语句,需要自己定义映射。增加了程序员的一些操作,但带来了设计上的灵活,并且也支持hibernate的一些特性,如延迟加载,缓存,映射等

Mybatis组成

  • 核心对象:SqlSessionFactory SqlSession
  • 配置文件:mybatis.cfg.xml 相当于hibernate的hibernate.cfg.xml
  • 多个类配置文件:user.xml相当于hibernate的映射类文件 支持注解配置

ORM(Object Relationship Database Mapper)对象关系型数据库映射

  • 类 对应 表
  • 属性 对应 列
  • 对象 对应 数据行

满足三项则为ORM映射型框架

Mybatis中当Map作为参数传值时,不能和其他类型参数一起

类与类的关系

  • 继承
  • 实现
  • 关联:拥有与被拥有
  • 聚合:部分可以脱离整体而单独存在
  • 组合:部分不可以单独存在
  • 依赖:使用与被使用

返回类型resultMap

在一对一关系中,返回类型resultMap中,需要使用association,值得注意的是在映射关系时,要对应查询数据库结果的列

在一对多关系中,返回类型resultMap中,需要使用collection,如果接口中并未指定参数别名,那么默认就是list

多对多关系 —— 在一对多、一对一关系中可能有变化的表都可以建立中间表

继承关系中,返回类型resultMap中,需要使用discrimination描述型自断

当查询条件需要动态生成时,需要使用动态SQL

<select id="dynaFindUser" resultMap="user">
    select * from t_user where 1=1 
    <if test="id != 0">
        and u_id > #{id}
    </if>
    <if test="userName != null and userName != ''">
        and u_userName like '%${userName}%'
    </if> 
</select>

几种常用的动态SQL语句

  • where
  • if
  • sql
  • set if
  • trim if
  • choose when:等同于java中的Switch
  • foreach
  • include 与sql一起使用

Mybatis缓存

  • 缓存对象
  • 缓存SQL查询语句与对象集合的Map键值对

缓存级别

  • 一级缓存(事务级缓存、session缓存) 由session提供 跟随session的生命周期,在同一个事务级缓存中,每个持久化类对象都是唯一的
  • 二级缓存(应用级缓存)由session工厂提供 应用程序开启,工厂就开启,生命周期跟随工厂,也就是应用的生命周期,同一个工厂创建的缓存,所有创建的session共享这个缓存
  • 分布式(集群)缓存 分布式环境下,缓存被同一个或多个机器上的多个进程共享,缓存中的数据复制到集群环境中每个进程节点。

在配置文件Mybatis.cfg.xml中通过settings开启缓存机制

session如果不关闭,那么一级缓存就不会关闭,如果关闭了,数据就会推送到session工厂里。一级缓存关闭后,二级缓存才会生效

持久层框架查找顺序

  • session
  • session工厂
  • 数据库

但是一般是使用第三方缓存,Spring+EHCache

缓存里可以存放的数据

  • 数据量较小
  • 数据变化较少
  • 数据的并发访问较少

缓存中一般存放的是对象

注解

使用mybatis注解开发,可以省去类配置文件,简洁方便。但是比较复杂的SQL和动态SQL还是建议书写类配置文件。

<!-- 定义接口,在接口方法中直接书写SQL -->
public interface IUserDao {
@Insert("insert into t_user(userName,classId)values(#{userName},#{classId})")
public void add(UserBean bean) throws Exception;
@Delete("delete from t_user where id=#{id}")
public void del(int id) throws Exception;

 

posted @ 2016-07-19 23:24  夜如何其  阅读(387)  评论(0编辑  收藏  举报