持久层框架---MyBatis

持久层用于与数据库进行交互,将SQL通过连接发送给DB,然后从DB中获取DATA,再将这个DATA封装到javabean。
持久层框架都对JDBC做了封装;部分做了SQL语句封装
MyBatis ---未对SQL语句进行封装( 半自动化 )=》灵活,效率高
-----(缺)与数据库耦合高
---先查询再映射
组成:xml + java类与一系列接口
xml :一种用于数据库配置,另外一种 用于配置java接口或者实体与SQL语句间的配置关系
java类与一系列接口:
SqlSessionFactory
SqlSession: 维护数据库到持久层的对话(针对JDBC的封装对象)
里面放的是JDBC的连接,从持久层框架的连接池得到。
连接池用于管理连接,控制连接上限,
log4j.jar 数据库日志--记录数据库操作;运行日志--记录运行状态
log4j日志五种级别->系统日志,DEBUG,info, warn, error
关系型数据库设计范式三原则:1、列不可再分,具有原子性 2、行不可重复(ID)
3、只记录与之相关的列,不记录无关数据-----(外键关联)
配置文件: 1、配置日志使用
2、需要配置数据源连接信息
配置事务管理;配置数据源
SQL写在配置文件中,让SQL与java代码分离-----实现开闭原则
mapper配置中,namespace(命名空间)属性相当于程序中的包。1、用于分类2、保证内部文件的唯一性
在MyBatis中取值方式有两种:1、#{ };2、${ }。
两种方式区别:方式1 会在值的两侧自动添加‘ ’(单引号);
编译时采用预编译(preparestatements)
方式2 不会在值的两端添加引号,通常用于数组或者order by 、group by 之后的语句。编译时采用statement
insert标签用于新增,id属性是唯一标记。属性useGeneratedKeys="true"用于获取数据库自增id;parameterType属性设置参数类型
#{属性名}取得对象属性值
多参数查询,解决方案:1、将参数封装成对象,2、将参数添加到MAP中


垂直分类--按功能业务分 水平分类---按执行过程分

动态SQL---
在mybatis中可以使用include---SQL的组合来完成重复代码的引用。重复代码放在SQL标签中。<sql id="cs">语句<sql>; <include refid="cs"><include>
<foreach> <include>
<where>标签会直接忽略紧随其后的AND或OR</where>;
<if test="bool表达式">SQL语句</if>
如果传递的参数是Map,那么test里面表达式应该用键来进行比较,不能直接使用#或者$。
<trim prefix(前缀)="where" prefixOverrides(前缀后的需要覆盖内容)="and|or" suffix(后缀)="order by" suffixOverrides(后缀后的需要覆盖内容)="and|or"></trim>
<set></set>
<choose><when></when><otherwise></otherwise></choose>
<![CDATA[内容]]>静态块;如果语句中包含有小于大于符号,这个时候需要将语句放入到静态块中;静态块中的语句在解析时,会解析为字符串,而不会当做标签来解析。
加索引是提高查询效率的有效方法。
多条语句用分号分开;返回的值为最后一次执行返回结果
类之间关系:继承、实现、【关联、组合(聚合)】(成员变量)、依赖(参数、返回类型)
<association property=" " JavaType=“”>
</association>关联关系

分层降低耦合度;禁跨层调用;禁下层调上层
1对多,多对多时,(即关联对象以集合的方式存在于对象中)那么这个地方使用延迟加载,不能使用预加载

<discriminator javaType="类型" column=“结果列名”>
<case value="" resultType=""></case>
<case value="" resultType=""></case>
</discriminator>定义一个鉴别器

注解 @Insert("sql语句")
@ResultType(GameBean.class)
持久层 缓存:减压、效率
连接不关闭的情况下,查询过的内容会保存在缓存中,下次查询直接从缓存中取得结果。(一级缓存)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值