mybatis01_mybatis原理_入门查询、maven配置

本文深入解析MyBatis框架的使用方法,包括环境搭建、配置文件详解、ORM概念介绍,以及通过注解和XML配置实现数据库操作的流程。探讨了MyBatis如何简化Java持久层开发,提高开发效率。

三层架构:表现层、业务层、持久层
在这里插入图片描述
框架的含义就是一个半成品软件,使用框架的好处就是程序员不需要管很多繁琐的步骤,这些是框架帮你完成的
这样程序员就可以专注于业务的实现
在这里插入图片描述
在这里插入图片描述
JDBC数据库连接我们关心的只是那条sql语句,其他都交给框架处理
mybatis将jdbc进行封装,我们使用mybatis来执行sql,其实是mybatis通过jdbc来操作数据库,然后从jdbc中取出结果返回
在这里插入图片描述
ORM:对象关系映射,就是把数据库表和java实体类进行对应,实现我们操作实体类就是在操作数据库表
在这里插入图片描述

环境搭建

在这里插入图片描述
在这里插入图片描述

记住:新建的maven项目必须先修改maven配置:
修改成本地仓库,否则会一直从中央仓库下载插件
使用本地maven及下边的settings.xml配置,也就是使用配置的本地仓库

一定是在修改默认配置,也就是所有项目都使用的maven配置
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
1、导入jar包坐标:
在mybatis官网找到依赖代码
在这里插入图片描述
mybatis、mysql数据库连接、log4j用于日志、junit单元测试
在这里插入图片描述
2、创建数据库表
在这里插入图片描述
3、创建实体类和dao接口
在这里插入图片描述
3、mybatis主配置文件
在这里插入图片描述
4、写UserDao的映射配置文件
记住要写命名空间!!
在这里插入图片描述

注意事项:包的创建com.sjg.domain是三级目录
但是创建Directory时com.sjg.domain是一级目录,所以必须一层一层创建才能达到三级目录的效果
映射文件位置要和dao接口位置包结构相同
遵守了映射规范,那么就不用写dao的实现类,可以直接查询到数据库表,所以比自己写实现类方便
在这里插入图片描述
mybatis使用方式
在这里插入图片描述
第一步就是读取配置文件,连接数据库
第二步创建工厂
第三步通过工厂产生对象操作数据库、
第四步,因为我们没有UserDao实现类,不能直接创建对象,只能通过sqlSession对象创建UserDao接口的代理对象
第五步,创建的实现类就已经方法增强,可以使用方法了,直接查询即可
在这里插入图片描述
我们还要告诉框架,将从user表查询出来的结果集封装到哪里,封装到User实体对象,然后将这些对象添加到List集合
在这里插入图片描述

使用注解方式进行查询

这是IUserDao.xml就不需要 了,删除
直接在接口方法上写注解
在这里插入图片描述
主配置文件修改
使用class属性指定被注解的dao全限定类名
在这里插入图片描述
在这里插入图片描述
当然,我们完全可以通过自己创建UserDao的实现类,实现查询方法完成查询
在这里插入图片描述
但是框架的使用意义就是简化编程,而且mybatis有这种注解方式,所以我们要使用注解方式实现方法。
这说明了我们之前在IUserDao.xml中写命名空间和方法名的意义,就是要通过接口名和方法名,找到对应的接口和方法,否则框架mybatis也不知道映射到哪里
通过这种注解的方式,简化了这种映射关系
在这里插入图片描述

设计模式分析

在这里插入图片描述
1、获取配置文件不使用绝对路径和相对路径,都会导致项目改变位置的时候读不到配置文件
2、创建factory使用了构建者模式,builder就是构建者,创建工厂类比交给包工队来完成,in好比是钱,给钱包工队就开始干活。使得繁琐的细节都隐藏起来了。将对象的创建细节隐藏,使用者直接调用方法
3、创建sqlSession使用工厂模式:由工厂去生产session对象,避免自己创建对象导致对象依赖,对象依赖也就出现新建的对象在新的需求中又要创建对象,就需要不停修改代码
工厂模式降低了类之间的依赖关系,不用每次编译部署启动tomcat
4、getMapper使用了代理模式:不修改源码基础上对已有方法增强。也就是通过创建dao接口实现类的代理对象,从而实现不实现dao实现类也能实现功能。
其实从加载配置到通过代理创建对象中间都可省略,之所以这样繁琐,是因为这样增强了灵活性,这中间可以通过重载方法实现更多功能。

详细分析

在这里插入图片描述
通过IUserDao.xml文件找到可执行的sql语句,创建preparedStatement对象,但是现在还不确定到底是封装到哪个对象
在这里插入图片描述

反射回顾

在这里插入图片描述
首先获取类加载器,将Student.class文件加载到内存,得到Class类对象
然后就可以通过这个类对象创建实例,默认调用Student类的无参构造器
在这里插入图片描述
上边是 获取Class的详细方式
下边是获取Class对象的三种方式
获取Class对象的方式:
1、java源代码阶段:Class.forName(类全名) :将class文件加载到内存,返回class对象
2、class类对象阶段:通过 类名.class获取 :class文件已经加载到内存
3、运行时阶段:也就是已经有对象了,那么就通过对象方法:对象名.getClass()获取

通过class对象创建实例

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
上面过程,知道resultType,就根据这个类的全限定类名,通过反射机制,将User.class文件加载到内存,创建class对象,进而通过newInstance()创建User对象
在这里插入图片描述
User对象有了之后,还是使用反射,获取到User对象的各个属性,然后mybatis将属性与User数据库表列名对应,取表中的值放到对应对象属性下
在这里插入图片描述
上图映射信息中,包含sql语句,还有封装的实体类名,因为我们要明确这种对应关系,也就是sql执行结果封装到哪个对象,
所以将这两个信息封装到一个mapper对象。
这样将映射文件中信息装在一个map对象,如下:
就可以明确这种查询的关系了
在这里插入图片描述
在这里插入图片描述
上边展示了session.getMapper(UserDao.class)
执行细节,就是通过动态代理的方式,在代理对象的处理器部分执行了selectList方法,查询数据库
通过代理模式增强方法,原来这个userDao接口中只有方法定义,代理对象的处理器中实现了方法,执行了selectList方法,
而这个selectList方法当中就包含了连接数据库,创建PreparedStatement对象等一系列过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值