MyBatis笔记

MyBatis笔记

开发模式

  • 纯jsp开发 视图和逻辑混全在一起了

  • jsp+javabean jsp视图技术显示内容 javabean 封装了逻辑

  • MVC 设计模式

    M: model 业务层 专注于业务逻辑

    V: view 视图层 展示数据: jsp freemarker Thymeleaf (不存在了…)

    C: controller 控制层 接收用户请求 ,调用业务逻辑,根据业务逻辑返回的结果,跳转到相应的视图

    Dao: 数据访问层 数据持久层

持久层

jdbc: java database connection

查询用户:

  1. 加载驱动 Class.forName(“com.mysql.cj.jdbc.Driver”)
  2. 获取连接 Connection conn=DriverManager.getConnection(url,username,password)
  3. 定义 select 查询语句
  4. 创建语句对象 Statement stat=conn.createStatement(sql)
  5. 执行查询 ResultSet rs=stat.executeQuery()
  6. 将ResultSet转换成List集合
  7. 释放资源(关闭连接 关闭结果集…)

Spring : JdbcTemplate

ssh: spring struts1© hibernate

ORM: object relation mapping 对象关系 映射

hibernate 是完全的ORM持久层技术

设计数据模型:

Student类: id name age …

映射文件: Student.xml

Student类对应数据库中哪个表

属性id------------对应数据库中字段名

依次类推…

创建Student类对象,直接使用hibernate的api save(student)

hql语句: hibernate query language

sql: 结构化查询语言

缺点:

  1. 如果应用中用到了大量的数据库本身的函数
  2. 有大量的数据统计

ssi: ibatis

mybatis

半自动的ORM框架

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

高级映射(重点)

特点:

  • 自已编写sql

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

  • sql实现

    1. xml映射 官方推荐的

      html hyper text markup language 超文本标记语言

      xml : 可扩展的标记语语言 描述数据 soa

      <student idcard="4102000">
      <name>张三</name>
      <age>20</age>
      </student>
      

      dtd : 文档验证格式

      schema 验证的

    2. 注解 的形式 如@Select(“select …”) 简单 (了解)

解析dtd

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

ELEMENT 代表的是元素

configuration 元素名称 () 代表的是configuration元素下允许出现的子元素有哪些

()里的元素出现的顺序不允许打乱 ,元素定义的顺序必须安排声明的顺序来定义

元素限定符:

  • ? 代表的是前面的元素最多可以出现1次
  • * 代表前面的元素可以出现任意次
  • + 代表前面的元素最少出现1次
<!ELEMENT properties (property*)>
<!ATTLIST properties
resource CDATA #IMPLIED
url CDATA #IMPLIED
>

properties元素下可以出现任意 个property子元素

ATTLIST 属性列表 CDATA character data 字符数据

映射器

映射器是一些绑定映射语句的接口

作用域对象

  • SqlSession
    1. 执行crud操作的
    2. SqlSession 的实例不是线程安全的,因此是不能被共享的
    3. 它是轻量级的 它的获取和关闭 不耗费资源 随时打开和关闭
    4. 它的作用域 方法作用域
    5. 它是由SqlSessionFactory 类创建的
  • SqlSessionFactory

    1. 它是用来创建SqlSession 的
    2. 它是重量级的,整个应用中只存在一个实例 ,不要频繁的创建和销毁
    3. 一个SqlSessionFactory 实例对应一个数据库
    4. 最佳应用是单例模式
  • SqlSessionFactoryBuilder
    1. 使用创建者模式 来创建SqlSessionFactory 的
    2. 创建好SqlSessionFactory实例,就可以销毁

命名 空间

命名解析:

  • 全限定名 com.by.mapper.UserMapper.queryById
  • 短名称 queryById 要求这个名称全局唯一

单例模式

在整个应用中,只有一个实例。

满足的条件:

  • 构造方法私有化 为了避免在外部通过new创建对象
  • 提供一个静态方法,用于返回本类的一个实例
  • 在类的内部,声明一个本类的实例,如果实现为null,则创建,否则直接返回

实现方式:

  • 饱汉式

    类的实例只有在调用时才会创建

  • 饿汉式

    在类加载的时候直接创建

核心配置

属性配置

${属性名} 引用对应变量的值

注意:

  • properties 的属性resource可以指定properties格式 的配置文件
  • property子元素也可以定义属性
  • 上面两种方式 属性定义会合并 ,如果存在冲突,properties配置文件中指定的配置优先级高

默认值(了解):

  • 启用

      <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
    
  • 使用 ${属性名:默认值} :后面的是默认值 如下默认为admin

    <property name="username" value="${username:admin}"/>  
    

修改默认分隔符:

<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="@"/> <!-- 修改默认值的分隔符 -->

settings

全局配置,输出sql的配置

 <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
 </settings>

别名(掌握)

    <!--类型别名-->
    <typeAliases>
        <!--一个一个的指定 bean的别名 一般是设置为类的首字母小写
        <typeAlias type="com.by.bean.User" alias="user"/>-->

        <!--统一解决方案 指定包名 该包下的类 默认生成别名  别名为类的首字母小写  如下:说明com.by.bean包下所有的类生成别名-->
        <package name="com.by.bean"/>
    </typeAliases>

内置别名:

  • java中基本数据类别的别名 前面加上下划线 如 byte 的别名是_byte
  • java中基本类型的包装类 别名是类名首字母小写 如 Long 的别名是long
  • Map的别名是map
  • 其它支持的类型 别名 全部是小写…

类型处理器

设置数据库表时,设计一个逻辑删除字段 isdel 1 代表删除 0代表未删除

bit: 0 1

回想:jdbc中的语句对象有几种:

  • Statement
  • PreparedStatement 预编译
  • CallableStatement 用于调用存储过程的

类型处理器注册:

  • xml配置

    <typeHandler handler="com.by.handler.BitTypeHandler" javaType="java.lang.Boolean" jdbcType="BIT" />
    
  • 注解

    1. 在类型处理器的类上增加一个 @MappedTypes 注解指定与其关联的 Java 类型列表。 如果在 javaType 属性中也同时指定,则注解上的配置将被忽略。
    2. 在类型处理器的类上增加一个 @MappedJdbcTypes 注解指定与其关联的 JDBC 类型列表。 如果在 jdbcType 属性中也同时指定,则注解上的配置将被忽略。

映射器mappers(掌握)

  1. 使用resource指定相对于类路径的资源引用

直接指定类路径即可,映射器接口与xml映射文件 可以不在同一目录,如

<mapper resource="mybatis/UserMapper.xml"/>
  1. 直接指定映射器接口
<!--直接指定接口 要求  mapper.xml文件与mapper接口在同一目录下-->
<mapper class="com.by.mapper.UserMapper"></mapper>
  1. 直接指定包名
<!--直接指定包名  要求  mapper.xml文件与mapper接口在同一目录下-->
<package name="com.by.mapper"/>

自定义MyBatis

MyBatis运行原理图
mybatis运行原理图

MyBatis的核心对象

运行原理步骤图解及流程解析

  1. Resources

加载配置文件,有一种是使用类加载进行加载,我们通过这个类的类加载器进行资源的加载。

  1. List item

  2. SqlSessionFactoryBuilder

构建SqlSessionFactory工厂对象需要的对象。采用了构建者模式,屏蔽了对象构建的细节。

  1. SqlSessionFactory

创建SqlSession对象所用。使用工厂模式创建,目的就是解耦合。

  1. SqlSession

创建代理对象,使用了代理模式

  1. Executor

操作数据库

  1. MappedStatement

存储SQL语句、参数、输出结果类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值