Mybatis【1】-- 第一个Mybatis程序
1.框架是什么
- 框架(
Framework
)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。- 一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。
- 个人理解:框架最重要的是把我们常用的,可以重复使用的功能抽象出来,不需要我们去重复写,我们只需要调用,或者按照规定配置,按照规则使用就可以了。这样的缺点是很多时候我们不知道为什么可以这样子使用,里面实现的细节被屏蔽掉了,这也是很多初学者很懵逼的地方,这时候追根问底就有一定必要性了。
2.Mybatis的介绍
Mybatis本来是Apache的一个开源项目iBatis
,这个项目2010年由Apache
迁移到了Google
,更名为Mybatis,2013年正式迁移到Github
。
Mybatis
是一个java中一个持久层的框架,在里面封装了jdbc操作,如果还不了解java如何使用jdbc访问数据库,那么可以查看这篇文章,封装使开发者只需要把精力放在开发sql语句上,不用去注册驱动,创建Connection,配置Statement,自己写代码管理事务等等。
Mybatis通过xml或者注解的方式将需要执行的statement配置好,通过映射将java对象与sql中的动态参数一起生成最终的sql语句,执行完之后返回对象,其中也是映射的结果。
3.Mybatis和Hibernate对比
1.Hibernate是全自动的ORM框架,也就是完全实现了POJO和数据库表之间的映射,会自动生成SQL。但是Mybatis不会自动生成,SQL还是需要自己写,但是映射关系框架会自动处理,这样一个好处就是可以看得到SQL,很多时候系统自动生成SQL并不是高效的,我们有时候需要优化SQL,或者一些复杂的查询可能自动化的很难做到,缺点就是需要花时间写。
2.使用XML文件进行配置,分离了了sql与代码,这样比较容易维护。
3.Mybatis是一个轻量级的框架。学习成本比Hibernate低很多,jar包依赖也很少,上手比较快。
4.Mybatis的结构图:
Mybatis的运行机制:我们通过配置Mybatis.xml(里面配置好数据库,需要扫描的mapper.xml文件等),程序会自动扫描配置好的mapper文件,当我们请求一个接口(请求数据库),接口会直接映射到对应的sql标签,同时将我们所写的配置文件读取并将数据库字段与对象属性匹配(这也是映射,如果不一致,需要自己手写映射关系),将sql参数传进去,然后执行相关的sql,返回时又做了一次映射,把对象返回给我们。当然,这么描述是很表面的,因为mybatis还有事务,缓存等方面,以上只是大概。
5.IDEA创建第一个程序
这里我们会使用idea创建项目,如果maven没有配置好,请参考:https://blog.csdn.net/aphysia/article/details/80363684
5.1创建mysql数据库
使用一下的命令行:
5.2 使用idea创建项目(Maven)
项目结构图(bean
下面放的类对应我们的数据库里面的student
表,也就是它的一个实体类,dao
包下面放着我们的数据库的操作,resources
下面放着我们的xml或者各种资源):
new
--> Project
-->点击Maven
点击next
,GroupId
,ArtifactId
可以自己指定,点击下一步
自己指定project name
(项目名),点击finish
往pom.xml
里面添加依赖,每一个Maven
--> Reimport
,这样就可以下载我们所需要的依赖了:
为了能实现日志的打印功能,我们在pom.xml文件中已经引入了日志dependency,在这里还需要在resources
文件夹下新建配置log4j.properties
文件,具体配置代表什么意思,可以参考log4j 与log4j2详解
log4j.properties
配置好这些之后,前面结构图上面写到有一个mybatis.xml
文件,里面配置了运行的环境(关于数据库的连接),连接的数据库可以配置多个,但是必须指定使用哪一个,这样做的原因的世界在xml文件进行修改不需要重新编译,更换数据库比较简单,除此之外,里面还需要配置mapper.xml,也就是映射文件,我们要告诉它,我们将sql配置写在哪个文件。
mybatis.xml
配置好mybatis.xml
文件我们就需要写sql语句,根据上面的mybatis.xml
,我们需要写mapper.xml
文件,下面的namespace
现在可以随意命名,因为只有一个mapper.xml文件,sql标签的id没有重复,执行时就是根据id来查找的,同时这里parameterType对应的是参数类型,类型要写带完整路径名的类:
mapper.xml
在bean包下面创建与数据库对应的Student
类【在bean包下】(这里先把属性名字和数据库的字段名一致,如果不一致需要自己写映射),注意里面的方法我们需要实现set和get方法,这个在IDEA里面,打开当前类,右键--> Gernarate
-->setter and getter
全选就可以生成。
Student.class
在这里我们需要写一个接口,来表示操作学生信息,先写一个插入学生信息的接口,那么肯定是传一个学生对象进去。
IStduent.class
下面就是接口的实现类(重点):
StudentDaoImpl.class
测试方法,如果不了解Junit测试请参考Junit测试详解:
MyTest.class
测试的结果,从最后三行我们可以看到执行的sql语句,以及参数等:
5.3 使用Eclipse,MyEclipse创建项目(Maven)
区别不大,直接创建java Project,如果下面没有lib这个文件,就要新建一个,然后把需要的包导(复制粘贴)进去,选中lib下面所有的包,右键-->
Build Path
-->Add to Path
声明:这样的写法不是最好的,但是这是初学者最容易接受的写法,后面会慢慢的精简,我们到时候不需要写接口的实现类,同时会把关于sqlSessionFactory相关的操作抽取出来成为一个工具类,就不用写那么多相同的代码了。
6.总结
最后总结一下上面写法的思路:
1.先读取mybatis.xml
文件流inputStream
,这是最重要的配置文件,里面的内容配置的是数据库环境,比如连接哪一个数据库链接,除此之外,还有注册映射文件,比如扫描哪一个文件,我们配置的是/mapper.xml
。
2.通过inputStream
创建sqlSessionFactory
,也就是sql会话工厂,所谓工厂,肯定是用来创造或者制造sqlSession
的。
3.sqlSessionFactory.openSession()
可以打开一个sqlSession
,也就是sql会话,获得这个操作数据库的会话窗口。
4.通过sqlSession
提供的方法去操作数据库,提供方法名,和参数即可。比如 sqlSession.insert("insertStudent", student);
,这个insertStudent
从哪里冒出来的?当然是前面扫描mapper.xml
的时候,mapper.xml
里面配置的,insertStudent
是id,需要是唯一的,就能通过这个找到对应的sql来执行。
5.提交会话,commit
,不一定需要,具体看数据库的类型.
6.关闭会话,sqlSession.close();
。
代码已经放在:https://github.com/Damaer/Mybatis-Learning
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
__EOF__

本文链接:https://www.cnblogs.com/Damaer/p/13992171.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库