持久层框架
所有的持久层框架
1.jdbc--都做了封装
2.Sql--有的做了封装
封装了一半的就是半自动框架。
两样都封装了就是全自动框架。
前身是ibatis 、开源。
轻量级框架。
1.Xml
a) 数据库配置文件
b) 接口、实体、sql语句之间的配置关系。
2.Java类、接口
SqlSessionFactory
SqlSession:封装jdbc的连接 维护持久层到数据库的会话。
连接池:管理连接 。 如何管理?
读写分离。
02--
表达式不要写在sql语句里面,会影响查询效率。
在mybatis映射层中 map作为参数的时候只能单独存在。
<!-- namespace 命名空间,实际上就是相当于我们的程序中的包,
1、用于分类
2、保证命名空间内部的文件都是唯一的-->
Sql标签 :
把相同的代码进行封装。
<sql id=”eg”>where user_name like concat(#{map.name},’%’) </>
在需要用到的地方使用 include标签进行引用
Select name form t_emp <include refid=”eg”></>
动态sql:
<foreach>
</foreach>
<where>标签会直接忽略掉紧随其后的and 或者 or。
<if>
<if test=”条件表达式 --map.name != null ”> 标签 ---//如果传递的参数的map,那 //么test里面的表达式只能取键来进行比较,不能使用 #、$
user_name like concat(#{map.name},’%’) -- 满足条件后添加sql内容
</>
<trim prefix=”where” prefixOverides=”and|or” suffix=”order by” suffixOverides=”and|or” > 标签 在不使用where标签的时候使用。
//prefix 前缀
//suffixOverides 后缀
user_name like concat(#{map.name},’%’)
</trim>
Id desc;
Switch
<set >标签
<if test=’”user.name != null”> 条件语句后需要添加”,” ,如果是最后一个条件 会自动去掉”,”
User_name =#{user.name},
</>
<if test=’”user.sex!= null”>
User_name =#{user.sex},
</>
<if test=’”user.age!= null”>
User_name =#{user.age} ,
</>
</>
对象中包含对象要取值就用
对象.对象.属性
Mybatis支持一个标签内写多条sql
在配置时要添加 allowMultiQuery
类与类的关系
1.继承 子类与父类
2.实现 接口
3.关联
4.组合、聚合--整体与部分的关系 组合整体消亡个体随之消亡 聚合整体消亡,个体继续存在。
5.依赖 使用与被使用的关系
关系--在一定范围内有效。
关联关系。
一对一
对象包含对象时添加配置:
<association property=”属性(javabean中对应的字段)” type=”属性的类型” > 关联关系是1 就是单独的一个对象
<> 属性1
<> 属性2
</>
全局开启延迟加载
<seting name =”lazyLoadingEnabled
” value=”true”>
<seting>
<association property=”属性(javabean中对应的字段)”
javatype=”属性的类型”
//Fetchtype=”lazy”;--延迟加载。
Select=”请求路径.对应sql的id”
Column=”结果集里面对应的值”
>
删除时先删和自己有关系的。
同时执行多条sql语句的时候 ,受影的结果是最后一条语句影响的行数。
加载方式
1.预加载,联表查询。
2.及时加载。先查自己,再查与之有关联的数据
3.延迟加载,懒加载。使用的时候再加载。--内部实现代理模式。 Fetchtype=”lazy”
一对多:
<collection property=” ” javatype =”” select=”” column =””>
</>