day19MyBatis入门Word格式文档下载.docx
- 文档编号:21670892
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:29
- 大小:885.17KB
day19MyBatis入门Word格式文档下载.docx
《day19MyBatis入门Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《day19MyBatis入门Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
IT语境中的框架,特指为解决一个开放性问题(而不是具体问题)而设计的具有一定约束性的支撑结构。
在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。
1)框架本身一般不完整到可以解决特定问题,但是可以帮助您快速解决特定问题;
没有框架所有的工作都从零开始做,有了框架,为我们提供了一定的功能,我们就可以在框架的基础上开发,极大的解放了生产力。
不同的框架,是为了解决不同领域的问题。
一定要为了解决问题才去学习框架。
2)框架天生就是为扩展而设计的;
3)框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用的实用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。
在java中就是一系列的jar包,其本质就是对jdk功能的扩展.
约束性:
针对解决特定问题的软件框架会首先定义问题的边界,进而将相关的软件组件约束在这个边界内,保持框架在解决问题方面上的内聚性。
支撑性:
框架本身是不解决什么问题的,但给了解决问题的相关组件一个插接、组合的底子,这个底子的科学性和易用性直接影响到在此之上进行进一步开发的科学性和方便性。
多样性:
当然某一领域框架会很多,每个人都可以抽取框架。
这时候就会出现一些优秀实践,大家都拿来用
为什么要使用框架?
最佳实践
1、实际上是无数程序员经历过无数次尝试之后,总结出来的处理开发性问题的特定方法.
2、专门为某类开发性问题而设计并实现,开源出来让大家实践。
最后被大家公认这个领域的最佳实践。
如果把程序员的自由发挥看作是一条通往成功的途径,最佳实践就是其中的最短路径,能极大的解放生产力.
最佳实践三要素:
可读性,可维护性,可拓展性.
简单就是美:
消除重复,化繁为简
框架用起来真的比我们用底层的(原生的)简单嘛?
框架功能比底层的更加强大?
2.3什么是ORM
ORM:
对象关系映射(ObjectRelationalMapping,简称ORM),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术
关系模型:
一张二维表,由行(记录)和列(字段)来组成。
ORM的概念
ORM主要解决对象-关系的映射:
对象-关系映射(Object/RelationMapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。
面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
面向对象概念面向关系概念
----------------------------
类表
对象表的行(记录)
属性表的列(字段)
ORM的实现思想:
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作(insert,update,delete,select)转化为对对象的操作(保存对象、更新对象、删除对象、查询一个对象、查询集合对象)。
这样操作的前提是对象-关系映射,可以采用元数据来描述对象-关系映射细节:
元数据通常采用XML格式,并且存放在专门的对象-关系映射文件中。
因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
那怎么转换为数据库的操作呢?
当然像orm这样开发的经典的问题肯定有对应的框架了
ORM框架的操作数据库关系的方式
首先,通过jdbc也能实现对象实体和数据库关系的映射.那就是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
也就是各种DAO(UserDAODepartmentDAO等)。
最大的缺点就是:
1、sql写在JAVA代码中改修改sql必须修改代码。
2、有很多重复性的操作(比如获取连接,释放资源等)
Orm框架的操作数据库关系方式有很多种,常用的有两种:
1、Sql操作方式(对jdbc进行封装):
把SQL配置到配置文件中,通过不同SQL中完成对象实体和数据库关系相互转换的操作。
(mybatis的实现方式)
完整操作:
直接映射的是对象实体和数据库关系映射。
操作数据库关系,不用写SQL由框架自己生成。
(hibenate实现方式)
ORM框架工作原理
1、以一定的映射方式,把实体模型和数据库关系的映射
2、ORM框架启动时加载这些映射和数据库配置文件
3、ORM通过对最原生jdbc的封装提供更加便利的操作API
4、Dao通过ORM提供的便捷API以对象的方式操作数据库关系。
流行的ORM框架
1.JPA:
本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.
2.Hibernate:
目前最流行的ORM框架.设计灵巧,性能一般(自己去控制性能,非常不好控制),文档丰富.(完全操作方式)
Hibernate是一个完整的ORM框架,我们不需要写一句SQL;
3.MyBatis:
本是apache的一个开源项目iBatis,提供的持久层框架包括SQLMaps和DAO,允许开发人员直接编写SQL(更好灵活).(Sql操作方式)
MyBatis并不是一个完整的ORM框架,因为我们还需要自己去写SQL
问题:
以后工作是用Hibernate还是用MyBatis呢?
面试题:
ORM的认识?
MyBatis与Hibernate的区别?
上面有内容有认识与区别!
大家先简单理解一下,以后学过Hibernate有了深刻的认识再来完善这一道面试题。
2.4MyBatis的认识
再回到我们最初的认识:
咱们已经认识了ORM与框架,相信对于MyBatis的定义大家也有一个大致的了解了。
现在,咱们再对MyBatis进行认识与总结。
2.4.1MyBatis的起源
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。
2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAO)
2.4.2MyBatis的介绍
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索。
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。
mybatis相较于jdbc的优点?
1、把sql语句从java代码中抽取出来,方便维护。
并且修改sql时不用修改java代码
2、不用手动设置参数和对结果集的处理。
准备步骤小贴士:
1导包
2建表(product)
3domain(Product)
4准备dao层(CRUD)
5测试(不是必需的)
注意:
我们要引哪些包?
1一定要引入驱动包(不要忘了)
2导入mybatis的核心包
3导入mybatis的依赖包
三MyBatis完成CRUD
3.1操作前的准备工作
创建一个java项目?
略过
3.1.1导入相应的jar包
MyBatis是一个框架,咱们说了。
在Java中框架就是一组Java类最后打成jar包。
因此,不只是这个框架,以后咱们学习的所有框架。
在使用前都要先导入相应的jar包。
在导入jar包之前,我们得先说一下,MyBatis是操作数据库的框架。
咱们以前学JDBC的时候说过:
要操作数据库,一定不要忘了导入相应的数据库驱动包。
注:
驱动包就是各大数据库厂商根据JDBC规范实现的jar包(忘了的同学可以去看JDBC第一天的笔记)
然后找到MyBatis(相关文件我们已经准备好,大家也可以到网上进行自行下载),再导入MyBatis的核心包与依赖包。
下图为我们使用MyBatis要导入的包:
3.1.2准备相应的表
咱们对数据库进行操作,肯定需要准备表。
这没啥好说的。
现在直接引入我们准备好的表即可:
3.1.3准备相应的domain
创建一个Product对象,和数据库的表对应
注:
类的名称和类型都和我们的product表相对应匹配
publicclassProduct{
privateLongid;
//商品名称
privateStringproductName;
//品牌
privateStringbrand;
//供应商
privateStringsupplier;
//零售价
privateBigDecimalsalePrice;
//进价
privateBigDecimalcostPrice;
//折扣价
privateDoublecutoff;
//商品分类编号
privateLongdir_id;
//提供getter与setter...
}
3.1.3product的dao层准备
dao层不清楚的同学请出门右转,JDBC第一天有相应的介绍
/**
*商品的持久操作
*@authorAdministrator
*/
publicinterfaceIProductDAO{
/**
*添加一个商品
*/
voidsave(Productp);
*更新一个商品
voidupdate(Productp);
*删除一个商品
voiddelete(Longid);
*得到一个商品
Productget(Longid);
*得到所有商品
List<
Product>
findAll();
3.1.4来一个测试(非必需)
写代码要测试,这是一个好习惯!
3.2MyBatis的入门与核心配置文件
一切准备就绪。
接下来就是开始使用MyBatis了。
但是问题来了,怎么用呢?
好了,拥有无比丰富的经验的我们,在经过dom4j与fileUpload组件的洗礼了。
大家应该知道咱们马上要找文档了吧。
不过MyBatis的文档与之前的文档可不一样。
它直接提供了一个pdf文件(相当于给了咱们一本书),虽然说我们很不愿意(其实心里偷着乐),但是也只能看着官方提供的书来进行学习了。
不过这个文档似乎又是英文版!
喔!
NO!
放心吧:
早有好事的人把这个翻译成中文了,好了。
又是我的名言:
不要客气!
好了,该文档虽然只有50多页,但是已经足够咱们学习了。
咱们用MyBatis连接数据库,需要拿到一个对象做叫SqlSession(类似以前JDBC的Connection)
而要拿到SqlSession,就需要拿到SqlSessionFactory对象
先来入个门吧:
入门开始,除了介绍什么是MyBatis之后,就在说一个核心对象:
SqlSessionFactory,接下来,咱们就是要想方设法拿到这个核心对象。
那SqlSessionFactory对象怎么拿到:
直接找到文档中的从XML中构建SqlSessionFactory这一小节开始即可。
从这一节中我们可以看出以下几个点:
1我们需要准备一个核心的xml文件
2拿到SqlSessionFactory之前需要读取核心的xml配置文件
3需要构造者(SqlSessionFactoryBuilder)来创建它
好了,大概介绍完毕后,我们可以开始准备核心配置的xml文件了
在资源文件夹下面创建一个文件,取名为mybatis-config.xml
以把文档中的配置拷备过来(先做了解测试,等功能可以用起来后,再自己去写这个配置)
下面是我对核心配置的一个简单介绍:
我们需要准备几个东西需要一个环境environments
environments里面两个内容(transactionManager,dataSource)
dataSource:
driver,url,username,password(连接数据库的最小单位)
<
configuration>
<
!
--环境们(很多环境的意思)
default:
默认使用哪一个环境(必需对应一个环境的id)
-->
environmentsdefault="
development"
>
<
--
一个环境id:
为这个环境取唯一一个id名称
environmentid="
<
事务管理type:
JDBC(支持事务)/MANAGED(什么都不做)
-->
transactionManagertype="
JDBC"
/>
--数据源,连接池type(POOLED):
MyBatis自带的连接池-->
dataSourcetype="
POOLED"
<
--连接数据库的参数-->
propertyname="
driver"
value="
com.mysql.jdbc.Driver"
url"
jdbc:
mysql:
///mydb"
username"
root"
password"
admin"
/dataSource>
/environment>
/environments>
--这个mappers代表的是相应的ORM映射文件-->
mappers>
mapperresource="
cn/itsource/domain/ProductMapper.xml"
/mappers>
/configuration>
核心文档已经搭建准备就绪,心里还有一点小激动。
但是总是觉得,少了点什么?
是什么呢?
请大家回顾与分析我们刚才学习的内容:
MyBatis是一个ORM映射框架,请问ORM体现在哪?
核心文件中有一个mappers,它指向了一个映射文件。
映射文件在哪?
不是说好的MyBatis要写SQL语句么?
SQL语句又在哪里?
一切的一切都会出现在我们的下一个章节:
对象与关系的映射!
敬请关注。
现在直接写xml是没有提示了,在xml的约束中,咱们讲过,当有约束的时候,xml就会有提示。
提示:
出门再拐在xml那一章的schema与dtd约束
而现在咱们的约束是在网络上。
在Eclipse中,我们可以找到相应的约束文件,然后配置到自己本地即可。
3.3对象与关系的映射(ORM)
接下来,解决上一章的几个问题。
直接找到我们文档中的探究已映射的SQL语句,在这里,我就可以看到一段xml(如下图),这个xml就是咱们需要的映射文件,它就可以体现出ORM,并且在这里面,也可以愉快的写sql语句了。
在这里,我们可以看懂一些配置的意思,但是也有一些东西不是很明白。
在下面的实例中,我已经对每一句配置准备好了相应的解释:
?
xmlversion="
1.0"
encoding="
UTF-8"
DOCTYPEmapperPUBLIC"
-//mybatis.org//DTDMapper3.0//EN"
"
http:
//mybatis.org/dtd/mybatis-3-mapper.dtd"
这个Mapper的主要功能就是写sql
mapper:
根
namespace:
命令空间(用来确定唯一)以前这个是可以不加的,现在必需加
-->
mappernamespace="
cn.itsource.domain.mapper.ProductMapper"
select:
这里面写查询语句
id:
用来确定这条sql语句的唯一
以后我们确定唯一,也就是找sql语句:
namespace+id
例:
cn.itsource.domain.mapper.ProductMapper.get
parameterType:
传入的参数类型long:
大Long_long:
小long(具体的对应请参见文档)
resultType:
结果类型(第一条数据返回的对象类型)自己的对象一定是全限定命
selectid="
get"
parameterType="
long"
resultType="
cn.itsource.domain.Product"
select*fromproductwhereid=#{id}
/select>
/mapper>
在上述文件中,希望大家注意几个规范:
①我们的映射文件一般情况下是和它对应的domain实体类在同一个层级
②这个映射文件的名称一般叫做XxxMapper.xml(Xxx代表的是实体类名称)
③namespace的名称为了确定唯一性,请大家根据我的要求取名
如我们有一个类:
cn.itsource.domain.Product/cn.itsource.domain.Student
那这里取名应该是:
cn.itsource.domain.ProductMapper/cn.itsource.domain.StudentMapper
④除了MyBatis支持的类型,其它的类型都通通使用全限定名
3.4完成数据的CRUD
核心文件有了,映射文件也有了。
现在可以来完成咱们的CRUD了吧!
但是应该从哪里开始好呢?
还记得咱们前面说过需要的核心对象SqlSessionFactory吧
咱们说过,需要通过它去拿到一个SqlSession对象(相当于JDBC的连接)
必需要有SqlSession这个对象,我们才可以去执行相应的Sql
3.4.1拿到SqlSession对象
官方文档从XML中构建SqlSessionFactory这一章中,除了配置的核心xml,在上面我们还可以看到几句代码(如下图),现在咱们就来详细分析一下这几句代码是什么意思:
我们简单解释一下上面的代码:
读取核心文件,然后再通过SqlSessionFactoryBuilder构建者来创建一个SqlSessionFactory工厂。
上面的sqlMapper其实是一个SqlSessionFactory工厂对象(它取名不是很直观)
官方文档从SqlSessionFactory中获取SqlSession这一章中,我们可以看到代码(下图),然后再拿到SqlSession,并且在这里面,还附上了咱们怎么调用sql的代码。
3.4.2查询一条数据
根据上面我们get到的技能,使用MyBatis查询一条数据!
大家要注意咱们传过去的参数,还有在SQL接收的参数!
【课堂分析】
传过去的变量名称和#里面的字符串名称不是一回事!
讲到这里,咱们再对整个MyBatis的流程再进行一次分析。
①:
我们需要核心文件(提供联系数据库的环境)
②:
需要映射文件(提供ORM与运行的SQL语句)
③:
拿到SqlSession对象,用于执行SQL
MyBatis的执行流程我们已经清晰。
在这里咱们先来研究一下日志的问题。
因为当前用MyBatis框架来执行数据库的操作。
在很多时候,MyBatis的功能到底是怎么完成的?
我们还是要看到具体的执行的一些信息与它真正执行的Sql语句才可以确定。
因此,把执行的日志打出来,可以帮助咱们分析MyBatis的执行。
先去MyBatis细节一章的查看MyBatis运行日志部分!
3.4.3查询所有数据
3.4.4添加一条数据
添加的时候一定要记住提交事务(配置事务、表结构支持事务)
添加数据的有时候咱们需要拿到当前数据的主键。
咱们先移步到MyBatis细节一章的拿到返回主键部分!
3.4.5修改一条数据
3.4.6删除一条数据
3.4.7特别注意
下面的点都很重要,是大家在使用MyBatis的时候经常出现的点。
希望大家引起重视。
出现问题的时候过来好好的来找。
基本咱们使用MyBatis中出的错都在这里。
使用框架的时候配置信息变多,在配置里写的都是字符串,而且经常是要对应的。
因为,这里希望大家要切记:
写的时候细心,出现错误找字符串要耐心,
1主配置中未配置相应的mapper(当然,这个路径也可能写错)
2在代码中调用Sql的时候路径写错
3Sql写错,这个应该还好找
4当我们在配置文件中很多地方如果写错,即便是你还没有使用也可能会报错
5写Sql的标签不需要全部一致(如添加不一定必需使用insert),但是它的属性会不同
6在传入与返回参数时全限定名写错
在开发的时候,要边做边测试。
在某一步出现错误后,删除新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day19MyBatis 入门