mybatis

一.概述

  1. 现有jdbc代码的不足
    1)代码冗余大(对于不同的表的dao实现类,只有sql命令是不同的)
    2)对于结果实体类对象的封装需要程序员手工完成(o-r mapping)
    3)jdbc代码没有提供“连接池”功能,需要人为的引入外部的连接池软件
    4)jdbc没有提供缓存机制
  2. Mybatis框架
    1)Mybatis框架是一个基于java的,做数据持久化操作的框架。是对现有的jdbc代码
    的合理封装,替换jdbc代码完成数据库的访问操作(Dao)。
    2)Mybatis提供一种新的机制完成dao接口的实现
    在这里插入图片描述

二.搭建环境

  1. 引入相关的jar包
    Mybatis-3.2.2.jar(核心jar包) ojdbc5.jar log4j-1.2.17.jar(日志)
  2. 引入相关的配置文件
    Mybatis-config.xml — 放置在src目录下,mybatis的配置文件
    Log4j.properties ----- 放置在src目录下,日志功能的配置文件
  3. 初始配置 — mybatis-config.xml
    在这里插入图片描述
    三.第一个Mybatis程序
  4. 建立数据库表 以及 表对应的实体类
  5. 定义表所需要的dao接口
  6. 用mybatis方式给出接口的实现在这里插入图片描述
  7. 注册映射文件 — 在mybatis-config.xml文件中注册在这里插入图片描述
  8. 测试(写测试代码)
    1)核心API在这里插入图片描述
    注意:SqlSession与Connection一一对应
    2)测试代码在这里插入图片描述
    四.查询的细节处理
  9. 查询结果是一个集合
    在这里插入图片描述
  10. 多参查询
    注意:方法的形参名在运行时已经丢失,所以在指定参数时,不能再使用形参名。

1)通过参数的下标来确定引用哪一个参数的值在这里插入图片描述
2)通过注解的形式为形参定义可以长久保留的名字(强烈建议)在这里插入图片描述
在这里插入图片描述
3.字段名与实体类的属性名不对等
1)在查询结果封装时,mybatis会采用“结果里的字段名”去为实体类的“同名属性”
赋值,如果没有对应的同名属性,则赋值失败
2)表里的字段名与属性名不对应时,解决方案:在查询过程中为查询结果里的字段
定义“别名”,别名必须与属性名一致在这里插入图片描述
五.数据的增删改(insert update delete)
强调:在使用增删改功能时,mybatis要求必须在代码中显示的手动提交。

  1. 删除功能在这里插入图片描述
    在这里插入图片描述
  2. 更新功能在这里插入图片描述
    在这里插入图片描述
    3. 插入功能 — 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    六.MyBatis工具类的封装
  3. SqlSession与jdbc里的Connection一一对应,代表了Connection,每次数据库操作都
    需要新的SqlSession
  4. 读配置文件mybatis-config.xml的动作不需要每次构建SqlSession时都执行,启动时执
    行一次 — 静态代码块
  5. SqlSessionFactory对象代表了配置文件信息,重量级组件(内存多,效率差,功能强),
    这种对象在应用中只创建一次
  6. SqlSession等价于Connection(不能再多个线程间共享,最好做到一个线程一个
    Connection)

