什么是mybatis,全是干货
博主的每篇博文的浪漫主义
【“爱意就像大雨落下”】 https://www.bilibili.com/video/BV1444y1f7m6?share_source=copy_web&vd_source=385ba0043075be7c24c4aeb4aaa73352
“爱意就像大雨落下”
又又又见到各位读者拉,①我为什么又说又了??
没错,我们今天的学习笔记的内容是
- 什么是mybatis?
- 怎么样来创建一个mybatis?
- mybatis所带来的一系列东西!
什么是mybatis?
MyBatis 是一个开源、轻量级的数据持久化框架。
MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。
那什么是数据的持久化尼?
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。例如,文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。
MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。
我们称之为ORM。
那什么是ORM尼?
ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。
MyBatis 的主要思想是将程序中的大量 SQL 语句剥离出来,使用 XML 文件或注解的方式实现 SQL 的灵活配置,将 SQL 语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改 SQL 语句。
大伙呀,要好好理解这段话呀!!
总归有优点吧,那不然还要这个干什么?
- 与JDBC 相比,减少了 50% 以上的代码量
- MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL 写在 XML
中,和程序逻辑代码分离,降低耦合度,便于同一管理和优化,提高了代码的可重用性。 - 提供 XML 标签,支持编写动态 SQL 语句。
- 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
大家看到这一段应该不陌生吧,通过jdbc连接数据库
使用 jdbc编程连接数据库的步骤:
- 加载数据库驱动
- 创连并获取数据庳链接
- 创建jdbc statement对象
- 设置sql语句
- 设置sql语句中的参数(使用preparedStatement)
- 通过statement执行sql并获取结果
- 对sql执行结栗进行解析处理
- 释放资源(resultset、preparedstatement、connection)
什么是mybatis
我们再来复习一遍!
MyBatis是一个优秀的持久层框架(ORM),它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement (statement,preparedstatemnt、CallableStatement〉配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
实现一个简易mybatis的步骤怎么来!!
数据源
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=root
jdbc.password=123456
mybatis-config.xml全局文件进行配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="db.properties"></properties><settings><setting name="mapUnderscoreToCamelCase" value="true"/><setting name="logImpl" value="LOG4J"/><!--<setting name="logPrefix" value="mapper" />--></settings><!-- 配置mybatis运行环境 --><environments default="development"><environment id="development"><!-- 使用JDBC的事务管理 --><transactionManager type="JDBC"/><dataSource type="POOLED"><!-- MySQL数据库驱动 --><property name="driver" value="${jdbc.driver}" /><!-- 连接数据库的URL --><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!--mapper sql映射文件--><!-- 将mapper文件加入到配置文件中 --><mappers><mapper resource="UserMapper.xml"/></mappers>
</configuration>
UserMapper(interface)
public interface UserMapper {
//根据ID查询User findById(Integer id);
}
UserMapper(xml映射文件)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper"><select id="findById" resultType="domain.User">select * from USER where id = #{id}</select>
</mapper>
通过配置文件实现
@Testpublic void test() throws Exception {String resource = "mybatis-config.xml";
//获取配置文件流InputStream resourceAsStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession session = sqlSessionFactory.openSession();User u = session.selectOne("mapper.UserMapper.findById", 1);System.out.println("user:" + u);session.close();}
SqlSessionFactory是SqlSession的创建工厂,每一个SqlSession实例代表应用程序和数据库的一次连接。 在整个应用当中,
- 我们应该只创建一个SqlSessionFactory实例,但是可以有多个SqlSession实例。
那么,
我们来学习一下SqlSessionFactory和SqlSession
这里的学习笔记知识点来自这位博主点这里
SqlSessionFactory
- SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像。
- SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。
- 每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
- SqlSessionFactory是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在。在应用运行期间不要重复创建多次,建议使用单例模式。
- SqlSessionFactory是创建SqlSession的工厂。
SqlSession
- SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection。
- 它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。
- SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句。
- 每个线程都应该有它自己的SqlSession实例。
- SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中。
- 使用完SqlSeesion之后关闭Session很重要,应该确保使用finally块来关闭它。
SqlSession源码:
SqlSessionFactory调用过程
mybatis框架主要是围绕着SqlSessionFactory进行的,创建过程大概如下:
- 定义一个Configuration对象,其中包含数据源、事务、mapper文件资源以及影响数据库行为属性设置settings
String resource = "mybatis-config.xml";//全局配置文件路径InputStream inputStream = Resources.getResourceAsStream(resource);//读取xml文件
- 通过配置对象,则可以创建一个SqlSessionFactoryBuilder对象
new SqlSessionFactoryBuilder().build(inputStream);//构建会话工厂类
- 通过 SqlSessionFactoryBuilder 获得SqlSessionFactory 的实例。
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- SqlSessionFactory 的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库进行操作
SqlSession session = sqlSessionFactory.openSession();
根据上面代码:mybatis有三个基本要素:
- 每个 MyBatis 应用程序都以一个 SqlSessionFactory 对象的实例为核心。
- 首先获取 SqlSessionFactoryBuilder 对象,可以根据 XML 配置文件或者 Configuration
类的实例构建该对象。 - 然后获取 SqlSessionFactory 对象,该对象实例可以通过 SqlSessionFactoryBuilder 对象来获取。
- 有了 SqlSessionFactory 对象之后,就可以进而获取 SqlSession 实例。SqlSession
对象中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句。
我们再来看一下,通过常规代码实现
注意在下面该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套 Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下, BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)
@Testpublic void test5() throws Exception {//创建连接池DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3308/数据库名", "root", "123456");//事务TransactionFactory transactionFactory = new JdbcTransactionFactory();//创建环境Environment environment = new Environment("development", transactionFactory, dataSource);//创建配置Configuration configuration = new Configuration(environment);//开启驼峰规则configuration.setMapUnderscoreToCamelCase(true);//加入资源(Mapper接口)configuration.addMapper(UserMapper.class);//通过一个SqlSessionFactoryBuilder对象获取一个SqlSessionFactory工厂实例,通过唯一工厂创建SqlSession//(相当于获取数据库连接)SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);SqlSession session = sqlSessionFactory.openSession();try {//statement:sql唯一标识(mapper.xml映射文件中的id标识)//parament:参数User user = session.selectOne("mapper.UserMapper.findById", 1);System.out.println(user);//操作数据时,需要有提交操作//提交sessionsession.commit();} finally {//关闭sessionsession.close();}}
救救就学到这里,博主的文章为什么没人看,虽然是抄作业吧,但我也是仔仔细细过了一遍的
提示:对于这篇学习笔记就暂时到这了,兄弟们加油
对于这篇学习笔记就暂时到这了,兄弟们加油
从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
如果又出错的,请各位友友指正。
新人报到,各位友友们,给我个三联(点赞,关注,收藏)
什么是mybatis,全是干货相关推荐
- 软件项目管理工具,JAVA WEB 框架技术(结合实际工作经验,全是干货)
文章目录 前言 负载均衡:Nginx+Keepalived 统一网关:getway 统一配置中心:nacos 限流:Sentinel 设计工具:蓝湖 前端框架:vue 前端监控工具:Sentry JA ...
- oracle 哦【的【,清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...
- mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...
- 最全数据指标体系集合!覆盖9个行业4个业务场景,全是干货
上次我发了第一个版本的6行业业务指标体系,非常受大家欢迎,但是有一些人没有领到原图. 这一次,老李花了两周时间去整理了一份最新最全的指标体系,涵盖了互联网.零售.电商.在线教育.餐饮.保险.银行.制造 ...
- 计算机组装硬件要求,组装电脑必懂的硬件知识,全是干货,教你选购硬件不求人...
随着时代的发展,电脑也不断随着时代的发展进行更新,由于各方面的实际工作需要,很多人对电脑的需求也在增加.为了更好地适应网络的快速发展,有多人会根据自己的工作需要更换和组装新的电脑. 在组装一台新电脑之 ...
- JAVA最常用容器、API(全是干货,刷题必备高效工具!)
包含众多资源,都是自己两年间自己总结的,都是非常非常常用的.有各大容器.以及配套工具类的讲解,还有常用API,以及JAVA8中的Lambda.函数式接口,全文很长,全是干货,刷题必备!请参看目录阅读! ...
- 爬梯:MyBatis全操作
学习资源整理自:B站<狂神说> 扎实基础,将Mybatis全面走一遍! Mybatis中文官网 MyBatis全操作 1.Hello MyBatis 数据库表环境 CREATE TABLE ...
- 全是干货!UI设计的30条黄金准则!
http://www.wex5.com/portfolio-items/js-1/ 全是干货!UI设计的30条黄金准则! 总的来说,好的UI界面有几个特征:简洁.便利.目标明确.人性化.字面上看这几点 ...
- 《史上最全、最强Java学习路线知识点整理!!全是干货!!》
自己平时学习整理的笔记,分享给各位,希望可以帮助各位,文章很长,点击收藏慢慢看吧!以后会分别对各个知识点进行透彻分析,敬请期待! Java基础 集合 HashMap 1.7 数组 + 链表.扩容时头插 ...
最新文章
- python实战演练_python实战演练(三)购物车程序
- AutoCAD.net/Map 3D/AIMS/MapGuide/Civil 3D二次开发学习指南
- 15 个 JavaScript Web UI 库 (转)
- 【错误记录】Android Studio 编译报错 ( Invalid main APK outputs : EarlySyncBuildOutput )
- ASA IPSEC ×××配置
- 十三、开多线程,咱们一起来斗图
- 订单数据持久化和验证相关解决方案
- Android之自定义控件深入
- 一个真实的案例———HPUX调整LUN大小识别更改
- Ai极限真的存在吗?
- vc++源码免杀特殊技巧
- WinForm 对EXCEL 的操作(三)
- 【Python】长文详解python中的正则表达式
- redhat红帽 centos yum管理
- 小学计算机上课课前导入视频教程,小学信息技术教学中微视频的导入实践分析...
- IOS开发 当滑动tabelview时,使键盘滑落
- Android证书生成(android studio)
- 代码优化- 前端优化
- 《地理信息系统导论》chapter 4 栅格数据模型
- STM32-uasrt发送0X01给上位机,上位机接收到的字符串为0XFC
热门文章
- 2022年湖北省光电子信息和生命健康领域科技计划成果路演征集条件以及申报时间流程汇总!
- python分苹果问题_蓝桥杯--算法提高--VIP--分苹果题目(差分数组)
- 简要了解ios机型,推出年份,型号,容量,显示屏大小以及iOS系统
- 第四讲:统计分析之良率和敏感度分析
- 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍
- 抖音封禁3973个炫富账号,一股清流!
- 【概率论与数理统计】p1-4 前言、随机试验、样本空间、事件间的关系、事件的运算及运算法则
- QT 5.7 for iOS Xcode 8 Project ERROR: Xcode not set up properly. You may need to confirm the license
- 长江存储一笔高额投资,让SK海力士开始钻研我国专利法
- CSS把图片设置为背景