Mybites--1简述

1、为什么使用mybites

①、代码重复
②、需要收到管理资源
③、业务逻辑与代码逻辑耦合,不方便维护
④、sql解析不方便,结果集处理复杂

2、现在使用的orm框架有哪些

①、hibernate
提供了一个session对象,提供了save。。。
缺点:不能指定部分字段,无法自定义sql,优化困难,不支持动态修改sql
②、springjdbc
方法封装:定义jdbctemplate
资源管理:初始化一个datasource
结果集的处理:RowMapper
③、DButil,处理结果集
定义一个:BlogHandler

解决了:方法封装,支持数据源,映射结果集
未解决:sql硬编码,参数只能按顺序传入(占位符),没有实现实体类到数据库记录的映射,没有提供缓存的功能

3、什么是orm

object–relation–mapper
数据库表与java中的实体类对应

4、MyBatis

特性:
1、使用连接池对连接进行管理
2、SQL与代码分离,集中管理
3、参数映射和动态SQL
4、结果集的映射
5、缓存管理
6、重复SQL的管理
7、插件机制

5、选择什么orm框架

1、业务简单的项目可以选择hibernate
2、需要灵活的SQL,可以用mybatis
3、对性能要求公安,可以使用jdbc
4、spring JDBC可以和ORM框架混用

二、mybatis编程式开发

SqlSessionFactoryBuilder:解析配置文件–创建工厂类
生命周期(方法局部):创建完SqlSessionFactory,就销毁了
SqlSessionFactory:创建会话
生命周期:单例模式,创建完会一直产生
SqlSession:会话
生命周期:数据库请求过程–请求时生成,调用完成结束
BlogMapper:
配置文件:
1、全局配置文件
< configuration>
< properties>独立出的一部分文件
< settings>设置
< typeAliases>别名,简化我们的拼写
不用全部定义,可以定义一个包,将全路径扫描,及一些预设的一些别名
< typeHandlers>类型处理器,可以自定义,系统包括一些预设的类型
彩蛋,将数据库中的BLOK文件转换为对应的类对象,需要自己程序设置
问题:将数据库保存的json格式转换为类对象???
< objectFactory>对象工厂 写一个objectfactory继承defaultobjectfactory
< plugins>
< environments>定义数据环境
< /transactionManager>事务管理器:jdbc,集成到spring,manager
</ dataSource>数据源
< mappers>映射器

2、mybatis最佳实践这里是引用

①、动态SQL,用于拼接SQL

1.< if>:按照条件查询表

<select id="findActiveBlogWithTitleLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
</select>
  1. < choose>:条件语句中使用的
<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>
  1. trim (where, set)

< /trim>去除末尾,逗号,空格,,,
按条件插入时,不能保证那条记录为最后一个,所以需要将最后一个条件逗号去除,以保证SQL的规范

  1. </ foreach>用于生成由逗号分隔的批量数据

    问题一:代码中的for和mybatis中的foreach有什么区别?
    for循环:每执行一次调用一次数据库连接,浪费性能
    foreach:帮助我们生成符合数据库语法的SQL语句,只执行一次数据库连接
    缺点:数据量大的时候,数据库一次请求SQL长度是有要求的,会造成数据丢失
    最优解:Bath executor
    问题二:statement和prepareStatement区别
    ②、嵌套(关联)查询–N+1/延迟加载
    方式:嵌套结果(结果中在 ),嵌套查询(在结果中关联方法 )
    如何设置延迟加载(通过代理的方式实现):配置文件中设置
    ③、翻页
    逻辑翻页和物理翻页
    逻辑翻页:先从数据库全部取出,后在筛选
    物理翻页:将当期页号及查询个数传入数据库查询
    ④MBG代码生成器
    字段发生变化
    解决:继承,通用mapper

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值