MyBatis

什么是框架

框架是我们软件开发中的一套解决方案,不同的框架解决不同的问题。mybatis框架解决的是持久层的问题,spring mvc解决的是表现层的问题。

使用框架的好处

框架封装了很多细节,使开发者可以使用极简的方式实现功能,大大提高了效率。

三层架构

表现层:展示数据
业务层:处理业务需求
持久层:和数据库打交道

持久层计数解决方案

JDBC技术:
		Connection
		PreparedStaement
		ResultSet
Spring的JdbcTemplate:
		Spring对Jdbc的简单封装
Apache的DBUtils:
		和Spring的JdbcTemplate很像,也是对Jdbc的简单封装。

以上都不是框架:
	JDBC是规范
	Spring的Template和Apache的DBUtils都只是工具类

Mybatis概述

是一个持久层框架,用Java编写
封装了jdbc操作的很多细节,使开发者只需关注sql语句本身,无需关注注册驱动和创建链接等过程。
使用了ORM思想实现了对结果集的封装。
ORM:
Object Relational Mapping 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就可以实现操作数据库表

mybatis的入门

mybatis的环境搭建:
第一步:创建maven工程,并且导入坐标
第二步:创建实体类和dao接口
第三步:创建mybatis的主配置文件
SqlMapConfig.xml
第四步:创建映射配置文件
IUserDao.xml
环境搭建的注意事项:
第一个:创建IUserDao.xml和IUserDao.java时名称是为了和我们以前的知识保持一致,在mybatis中把持久层的操作接口名称和映射文件也叫做:Mapper。所以IUserDao和IUserMapper是一样的。
第二个:在idea中创建目录时,和包是不一样的,包是可以用点.分隔形成多级目录。
第三个:mybatis的映射配置文件必须和dao接口的包结构相同
第四个:映射配置文件的Mapper标签namespace属性必须是到dao接口的全限定名。
第五个:映射配置文件的操作配置,id属性必须是dao接口的方法名。
第三,第四,第五点是我们必须遵守的,如果我们遵守了这三点,我们在开发中就无需再写dao的实现类
在这里插入图片描述
mybatis的入门案例
第一步:读取配置文件
第二部:创建SqlSessionFactoty工厂
第三步:创建SqlSession对象
第四步:创建dao接口的实现类
第五步:执行dao中的方法
第六步:释放资源

注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中。
配置的方式:指定实体类的全限定名。

Mybatis基于注解的入门案例:
将IUserDao.xml移除,在dao接口的方法上使用@Select注解,并指定sql语句,同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。

明确:
在实际开发中,都是越简便越好,所以都是不采用dao实现类的方式。不管使用xml还是注解。
但是mybatis是支持写dao实现类的

自定义Mybatis的分析:
mybatis在使用代理的dao的方式实现增删该查时做什么事呢?
只有两件事:
第一:创建代理对象
第二:在代理对象中调用selectList方法

执行查询所有的分析
如下图
在这里插入图片描述

创建代理对象的分析:
在这里插入图片描述
自定义mybatis能通过入门案例看到类
class Resource
class SqlSessionFactoryBuilder
interface SqlSessionFactory
interface SqlSession

OGNL表达式
映射配置文件中的 parameterType属性(参数属性),可以传递基本数据类型,也可以传递对象类型,当传递对象类型时,就用OGNL表达式。
object graphic navigation language
对象 图 导航 语言

通过对象的取值方式来获取对象。在写法上将get省略了。
比如:我们获取用户的名称
类中的写法:user.getUsername();
OGNL表达式写法:user.username;
mybatis中为什么能直接写username而不用user.呢:
因为在parameterType中已经提供了属性所属的类,此时不需要再写对象名。
#{}中的参数为pojo的属性名称
在windows操作系统下的mysql数据库是不区分大小写的。
我们要求javabean类的属性名称和数据库中表的名称是一致的,若不一致,会产生什么结果,或者说要怎样修改?
以查询为例,1:要用as来起别名(在xml文件的selet语句中使用)。2:使用resultMap建立实体类和列名属性之间的关系。(此时不再用resultType属性,而是用resultMap)

mybatis中的连接池以及事务控制(原理部分了解,应用部分会用)
mybatis中连接池使用及分析
mybatis事务控制的分析

mybatis基于xml配置的动态SQL语句使用(会用即可)
mapper配置文件中的几个标签:



mybatis中的多表操作(掌握应用)
一对多
多对多
一对一(?)


1:连接池:
可以减少我们获取链接所消耗的时间
连接池就是用于存储链接的一个容器。
容器就是一个集合对象,该集合必须是线程安全的(不能两个线程拿到同一个链接)。
该集合还必须实现队列的特性:先进先出。
2:mybatis中的连接池
mybatis连接池提供了三种方式的配置:
配置的位置:
主配置文件SqlMapConfig.xml的dataSource标签。type属性就是采用何种连接池方式。
type属性的取值:
POOLED 采取传统的javax.sql.DataSource规范中的连接池 mybatis中有针对规范的实现
UNPOOLED 采用传统的获取链接的方式,虽然也实现了javax.sql.DataSource接口,但是没有使用池的思想
JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同服务器所能拿到的DataSource是不一样的。注意:如果不是web或maven的war工程,是不能使用的。
我们课程中使用的是tomcat服务器,采用连接池是dbcp连接池。
POOLED的思想
在这里插入图片描述
在这里插入图片描述
图示补充:若没达到最大数量,则创建一个链接并返回。

我们在开发中肯定是使用POOLED

Mybatis中的事务:
什么是事务
事务的四大特性ACID
不考虑隔离可能会出现的问题
解决办法:四种隔离级别

mybatis中通过sqlsession对象的commit方法和rollback办法实现事务的提交和回滚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值