每周一总结 总结(1)
1. @Resource
@Resource,它在语义上被定义为通过其唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关。
- @Resource默认按byName自动注入。
- 既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
- 只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
- 只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
2. Delete + limit
用于DELETE的MySQL唯一的LIMIT row_count选项用于告知服务器在控制命令被返回到客户端前被删除的行的最大值。本选项用于确保一个DELETE语句不会占用过多的时间。
如果DELETE语句包括一个ORDER BY子句,则各行按照子句中指定的顺序进行删除。此子句只在与LIMIT联用是才起作用。
3. in和exists
区别及应用场景:
in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。
not in 和not exists:
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
exists用于检查子查询返回的结果集是否为空,该子查询实际上并不返回任何数据,而是返回值true或false。
一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果集非空,则exists子句返回true,这一行方可作为外查询的结果行,否则不能作为结果。
4. VO POJO等
PO(persistant object) 持久对象
可以看成是与数据库中的表相映射的java对象
。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。
VO(value object) 值对象
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同TO(数据传输对象),在web上传递
。
TO(Transfer Object),数据传输对象
在应用程序不同tie(关系)之间传输的对象
BO(business object) 业务对象
从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。
POJO(plain ordinary java object) 简单无规则java对象
纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。我的理解就是最基本的Java Bean,只有属性字段及setter和getter方法
!。
DTO(Data Transfer Object):数据传输对象
这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象
。
DAO(data access object) 数据访问对象
是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口
。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法
。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO, 提供数据库的CRUD操作
5. Predicate
在Java 8中,Predicate是一个函数式接口,可以被应用于lambda表达式和方法引用。
Predicate函数式接口的主要作用就是提供一个test方法,接受一个参数返回一个布尔类型,Predicate在stream api中进行一些判断的时候非常常用。
6. 外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。
如何解决:客户端不与系统耦合,外观类与系统耦合。
关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。
应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。
注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。
7. 策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
参考:
1. @Resource注解的官方解释
2. 什么时候用@Resource,什么时候用@service
3. mysql delete limit 使用方法详解
4. Sql语句中IN和exists的区别及应用
5. SQL查询中in、exists、not in、not exists的用法与区别
6. java中-PO,VO,DTO,BO,DAO,POJO-的解释
7. Java8-6-Predicate接口详解
8. Java 8 基础教程 - Predicate
9. 外观模式|菜鸟教程
10. 策略模式|菜鸟教程
每周一总结 总结(1)相关推荐
- 疯狂python讲义视频 百度云-每周一书《疯狂Python讲义》分享!
原标题:每周一书<疯狂Python讲义>分享! 内容简介 本书全面而深入介绍了Python编程的相关内容,全书内容大致可分为四个部分,第一部分系统讲解了Python的基本语法结构.函数编程 ...
- 复旦高等代数 I(17级)每周一题
本学期将继续进行高等代数每周一题的活动.计划从第二教学周开始,到第十六教学周为止(根据法定节假日安排,中间个别周会适当地停止),每周的周末将公布1-2道思考题,供大家思考和解答.每周一题通过" ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- 复旦高等代数 II(17级)每周一题
本学期将继续进行高等代数每周一题的活动.计划从第一教学周开始,到第十六教学周为止(根据法定节假日安排,中间个别周会适当地停止),每周的周末将公布1道思考题(共16道),供大家思考和解答.每周一题通过& ...
- 每周一书-2016年8月28日到9月4日获奖读者公布
每周一书-2016年8月28日到9月4日获奖读者公布 上次送出的<Bootstrap基础教程>,已经被幸运者收到了.我们先来回顾下<改善C程序代码的125个建议>活动文章下 ...
- quartz实现每周一至周五 非法定节假日 每天9:30-11:30,13:00-15:00执行定时任务
我的定时任务需求是:使用quartz实现每周一至周五,非法定节假日,每天9:30-11:30,13:00-15:00执行定时任务. 经过学习quartz,发现使用SimperTrigger和CronT ...
- MIT博士小姐姐的机器学习入门教程开课!碎片时间服用,每周一更 | 资源
铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 厌倦了千篇一律的机器学习教学课程怎么办?没有太多时间预算怎么学? 来点不一样的. 现在,两位MIT博士小姐姐搞了一套机器学习入门教程ML T ...
- 每周一书-《程序开发心理学(银年纪念版)》
每周一书-<程序开发心理学(银年纪念版)> 首先说明,本周活动有效时间为2016年9月5日到2016年9月11日.本周为大家送出的书是由电子工业出版社出版,Gerald M. Weinbe ...
- Android每周一轮子:Nvwa(热修复)
前言 (废话) 最近发现了一个问题,一些平时博客写的很多的程序员,反倒在日常的工作中,却是业务写的很一般,只会摆理论的人,甚至还跑出来教别人如何找工作,如何做架构,其实自己都没搞明白.但是受众的分层导 ...
- Oracle数据库管理每周一例-第十七期 ADG
Oracle数据库管理每周一例(12.2,18c,19c) 2020-10-16 第十七期 ADG 1.概念 2.环境说明 3.搭建流程-主库处理 1.配置静态监听 2.配置本地命名 3.数据库参数配 ...
最新文章
- 一个很简单小数正负数行转列问题
- python 多进程全局变量
- STL:transform
- mysql gui 比较_Navicat for MySQL与MySQL GUI Tools功能比较
- C++ STL学习笔记 : 1. template 模板函数
- return to dl_resolve无需leak内存实现利用
- WPF 使用附加属性增加控件属性
- 奇怪:WINDOWS排序错了?
- mapper [pos] of different type, current_type [geo_point], merged_type [ObjectMapper]
- 关于USGS 共享光谱库读取问题
- Spring Web 编程详解
- 徐张生:三级分销不是传销,人人店已经占据行业绝对优势
- php判断图片有没有ps过,你知道你PS过的图片会侵犯别人的权利吗?
- 【动态规划】钢条切割问题
- Android开发应该用什么语言
- Avamar 10007报错解决
- 二维图像中的Hessian矩阵(及MATLAB代码)
- java web底层原理_详解Java开发Web应用程序的底层原理
- Iphone IPA软件制作教程
- 市面上的IT培训机构的水与火,作为内部人给你最真实的建议
热门文章
- Python爬虫入门教程 9-100 河北阳光理政投诉板块 1
- 序列化和反序列化的区别
- 【集成学习-组队学习】2.使用sklearn构建完整的机器学习项目流程
- 计算机快捷键 还原默认值,bios怎么恢复出厂设置 恢复bios出厂默认值的方法
- iOS--对勾提示动画
- Android图像处理之色彩特效处理
- 苹果x怎么关机_价值300元的苹果mac重装系统教程,免费赠送给你收藏起来
- 【Python百日进阶-Web开发-Feffery】Day366 - fac实例:动态化持久化创建dash应用页面内容
- 怎么往云服务器上复制文件,如何往云服务器上复制文件
- 魅族18双击亮屏图文设置方法(2021)