【JAVA】Mybatis

一 从JDBC到Mybatis

1.JDBC

⑴加载jdbc驱动

⑵建立并获取数据库连接

⑶创建 jdbc statments对象

⑷设置sql语句的传入参数

⑸执行sql语句并获得结果

⑹对查询结果进行转换处理并将处理结果返回

⑺释放资源

2.Mybatis优化

⑴连接获取和释放  减少数据库频繁的开启和关闭

⑵sql统一存取  将sql语句从java类中提取到xml中

⑶传入动态sql  有的时候我们的查询条件不同,有时候一个查询条件,有时候多个查询条件,这时候我们就可以在xml中采用类似jstl标签来解决

⑷结果映射  可以告诉sql处理器我们需要返回什么类型的对象

⑸结果缓存  可以通过缓存来提升性能

3.Mybatis架构分析

⑴接口层

①使用传统的mybatis的api

②采用Mapper接口,常用

⑵数据处理层

①通过传入参数动态构建SQL

②将结果封装成结果集

⑶框架支撑层

①事务管理机制

②连接池管理机制

③缓存机制

④sql语句的配置方式

⑷引导层

配置和启动mybatis的配置信息

二 Mybatis主要构件

⑴SqlSession:表示和数据库交互的会话,SqlSession根据Statement ID, 在mybatis配置对象Configuration中获取到对应的MapperStatement对象,然后调用执行器

⑵Executor:MyBatis执行器,是MyBatis 调度的核心,会根据是否有缓存来从缓存中读取或从数据库读取,并把结果放到缓存中

⑶StatementHandler: 封装了JDBC Statement操作

⑷ParameterHandler: 依靠TypeHandler设置SQL语句中的?为指定参数

⑸ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合

⑹TypeHandler: 负责java数据类型和jdbc数据类型之间的映射和转换

⑺MappedStatement: MappedStatement维护了一条<select|update|delete|insert>节点的封装

⑻SqlSource: 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回

⑼BoundSql: 表示动态生成的SQL语句以及相应的参数信息

⑽Configuration: MyBatis所有的配置信息都维持在Configuration对象之中

三 Mybatis初始化机制

1.mybaits通过加载xml配置文件,把配置文件组装成内部Configuration对象

2.基于java API 这种方式需要mybatis使用者手动创建Configuration对象,然后set进去

四 Mybatis数据源

⑴unpooled 不使用连接池的数据源

⑵pooled 使用连接池的数据源

⑶jndi 使用jndi的数据源

五 Mybatis事务管理机制

⑴使用JDBC事务管理机制

即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等。

⑵使用MANAGED事务管理机制

通过容器(如JBOSS,Weblogic)来进行事务管理,所有它对事务提交和回滚并不会做任何操作,记住如果我们没有容器,那么对数据库的操作是无效的。

六 一级缓存二级缓存

每当我们使用mybatis开启一次数据库会话,mybaits就会创建一个sqlSession对象。

1.一级缓存(默认开启)

在一次数据库查询完全相同的SQL语句会直接在缓存中读取。如果SqlSession执行了DML操作(增删改),并提交到了数据库,MyBatis会清空SqlSession中的一些缓存,避免脏读。

2.二级缓存

跨SqlSession的缓存,二级缓存是根据namespace来区分,namespace相同缓存在同一区域。

Mybatis的查询顺序是: 二级缓存 ———> 一级缓存 ——> 数据库

七 Mybatis中#和$的区别

#{}是经过预编译的,是安全的;${}是未经过预编译的,是非安全的,存在SQL注入。

有时候可能需要直接插入一个不做任何修改的字符串到SQL语句中。这时候应该使用${}语法,比如,动态SQL中的字段名,如:ORDER BY ${columnName}

 

 

 

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值