二.Mapper文件细节补充

  1. 对于查询功能里的 > 和 < 号的处理
    1)如果代码中出现< 需要用特殊的字符串代替 ---- < > ≤ ≥在这里插入图片描述
    2) 脚本代码里对特殊符号的处理在这里插入图片描述
    2. 模糊查询
    1)在mapper文件中对sql命令进行拼接在这里插入图片描述
    2)在调用函数时,对实参进行拼接在这里插入图片描述
    3. 在插入和更新时,实体类的属性为null的处理在这里插入图片描述
    在这里插入图片描述
    三.Mybatis-config.xml文件细节补充

  2. Mybatis运行在配置文件中为实体类定义别名在这里插入图片描述
    在映射文件中直接使用别名在这里插入图片描述

  3. 将数据库的连接数据单独配置在一个独立的文件中在这里插入图片描述
    四.关联关系数据的处理

  4. 分类: 一对一 一对多(多对一) 多对多
    Student-computer 最多 student – course

  5. 一对多关联关系的解决( Student — Team )
    1)在数据库里建表,保存业务数据,并且保存数据关系在这里插入图片描述
    2)在java程序中通过实体来封装数据,同时体现数据关系在这里插入图片描述
    3)定义Dao接口
    StudentDao(insert update delete queryByPk queryAll)
    TeamDao(insert update delete queryByPk queryAll)
    4)为实体类定义Alias
    5)写映射文件
    A. 对于Dao接口中的增删改操作只要维护好本表就可以,不用关心关系的维护
    B. 查询功能必须查询完整对象数据(最好使用左外表连接查询相关数据)在这里插入图片描述
    在这里插入图片描述
    二.关系数据处理 — 一对一(Student — Computer)

  6. 在db里描述关系数据在这里插入图片描述

  7. 在java程序中通过实体类来描述关系在这里插入图片描述
    3. 定义dao接口 — StudentDao ComputerDao

  8. Mapper文件 ---- StudentDaoImpl.xml ComputerDaoImpl.xml

    1. 增删改动作与单表操作基本一致
      2)查询动作 — 需要表连接查询,需要resultMap

三.关系数据处理 — 多对多(Student — course)

  1. Db里如何描述在这里插入图片描述
  2. Java实体类描述在这里插入图片描述
  3. 定义Dao接口 ---- StudentDao CourseDao
  4. 定义mapper文件
    注意:直接描述多对多,会导致数据库里的表和实体类的数量不对等,此时一般只需
    要程序员提供“查询功能”,最好不涉及增删改功能在这里插入图片描述
    5. 如果涉及到增删改功能的多对多
    1)解决:在程序涉及过程中,会人为的将多对多关系首先拆分成两个一对多。
    通过添加一组业务数据的方式拆分
    2)案例:Product ---- Order在这里插入图片描述
    四.动态SQL(dynamic sql)
  5. 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  6. 用在条件判断的语句里,作用是去掉第一个条件前多余的and或者or在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  7. 标签 — 用在更新动作里,作用去掉命令后多余的“,”在这里插入图片描述
    在这里插入图片描述
    4. Foreach标签,做循环的在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5. 总结 ----- 如何处理增删改查功能中的null值
    1)insert — #{name,jdbcType=VARCHAR}
 2) update ---  <set> 和 <if>
 3) delete(批量删除) ---- <foreach>
 4) select(查询条件空值) --- <where> 和 <if> 

五.缓存机制

  1. 什么是缓存?好处?在这里插入图片描述
  2. 缓存与Mybatis的整合
    1)Mybatis本身内置了缓存功能 — 全局缓存 — 底层采用HashMap的形式来管理缓
    存空间
    使用步骤:
    A. 打开mybatis的全局缓存设置 ---- mybatis-config.xml在这里插入图片描述
    B. 在需要使用缓存功能的mapper文件中添加标签
    此时通过当前mapper文件提供的查询功能查到的数据就会被存入缓存在这里插入图片描述
    C. 注意:
    I. 只有在SqlSession被关闭时,本次查询的数据才会被存入缓存。
    II. 当增删改动作发生,commit之后,缓存数据会被清空
    III. 缓存一般会有自动“换出”机制(当缓存满了后,会根据某种算法将一些数
    据写入硬盘。要求:实体必须实现Serializable接口

思考:有两个mapper文件都设置了缓存,如果调用了其中mapper1提供的delete方
法,并提交。问:清空缓存数据时,
A。清空mapper1的缓存数据,mapper2数据仍然被缓存
B。全部清空
2)一般开发中会引入外部的缓存软件(ehcache)
引入步骤:
A. 打开mybatis的全局缓存设置 ---- mybatis-config.xml
B. 引入相关jar包
C. 引入配置文件 — src

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-七秒钟记忆

微薄打赏,小编的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值