导图社区 JDBC和Mybatis
JDBC和Mybatis:Mapper接口开发:Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同。
编辑于2022-11-10 22:08:27时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
社区模板帮助中心,点此进入>>
时间管理-读书笔记,通过学习和应用这些方法,读者可以更加高效地利用时间,重新掌控时间和工作量,实现更高效的工作和生活。
本书是法兰教授的最新作品之一,主要阐明了设计史的来源、设计史现在的状况以及设计史的未来发展可能等三个基本问题。通过对设计史学科理论与方法的讨论,本书旨在促进读者对什么是设计史以及如何写作一部好的设计史等问题的深入认识与反思。
《计算机组成原理》涵盖了计算机系统的基本组成、数据的表示与运算、存储系统、指令系统、中央处理器(CPU)、输入输出(I/O)系统以及外部设备等关键内容。通过这门课程的学习,学生可以深入了解计算机硬件系统的各个组成部分及其相互之间的连接方式,掌握计算机的基本工作原理。
JDBC和Mybatis
MyBatis
ORM:对象关系映射指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。
重要api:
Resourses:加载资源的工具类
SqlSessionFactoryBuilder:构建器:通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
SqlSessionFactory:获取sqlsession构建者对象的工厂接口
SqlSession:会话对象,执行sql;
映射配置
映射配置参数
id:唯一标识, 配合名称空间使用。
parameterType:指定参数映射的对象类型。
resultType:指定结果映射的对象类型。
#{}与${}的区别
#{}是预编译处理(自动进行Java类型和JDBC类型转换),$ {}是字符串替换(不进行JDBC类型转换)。
MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值;MyBatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。
使用 #{} 可以有效的防止SQL注入,提高系统安全性。${}无法防止SQL注入
一般${}用在我们能够确定值的地方,也就是我们程序员自己赋值的地方。而#{}一般用在用户输入值的地方!!
传递多个参数
顺序传参法:绑定性太强不推荐
@param注解传参法:给有名字的参数,再起一个Mapper配置文件要识别的名字
map传参法:#{}里面的名称对应的是Map里面的key名称
Java Bean传参法:#{}里面的名称对应的是User类里面的成员属性。
别名:
type:指定全类名
alias:指定别名
实现原理
缓存
一级缓存命中条件
同一会话(同一个sqlSession, 所以要开启事务)
.同一个mapper接口,相同的参数
同一个mybatis环境(如: 一个使用生产环境, 一个使用开发环境配置文件)
二级缓存命中条件
1. 同一个mapper接口,相同的参数
2. 同一个mybatis环境(如: 一个使用生产环境, 一个使用开发环境配置文件)
二级缓存开启的方式
在mapper接口上添加@CacheNamespace
在mapper.xml文件中添加<cache />,
执行顺序
1. 先从二级缓存查询结果, 有就返回
2. 再从一级缓存查询结果, 有就返回
3. 从数据库冲查询结果, 并在事务提交之后将查询结果添加到二级缓存
二级缓存的缺陷:不能及时同步而产生脏数据
Mapper接口开发
遵循的规范
Mapper.xml文件中的namespace与mapper接口的全限定名相同
Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
实现原理
运用jdk动态代理技术通过底层调用getMapper方法获取到MapperProxy代理对象,然后在执行功能
动态代理对象调用mapperMethod.execute方法通过switch语句判断操作crud,最后调用mybatis原生sqlsession方法实现;
动态sql
<if>标签通过test属性制定条件,来判断标签内元素的执行
<foreach>:循环执行sql拼接(相关参数如下)
collection:参数容器类型, (list-集合, array-数组)。
open:开始的 SQL 语句
close:结束的 SQL 语句
item:参数变量名
separator:分隔符
<sql>将一些重复性的 SQL 语句进行抽取,以达到复用的效果<include>引入
分页查询
PageHelp使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql:
多表操作
模型:
一对一:在任意一方建立外键,关联对方的主键
一对多:在多的一方建立外键,关联一的一方的主键。
多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键
一对一:
<resultMap>配置字段的映射关系
id属性:唯一标识
type属性:实体类对象
<id>:主键映射
<result>:非主键映射
coumn:表中字段
property:实体类对应字段
<association>:配置一方映射关系
property 属性:被包含对象的变量名
javaType 属性:被包含对象的数据类型
一对多
<collection>配置多的一方映射关系
property 属性:被包含集合对象的变量名
ofType 属性:集合中保存的对象数据类型
多对多
一种方式同一对多类似(可以理解为两个一对多)
利用<collection>标签中select属性直接输入sql语句查询
注解开发
常用注解
@Select(“查询的 SQL 语句”):执行查询操作注解
@Insert(“查询的 SQL 语句”):执行新增操作注解
@Update(“查询的 SQL 语句”):执行修改操作注解
@Delete(“查询的 SQL 语句”):执行删除操作注解
一对多
@Results:封装映射关系的父注解。
Result[] value():定义了 Result 数组
@Result:封装映射关系的子注解。
column 属性:查询出的表中字段名称
property 属性:实体对象中的属性名称
javaType 属性:被包含对象的数据类型
many 属性:一对多查询固定属性
@Many:一对多查询的注解。
select 属性:指定调用某个接口中的方法
获取主键自增id
配置useGeneratedKeys属性="true
配置<selectKey>标签
JDBC
概念:是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问(在持久层与数据库中间的访问接口)
本质:其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!
功能类:
DriverManager:注册驱动
Connection:数据库连接对象
Statement:执行sql语句对象
ResultSet:结果集对象
SQL注入攻击:
原理:在执行sql语句时,将一部分内容当做查询条件来执行了
解决方案:采用PreparedStatement进行预编译在参数位置+?占位符
数据库连接池:
概念:数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
自定义数据库连接池:
实现Connection getConnection();接口
创(自定义连接池中,成员变量定义一个存储Connection对象的集合)
塞(静态代码块种,创建多个连接,放入连接池种)
取(定义获取连接的方法getConnection)
还(处理close方法,将关闭连接改为归还连接(动态代理))