生活随笔
程序员的日常
Spring学习笔记-手写IOC与AOP
什么是IOC在传统项目中,类A要使用类B的某个方法f,这时候一般是这么实现:
123456public class A { public void test() { B b = new B(); b.f(); }}
这时,B的创建是有A来自己完成的,我们可以说A拥有B的创建、管理权限。
但是这种情况下,A和B就是强关联的,我们希望A和B是松耦合的状态,显然直接new肯定是不行的。所以IOC(控制反转)主要就是描述了一种将对象的创建管理权限交给IOC容器管理,自己不负责创建管理的思想。
什么是DIDI:依赖注入,其实它和IOC描述的是同⼀件事情,只不过角度不同。
上面我们从对象的角度描述了什么是IOC,如果我们把角度切换到IOC容器时,就会发现ioc容器主要完成的事情,就是把A需要的B,进行注入,这个过程就叫依赖注入。
自定义实现IOC基于上面的解释,要实现一个类似SpringIOC的ioc容器,可以分成几个步骤(基于注解的模式):
扫描指定包下所有类(或者带指定注解的类);
进行类的实例化,生成对象 ...
Mybatis学习笔记-手写简单的Mybatis
1. 传统的JDBC模式在没有使用ORM框架时,我们基本都是通过JDBC进行数据库的操作,一般的逻辑代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 通过驱动管理类获取数据库链接 connection = DriverManager.getConnection("jdbc:mysql://localho ...
Java学习笔记-动态代理
1. 代理模式
代理模式一般指的是一个类代表另一个类的功能。这种类型的设计模式属于结构型模式,通过创建具有现有对象的对象,以便向外界提供功能接口。
这里来举例说明:歌星A,擅长唱歌;某晚会邀请A去唱歌,但是实际上不会直接联系A,而是联系A的经纪人B,经纪人经过合同谈判等步骤,最终A去晚会上进行了唱歌。首先定义个接口Star里面定义了唱歌方法如下:
12345678public interface Star{ // 唱歌 void sing(); // 跳舞 void dance();}
然后声明实现类歌星A:
123456789101112public class RapStar implements Star{ @Override public void sing() { System.out.println("RapStar开始freestyle!"); } @Override public void dance() { System ...
Mybatis学习笔记-源码解读与插件原理
mybatis架构简介
Mybatis的架构可以大致分为以下三层:1、API接口层:对外提供增删改查接口,使用传统的MyBatis提供的API或者使用Mapper代理的方式;2、数据处理层:完成参数映射、SQL解析与执行、结果处理等;3、框架支撑层:支持基于XML或者注解定义SQL、事务管理、连接池管理、缓存管理等;
Mybatis作为一个ORM框架,实际上底层还是通过JDBC来操作数据库,完成增删改查的。
想要详细了解底层的原理,首先需要知道Mybatis的九大核心的概念:
组件
描述
SqlSession
作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成数据库增删改查功能
Executor
MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler
封装了JDBC Statement操作,负责对JDBC statement的操作,如设置参数、将Statement结果集转换成List集合
ParameterHandler
负责对用户传递的参数转换成JDBC Statement ...
Mybatis学习笔记-注解、延迟加载以及缓存
1. mybatis注解
上一章介绍mybatis的使用时,主要介绍的是通过XML方式进行SQL相关配置,其实我们还可以通过注解来减少编写Mapper映射文件,本章就主要讲解相关的注解。
1.1 常用的CRUD注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
通过上面的注解,可以替代mapper.xml里面的相关SQL标签,例如通过
12@Select("select * from user")public List<User> findAll();
可以替代
123<select id="findAll" resultMap="userMap"> select * from user</select>
1.2 结果集注解在注解模式中,怎么指定返回的结果集中数据库字段与实体属性名的对应关系呢?主要是通过@Result和@Results来实现,具体示例如下:
123456@Select("select * from us ...




