叩丁狼java学习第六天-mybatis(非maven)

发布于 2021-03-11  1084 次阅读


1.mybatis执行流程理解

1. 加载主配置文件(mybatis-config.xml)到内存中,将数据封装成对象
Configuration/Environment/TransactionManager/DataSource等
2. 通过操作拿到访问数据库的基本信息,根据这些数据创建 SqlSessionFactory 对象
3. 从 SqlSessionFactory 对象中获取到 SqlSession 对象,然后执行SQL
4. INSERT INTO user(name,age,salary,hiredate) 
 VALUES(#{name},#{age},#{salary},#{hiredate})
被翻译成
INSERT INTO user(name,age,salary,hiredate) 
 VALUES(?, ?, ?, ?)
5. 使用 PreparedStatement 来执行指定的SQL
从传递进来的 User 对象中依次获取到 name/age/salary/hiredate这些属性的值
这里需要使用到内省机制来访问对象中的属性
注:
在加载完当前映射文件之后,会将SQL中的 #{} OGNL表达式翻译成对应的占位符?,
执行上面的SQL,需要将数据设置给当前的语句对象
ps.setObect(1, 从参数中获取到name属性的值);
ps.setObect(2, 从参数中获取到age属性的值);
ps.setObect(3, 从参数中获取到salary属性的值);
ps.setObect(4, 从参数中获取到hiredate属性的值);

2.内省机制

一、内省机制概述

​ Java 中的反射机制是通过名称得到类的方法和对象的成份,对于一切 Java 类都是适用的,但是有时候使用起来比较麻烦。而 JavaBean 是一种特殊的 Java 类,遵守 JavaBean 的规范,即所有的成员都是私有成员,且每个成员都有公开的读取和设定的方法(getter 和 setter),且这些方法都遵守命名的规范。就是因为 JavaBean 有这些的特性,sun 推出了一种专门对 JavaBean 成员进行访问的技术,方便对其的访问,就是内省技术。

​ 即:通过内省机制(自省机制)可以获取和操作 JavaBean 中的成员信息(方法,事件和属性)。.

JavaBean 规范:

什么是 JavaBean:符合某些设计规范的类。使用 JavaBean,可避免代码重复问题,起到功能重复使用。

1)类必须使用public修饰
2)必须保证有公共无参数的构造器
3)包含属性(property)的操作手段(getter/setter方法)
JavaBean包含的成员:method方法、event事件或property属性

1、内省和反射有什么区别?

​ 反射 (Reflect) 是在运行状态把 Java 类中的各种成分映射成相应的 Java 类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。

​ 内省 (IntroSpector) 是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。内省机制是通过反射来实现的

2、内省机制的作用

用于查看和操作 JavaBean 中的属性:

1)获取 JavaBean 中的每一个属性名 / 属性类型

2)通过 getter 方法获取属性值,通过 setter 方法给属性设置值

3.OGNL表达式

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。

4.插入数据生成的主键

在开发中,如果需要获取到数据库中自动生成的主键,那么使用 MyBatis 应该如何实现呢? 往下看:

useGeneratedKeys: 是否要获取自动生成的主键

keyColumn: 表中的主键列

keyProperties: 主键列对应的属性 表示从获取哪个列的值封装到哪个属性中

通过上面的配置,在执行了保存操作后,mybatis 会自动将主键值封装到传递进来的 User 对象的 id 属性 中 所以,此时的 User 对象的 id 属性就有值了(在保存之前是没有的)


欢迎欢迎~热烈欢迎~