mybatis注解及缓存调优

注 解:
好 处:1、减少维护数量,配置文件减少; 2、减少编码量,提升效率
做 法: 注释去实现普通的代码实现,当出现动态SQL的时候采用调用xml的方法;
保存对象
@Insert(value="insert into t_husband (hus_name) values (#{hus.name})")
@Options(useGeneratedKeys=true,keyProperty="hus.id")
//在标签<insert>里面有什么属性,写在这里;
根据ID查询:
@Select(value="select id as id,hus_name as name from t_husband where id = #{id}")
@ResultType(HusbandBean.class) //返回类型为一个bean对象;
删除ID符合的: 联系两条删除用“ ;"," ”分开
@Delete(value={"delete from t_wife where fk_hus_id = #{id};","delete from t_husband where id = #{id};"})
查询获取对象方式:
@ResultType(HusbandBean.class) //返回结果类型为bean对象;或者本身bean集合
@ResultMap("husWithWifeMap") 去xml引用 xml和ResultMap的代码一致
@Results({
@Result(id=true,property="id",column="hId",javaType=Long.class),
//关联关系配置
@Result(property="name",column="hName",javaType=String.class),
@Result(property=" wife.id",column="wId",javaType=Long.class),
@Result(property="wife.name",column="wName",javaType=String.class)
})
//关联关系做及时加载
@Results({
@Result(id=true,property="id",column="id",javaType=Long.class),
@Result(property="name",column="wife_name",javaType=String.class),
@Result(property="hus",javaType=HusbandBean.class,column="fk_hus_id", one=@One( fetchType=FetchType.LAZY,select="com.lovo.mybatis.mapper.HusbandMapper.getHusbandById")) //懒加载:fetchType=FetchType.LAZY 根据丈夫id外键 懒加载
})
集合的关联关系: 根据父亲id查询父亲及儿子的集合;
@Results({
@Result(id=true,property="id",column="id",javaType=Long.class),
@Result(property="name",column="parent_name",javaType=String.class),
@Result(property="sons",javaType=List.class,column="id", many=@Many(fetchType=FetchType.LAZY, select="getSonsByParentId"))
})


for-each这种复杂的SQL语句直接放在xml中去;
<mapper namespace=" com.lovo.mybatis.mapper.SonMapper">
<insert id=" batchAddSons">
insert into t_son (son_name,fk_parents_id)values
<foreach collection="sons" item="son" separator=",">
(#{son.name},#{son.parents.id})
</foreach>
</insert>
</mapper>

缓 存:
1、缓存作用:JDBC是没有缓存的。缓存可以帮助数据库减压;
也可以 提升查询效率 缓存位于内存内部,在缓存内部是执行效率最高的);【宕机-必须重启】
2、缓存原理
最开始公司:应用、数据库、文件都放在一台服务器上面;访问量一大就很容易宕机;
花钱买三台服务器:应用一台服务器(最好)、DB一台服务器(文件)对磁盘要求很高(大硬盘)
文件一台服务器, 应用服务器与DB 和 文件交互;
新的瓶颈:数据库越来越大、读取越来越慢==> 解决方案:增加一台缓存服务器、提前将热点数据存放在缓存数据、请求来了首先看缓存服务器是否有数据,有就在哪里拿,没有再去DB服务器; 做到:分层更多、但是响应请求更早;
3、1级缓存(二级缓存在hibate中去学习)
通过session会话完成;在不关闭session的时候,会自动开辟一个内存空间,将查询的数据存储在里面;
一级缓存默认是开启的,只要有连接,就开启了的;
显示效果:相同的执行语句,只执行一次,后面的请求直接返回之前查询的结果;
【补充点】:在中国跨网查询速度很慢,很慢;网站访问速度越慢,客户流失率越大。
CDN:广东的基站,在四川电信机房有基站,首先将基站信息发送到四川的服务器上,用户请求直接从这台服务器响应;
反向代理:每次请求都由反向代理去请求回来,然后发给客户端;
动静分离:数据请求、静态请求(JS、css)两者的服务器分开放; 动静分离不会出现404请求找不到;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值