自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (3)
  • 收藏
  • 关注

原创 Mybatis源码分析(二十) - 反射模块分析

orm框架查询数据过程反射的核心类MetaObject:封装了对象元信息,包装了mybatis中五个核心的反射类。也是提供给外部使用的反射工具类,可以利用它可以读取或者修改对象的属性信息ObjectFactory:MyBatis每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建POJO;ReflectorFactory:创建Reflec...

2019-06-30 22:57:26 194

转载 java设计模式之装饰器模式

一、什么是装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。在不想增加更多子类的情况下扩展类,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类...

2019-06-30 22:18:37 570

原创 Mybatis源码分析(十久) - 缓存模块分析(装饰器模式)

Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能除核心功能之外,有很多额外的附加功能,如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功能、日志能力、定时清空能力等附加功能可以以任意的组合附加到核心基础功能之上怎么样优雅的为核心功能添加附加能力?一般常用的方式是用继承存在的问题:继承的方式是静态的,用户不能控制增加行为的方式和...

2019-06-30 22:05:45 214

原创 Mybatis源码分析(十八) - 源码包分析【数据源模块】

常见的数据源组件都实现了javax.sql.DataSource接口;MyBatis不但要能集成第三方的数据源组件,自身也提供了数据源的实现;一般情况下,数据源的初始化过程参数较多,比较复杂;数据源模块类图PooledConnection:使用动态代理封装了真正的数据库连接对象;/** * 使用动态代理封装了真正的数据库连接对象 * @author Clinton ...

2019-06-30 20:59:47 361

原创 Mybatis源码分析:动态代理实现JDBC打印日志

ConnectionLogger:负责打印连接信息和SQL语句,并创建PreparedStatementLoggerPreparedStatementLogger:负责打印参数信息,并创建ResultSetLoggerResultSetLogge:负责打印数据结果信息public final class ConnectionLogger extends BaseJdbcLogger ...

2019-06-30 15:53:51 422

原创 java设计模式之工厂模式

什么是工厂模式?工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行优点:把对象的创建和使用的过程分开,对象创建和对象使用使用的职责解耦; 如果创建对象的过程很复杂,创建过程统一到工厂里管理,既减少了重复代码,也方便以后对创建过程的修改维护; 当业务扩...

2019-06-30 14:44:11 188

原创 Mybatis源码分析(十七) - 源码包分析【日志模块】

mybatis源码下载地址:https://github.com/mybatis/mybatis-3MyBatis源码导入过程:下载MyBatis的源码 检查maven的版本,必须是3.25以上,建议使用maven的最新版本 mybatis的工程是maven工程,在开发工具中导入,工程必须使用jdk1.8以上版本; 把mybatis源码的pom文件中<optional>t...

2019-06-28 17:28:13 195

原创 java设计模式之六大原则

1 单一职责原则  一个类只负责一种职责,只有这种职责的改变会导致这个类的变更。绕口一点的正统说法:不要存在多于一个原因导致类变更  假如:类T 负责有两种职责 P1,P2;当P1发生改变时,需要修改类T,这时候可能会对P2造成影响。  所以不要为了图代码量少,二将不同职责放入到一个类里面。2 里氏替换原则  只要父类出现的地方,都可以用子类替换,并且不会对程序造成影响,在...

2019-06-28 17:21:50 99

转载 java设计模式之代理模式(静态代理与JDK动态代理)

定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用;目的:(1)通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性;(2)通过代理对象对原有的业务增强;代理实现可以分为静态代理和动态代理。静态代理静态代理模式其实很常见,比如买火车票这件小事:黄牛相当于是火车站的代理,我们可以通过黄牛买票,但只能去火车站进行改签和退票。在代码...

2019-06-26 20:44:33 323

原创 Mybatis源码分析(十六) - 与spring的集成

Mybatis-spring 用于帮助你将 MyBatis 代码无缝地整合到 Spring 中。Mybatis-spring 兼容性MyBatis-Spring要求Java5及以上版本还有下面列出的MyBatis和Spring版本:准备spring项目一个在pom文件中添加mybatis-spring的依赖<dependency> <groupI...

2019-06-25 13:33:14 119

原创 Mybatis源码分析(十五) - 缓存技术

MyBatis 包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互缓存查询图:一级缓存 (也叫应用缓存)一级缓存默认会启用,想要关闭一级缓存可以在select标签上配置flushCache=“true”; 一级缓存存在于 SqlSession 的生命周期中,在同一个 SqlSession 中查询时, MyBatis 会把执行的方法和参数通过...

2019-06-18 10:53:22 111

原创 Mybatis源码分析(十三) - 关联查询之多对多

我的理解是,多对多其实就是两个一对多。嵌套结果:示例代码: <select id="selectUserRole" resultMap="userRoleInfo"> select a.id, a.user_name, a.real_name, a.sex, a.mobile, a.no...

2019-06-14 17:23:25 216

原创 Mybatis源码分析(十四) - discriminator 鉴别器映射

在特定的情况下使用不同的pojo进行关联, 鉴别器元素就是被设计来处理这个情况的。鉴别器非常容易理解,因为它的表现很像 Java 语言中的 switch 语句discriminator 标签常用的两个属性如下: column:该属性用于设置要进行鉴别比较值的列 。 javaType:该属性用于指定列的类型,保证使用相同的 Java 类型来比较值。discriminator 标签...

2019-06-14 16:09:54 433

原创 Mybatis源码分析(十二) - 关联查询之一对多

1. collection 支持的属性以及属性的作用和 association 完全相同2. mybatis会根据id标签,进行字段的合并,合理配置好ID标签可以提高处理的效率;一对多 嵌套结果private List<TJobHistory> jobs ;示例代码: <select id="selectUserJobs1" resultMap="userAn...

2019-06-14 15:14:56 313

原创 Mybatis源码分析(十一) - 关联查询之一对一

在关系型数据库中,我们经常要处理一对一 、 一对多的关系 。 例如, 一辆汽车需要有一个引擎,这是一对一的关系。 一辆汽车有 4 个或更多个轮子,这是一对多的关系 。关联元素就是专门用来处理关联关系的;关联元素 association 一对一关系 collection 一对多关系 discriminator 鉴别器映射关联方式嵌套结果:使用嵌套结果映射来处理重复...

2019-06-14 14:29:40 149

转载 Java中ArrayList和LinkedList区别

ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。stat...

2019-06-14 10:28:59 2684

转载 Java ArrayList在foreach中remove的问题分析

<div id="post_detail"> Java ArrayList在foreach中remove的问题分析 目录 iterator itr.hasNext 和 itr.next 实现 倒数第二个元素的特殊 如何避坑 ...

2019-06-14 10:05:20 235

原创 Spring源码分析之大结局-手写springmvc

1.创建一个maven工程,并生成web工程pom文件如下:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0...

2019-06-13 16:20:34 240

转载 java设计模式之策略模式

前两天在手写springmvc的时候,用到了策略模式,这里给大家分享一下策略模式。概念:其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。架构 :策略模式的结构封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。抽象策略...

2019-06-13 15:02:22 156

转载 java中的“\t”

对于初学者来说,java中的"\t"和空格总是让人迷惑,其实很简单,通过一个例子就能很快明白!比如说打印九九乘法表!先来看用空格的效果!package cn.edu.nwpu.java;public class MultiplicationTable { public static void main(String[] args) { // 打印九九乘法...

2019-06-11 09:21:58 388

原创 Mybatis源码分析(十) - Mybatis Generator (MBG)

Mybatis Generator工具分享:链接:https://pan.baidu.com/s/1f506HFXu8iDJsXwIfb9sAg提取码:9hiwMyBatis Generator:MyBatis 的开发团队提供了一个很强大的代码生成器,代码包含了数据库表对应的实体类 、Mapper 接口类、 Mapper XML 文件和 Example 对象等,这些代码文件中几乎...

2019-06-08 16:42:40 506

原创 Mybatis源码分析(九) - 批量操作

通过foreach动态拼装SQL语句示例:<insert id="insertForeach4Batch" useGeneratedKeys="true" keyProperty="id"> insert into t_user (user_name, real_name, sex, mobile,email,note, position_id) value...

2019-06-08 15:45:13 322

原创 Mybatis源码分析(八) - 动态sql元素

if元素:判断语句 ,单条件分支判断示例:<if test="email != null and email != ''"> a.email like CONCAT('%', #{email}, '%') and</if>Trim、where、set :用于处理sql拼装问题where示例:<where> <i...

2019-06-08 15:38:14 216

原创 Mybatis源码分析(七) - 注解方式配置

注解方式就是将SQL语句直接写在接口上,对于需求比较简单的系统,效率较高。缺点在于,每次修改sql语句都要编译代码,对于复杂的sql语句可编辑性和可读性都差,一般不建议使用这种配置方式;包含下面几种@Select@Results@Insert@Update@Deletemapper接口示例: @Results(id="jobInfo",value={ ...

2019-06-08 13:50:56 244

原创 Mybatis源码分析(六) - sql元素和参数

sql元素: 用来定义可重用的 SQL 代码段,可以包含在其他语句中;<sql id="Base_Column_List"> id, user_name, real_name, sex, mobile, email, note, position_id</sql>参数:向sql语句中传递的可变参数预编译 #{}:将传入的数据都当成一个字符串,会对自动...

2019-06-08 13:41:00 317

原创 Mybatis源码分析(五) - insert, update 和 delete常用属性

useGeneratedKeys与keyProperty 的使用mysql的情况下:设置主键自增长:AUTO_INCREMENT<insert id="insert1" parameterType="TUser" useGeneratedKeys="true" keyProperty="id"> insert into t_user (id, user_name,...

2019-06-08 13:38:08 331

原创 Mybatis源码分析(四) - select查询,resultmap详解

select元素自动映射 前提:SQL列名和JavaBean的属性是一致的; 自动映射等级autoMappingBehavior设置为PARTIAL,需要谨慎使用FULL; 使用resultType; 如果列名和JavaBean不一致,但列名符合单词下划线分割,Java是驼峰命名法, 则mapUnderscoreToCamelC...

2019-06-08 13:18:18 373

原创 Spring源码分析(十二) - Aop基础

AOP: 面向切面编程[底层就是动态代理]指程序在运行期间动态的将某段代码切入到指定方法位置进行运行的编程方式先建立Cap10MainConfigAop配置类在POM.XML中导入spring-aspects依赖包新建立一个业务逻辑类Calculator.javapackage com.caojiulu.cap10.aop;//业务逻辑类public class...

2019-06-05 16:19:06 147

原创 Spring源码分析(十一) - Aware注入spring底层组件原理

问题:自定义组件想要使用Spring容器底层的组件(ApplicationContext, BeanFactory)等自定义组件实现xxxAware, 在创建对象的时候, 会调用接口规定的方法注入到相关组件:Aware先来看一段代码:CTRL+SHIFT+T 找到Aware使用ApplicationContextAware接口为例, 实现接口1, 新建Light...

2019-06-05 11:46:02 276

telnet-安装包.zip

telnet 安装包 安装命令: rpm -Uvh telnet-0.17-65.el7_8.x86_64.rpm

2020-10-23

virtualbox.zip,centeros7

centeros7,virtualbox,vagrant+virtualbox方式创建一个centeros7

2020-06-09

trang-2019.zip

java使用jaxb解析XML(含根据xml自动生成实体类),工具类。非常实用的小工具,欢迎大家下载

2019-10-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除