From 367344587f902ca5d9c9ff6c8674554ff1d67f00 Mon Sep 17 00:00:00 2001 From: Rikako Wu <496063163@qq.com> Date: Thu, 4 Aug 2022 00:21:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86POJO=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=EF=BC=8C=E5=B9=B6=E4=B8=94=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?MYBATIS=E7=9A=84=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9=E3=80=82?= =?UTF-8?q?=20--------------------------------------------------------=20?= =?UTF-8?q?=E4=BB=8A=E5=A4=A9=E5=AD=A6=E4=BA=86=E4=B8=AA=E6=96=B0=E8=AF=8D?= =?UTF-8?q?=EF=BC=8C=E2=80=98=E6=8B=AD=E7=9B=AE=E4=BB=A5=E5=BE=85=E2=80=99?= =?UTF-8?q?.=098/4/2022?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mybatis/mybatis.md | 20 ++++++++++++++++++++ spring/Spring core/POJO.md | 15 +++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 spring/Spring core/POJO.md diff --git a/mybatis/mybatis.md b/mybatis/mybatis.md index ee19cc5..2763841 100644 --- a/mybatis/mybatis.md +++ b/mybatis/mybatis.md @@ -1 +1,21 @@ # mybatis框架 +## 1. Mybatis中主要的类及其生命周期 +### 1.1 SqlSessionFactoryBuilder +对于SqlSessionFactoryBuilder,其推荐的生命周期是创建之后立即销毁,不必被保留;其理想的作用域是方法的作用域。 +> 可以将SqlSessionFactoryBuilder进行保留,并用其创建多个SqlSessionFactory实例。但是,为了保证XML解析后资源被正常的释放,应该在将其创建之后立刻丢弃 +### 1.2 SqlSessionFactory +对于SqlSessionFactory实例,其理想的作用域和生命周期都应该是整个应用的执行期间。在应用运行期间,都会通过该工厂实例来获取SqlSession对象。 +> SqlSessionFactory实例在创建完成之后,都不应该被修改或者是被重新创建。 +### 1.3 SqlSession +对于SqlSession对象来说,其生命周期和作用域应该是方法级别或者是请求级别。SqlSession对象并不是线程安全的,无法在多线程环境之下被共享。因而,无法将其作为Servlet或是HttpSession的属性或是静态属性,否则会产生非预期的并发安全问题。 +推荐情况下,SqlSession应该在接受到http请求时被创建,并且在请求返回httpResponse时被销毁。 +并且,SqlSession必须要被保证正确的关闭。 +```java +try(SqlSession sqlSession=sqlSessionFactory.openSession()) { + // operations on sqlSession +} +``` +### 1.4 Mapper实例 +Mapper实例是通过SqlSession实例来获取的,故而,Mapper实例最大的生命周期和作用域和SqlSession。Mapper最推荐的生命周期和作用域是方法级别的,在方法中,获取Mapper并使用后即可丢弃,无需在方法外保存Mapper对象。 +虽然Mapper也可以和SqlSession一样在request范围内有效,但是会发现保留太多Mapper级别的资源而不销毁会很快的产生失控。 +Mapper实例和SqlSession实例不同,并不需要被显式的销毁。 diff --git a/spring/Spring core/POJO.md b/spring/Spring core/POJO.md new file mode 100644 index 0000000..ceba0cc --- /dev/null +++ b/spring/Spring core/POJO.md @@ -0,0 +1,15 @@ +# POJO +## POJO定义 +POJO(Plain Old Java Object)是一种直接的类型,POJO并不包含对任何框架的引用。 +> 对于POJO类型,该类属性和方法的定义并没有特定的约束和限制 +## Java Bean命名约束 +由于对POJO本身并没有对POJO类属性和方法的定义强制指定命名约束,因而许多框默认支持Java Bean命名约束。 +> ### Java Bean命名约束 +> 在Java Bean命名约束中,为POJO类属性和方法的命名指定了如下规则: +> 1. 属性的访问权限都被设置为private,属性通过getter和setter向外暴露 +> 2. 对于方法的命名,getter和setter遵循getXXX/setXXX的命名规范(对于boolean属性的getter,可以使用isXXX形式 +> 3. Java Bean命名规范要求Java Bean对象需要提供无参构造方法 +> 4. 实现Serializable接口,能够将对象以二进制的格式进行存储 +## 其他命名规范 +由于Java Bean命名规范中有些规则强制对Java Bean的命名进行限制可能会带来弊端,故而如今许多框架在接受Java Bean命名规范之余,仍然支持其他的POJO命名规范 +> 如在Spring中,通过@Component注解注册Bean对象时,被@Component注解的类并不一定要实现Serializable接口,也不一定要拥有无参构造方法。