zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    C连载5-函数与return拾贝
    Android连载15-复习以往内容(一)
    Spring security OAuth2.0认证授权学习第四天(SpringBoot集成)
    Spring security OAuth2.0认证授权学习第三天(认证流程)
    Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
    Spring security OAuth2.0认证授权学习第二天(基础概念-授权的数据模型)
    Spring security OAuth2.0认证授权学习第一天(基础概念-认证授权会话)
    JVM学习第三天(JVM的执行子系统)之类加载机制补充
    FastJSON解析JSON的时候保证深堆的顺序
    JVM学习第三天(JVM的执行子系统)之类加载机制
  • 原文地址:https://www.cnblogs.com/yeruheqi/p/5686684.html
Copyright © 2011-2022 走看看