安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

MyBatis系列教程一初识MyBatis

3月27日 遭人厌投稿
  1。1ORM概览
  在了解ORM之前我们先了解什么是持久化,因为所有的ORM框架所做的事情无非就是将对象映射成数据库中的数据,以及将数据库中的数据映射成对象。1。1。1什么是持久化
  所谓持久化就是把数据(内存中的对象)保存到可永久存储的存储设备中(例如:硬盘),持久化的主要应用是将内存中的数据存储在关系型数据库中。当然也可以保存在磁盘文件中,XML数据文件,JSON文件中等的。1。1。2什么是ORM
  ORM(ObjectRelationalMapping),对象关系映射,它的作用是在关系型数据库和对象之间做一个映射,这样,我们在具体的操作数据库时,就不需要和复杂的SQL语句打交道,像平时操作对象操作数据即可。
  在目前的企业应用系统设计中,MVC,即Model(模型)View(视图)Control(控制)为主要的系统架构模式。MVC中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。
  将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。
  而ORM作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。
  简单来说,按通常的系统设计,使用JDBC操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。
  一般基本都是如下几个步骤:建立数据库连接,获得Connection对象。根据用户的输入组装查询SQL语句。根据SQL语句建立Statement对象或者PreparedStatement对象。用Connection对象执行SQL语句,获得结果集ResultSet对象。然后一条一条读取结果集ResultSet对象中的数据。根据读取到的数据,按特定的业务逻辑进行计算。根据计算得到的结果再组装更新SQL语句。再使用Connection对象执行更新SQL语句,以更新数据库中的数据。最后依次关闭各个Statement对象和Connection对象。
  由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑完全混杂在一块。
  而一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。
  另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。
  所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO。NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。
  所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。常用的ORM框架有Hibernate、Mybatis、Mybatisplus等,接下来我们以Mybatis为例深入学习。2。Mybatis概览
  MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为数据库中的记录。
  下面我们先了解一下Mybatis架构:
  Mybatis简略架构图mybatisconfig。xml:Mybatis全局配置文件,用于配置数据库、数据库连接池、POJO别名、映射文件等信息mapper。xml:该文件中用于编写处理数据的SQL语句。并且通过此文件可以将SQL语句与Java代码完全分离SqlSessionFactory:用于创建Java和数据库会话的Session对象Session:与数据库建立会话对象Executor:真正执行Sql语句的对象Statement:mapper文件对应的Statement,因为mapper文件是相互隔离的,可以理解为一个mapper文件就对应一个Statement对象。2。1Mybatis入门
  在本小节内,将使用Mybatis框架搭建开发环境,并使用Mybatis进行单表的增删改查,其中涉及到的一些概念会在后续章节中陆续讲解。2。1。1新建Mybaits项目
  在前面的课程中,已经学习了Maven的基础知识,使用Maven可以更好的管理和构建项目,因此使用Maven构建项目。项目结构如下:
  Mybatis项目图示
  首先准数据库:CREATEDATABASEMYBATISDEMO;USEMYBATISDEMO;CREATETABLESTUDENT(STUDENTIDINTPRIMARYKEYAUTOINCREMENT,STUDENTNAMEVARCHAR(20),STUDENTAGEINT,STUDENTGENDERCHAR(2));INSERTINTOSTUDENT(STUDENTNAME,STUDENTAGE,STUDENTGENDER)VALUES(张无忌,18,男);INSERTINTOSTUDENT(STUDENTNAME,STUDENTAGE,STUDENTGENDER)VALUES(张翠山,43,男);INSERTINTOSTUDENT(STUDENTNAME,STUDENTAGE,STUDENTGENDER)VALUES(殷素素,40,男);INSERTINTOSTUDENT(STUDENTNAME,STUDENTAGE,STUDENTGENDER)VALUES(谢逊,50,男);
  第一步:在pom。xml中导入依赖dependencygroupIdorg。mybatisgroupIdmybatisartifactIdversion3。5。6versiondependency
  第二步:在resource目录下新建mybatisconfig。xml全局配置文件?xmlversion1。0encodingUTF8?!DOCTYPEconfigurationPUBLICmybatis。orgDTDConfig3。0ENhttp:mybatis。orgdtdmybatis3config。dtdconfiguration!配置数据库连接文件propertiesresourcedata。propertiesproperties!开启驼峰命名映射settingssettingnamemapUnderscoreToCamelCasevaluetruesettingsenvironmentsdefaultdevelopmentenvironmentiddevelopment!配置数据库事务管理器transactionManagertypeJDBCtransactionManagerdataSourcetypePOOLEDpropertynamedrivervalue{driver}propertynameurlvalue{url}propertynameusernamevalue{username}propertynamepasswordvalue{password}dataSourceenvironmentenvironments!配置SQL映射文件mappersmapperresourcemapperStudentMapper。xmlmappermappersconfiguration
  第三步:创建SQL语句映射文件StudentMapper。xml!DOCTYPEmapperPUBLICmybatis。orgDTDMapper3。0ENhttp:mybatis。orgdtdmybatis3mapper。dtd!1。namespace和接口的全限定名一致!2。接口方法名和xml中sql语句ID一致!3。sql语句resultType返回值类型和方法返回值类型一致!4。输入参数类型与方法中一致mappernamespacecn。bytecollege。mapper。StudentMapperselectidfindAllresultTypecn。bytecollege。entity。StudentSELECTSTUDENTID,STUDENTNAME,STUDENTAGE,STUDENTGENDERFROMSTUDENTselectmapper
  第四步:在java目录下,新建包cn。bytecollege。entity,并在包中新建实体类Studentpackagecn。bytecollege。importjava。util。OpublicclassStudent{privateIntegerstudentId;privateStringstudentNprivateIntegerstudentAprivateStringstudentGpublicIntegergetStudentId(){returnstudentId;}publicvoidsetStudentId(IntegerstudentId){this。studentIdstudentId;}publicStringgetStudentName(){returnstudentN}publicvoidsetStudentName(StringstudentName){this。studentNamestudentN}publicIntegergetStudentAge(){returnstudentA}publicvoidsetStudentAge(IntegerstudentAge){this。studentAgestudentA}publicStringgetStudentGender(){returnstudentG}publicvoidsetStudentGender(StringstudentGender){this。studentGenderstudentG}OverridepublicStringtoString(){returnStudent{studentIdstudentId,studentNamestudentName,studentAgestudentAge,studentGenderstudentGender};}}
  第五步:在java目录下新建cn。bytecollege。mapper包,并在包中新建接口StudentMapperpackagecn。bytecollege。importcn。bytecollege。entity。Simportjava。util。LpublicinterfaceStudentMapper{ListStudentfindAll();}
  第六步:新建测试类查询所有信息packagecn。importcn。bytecollege。entity。Simportcn。bytecollege。mapper。StudentMimportorg。apache。ibatis。annotations。Mimportorg。apache。ibatis。session。SqlSimportorg。apache。ibatis。session。SqlSessionFimportorg。apache。ibatis。session。SqlSessionFactoryBimportjava。io。InputSimportjava。util。LpublicclassApp{publicstaticvoidmain(String〔〕args){读取Mybatis配置文件InputStreamisApp。class。getClassLoader()。getResourceAsStream(mybatisconfig。xml);创建SqlSessionFactorySqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder()。build(is);获取SqlSessionSqlSessionsessionsqlSessionFactory。openSession();ListStudentlistsession。selectList(cn。bytecollege。mapper。StudentMapper。findAll);StudentMappermappersession。getMapper(StudentMapper。class);ListStudentlistmapper。findAll();list。forEach(System。out::println);}}
  运行上面的程序结果如下图:
  从上面的代码可以看出使用Mybatis的整个过程可以分为以下步:读取Mybatis全局配置文件构建SqlSessionFactory对象创建SqlSession对象获取自定义Mapper执行SQL语句获取执行结果2。2Mybatis对象简介
  在上面步骤中出现了SqlSessionFactory、SqlSession等对象,下面就这些对象进行简单的介绍。SqlSessionFactory:每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为核心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先配置的Configuration实例来构建出SqlSessionFactory实例。需要注意SqlSessionFactory是一个工厂接口而不是现实类,它的任务是创建SqlSession。SqlSession:SqlSession类似于一个JDBC的Connection对象。MyBatis提供了两种模式去创建SqlSessionFactory:一种是XML配置的方式,另一种是代码的方式。为了避免硬编码以及利于项目维护,通常推荐使用第一种方式,将配置和代码进行分离。Mapper(映射器):映射器是由Java接口和XML文件(或注解)共同组成的,它的作用有:定义参数类型、描述缓存、描述SQL语句、定义查询结果和POJO的映射关系。
投诉 评论 转载

口服玻尿酸,智商税还是新蓝海?在颜值即正义时代,玻尿酸成了众多爱美人士离不开的美颜神器,被誉为上帝用来制造亚当和夏娃的黏土,广泛应用于医疗、医美领域、各类化妆护肤产品中。这还远远不够,瞄准女性消费者对……官宣!第十二届103SHOWROOM青年设计师基地计划入围名本文转自【凤凰网】作为挖掘、扶持中国优秀新锐设计师的重要项目,第十二届103SHOWROOM青年设计师基地计划受到了广泛关注,吸引了一大批年轻设计师踊跃报名!经过近三个月……黄金又卖爆,订单成倍增加!有门店卖到缺货!为啥这么火?来源:央视财经每年的春节前,都是国内黄金消费的传统旺季,今年的黄金销售情况如何?大家更喜欢购买哪类黄金产品?下午3点左右,记者在深圳水贝一家黄金卖场看到,销售展台周……手机市场胶着,京东与vivo踢出致胜球采写万天南编辑陈纪英火热的世界杯比赛,好手如林,高度内卷,即便传统强队,只要一着不慎,也有可能被枪挑下马。12月3日凌晨,排名28的学渣韩国队,最终以2:1逆……女宇航员在太空上怎么保护隐私?如何满足其他生活需求?自有妙招综述你有想过生活在宇宙内的女宇航员是怎么保护自己的隐私的吗?随着科技的日益发达,我们曾经的航天梦再也不只是幻想。人类已经成功多次发射火箭进入太空,将人类送往别的星球……35届华鼎奖刘亦菲撞上殷桃,赵丽颖杠上宋佳,糟心!冬日生活打卡季第35届华鼎奖名单新鲜出炉,这也意味着,今年的最佳男女主之争,已经拉开序幕!翻开名单,许多在今年有热剧傍身的知名演员都有被提名,像赵丽颖、刘亦菲、殷桃……月歌行观众到底做错什么了,要被这样的烂剧暴击?要说今年最火的一类题材,那么必然是古装甜宠,王鹤棣,虞书欣主演的《苍兰诀》,前期没有展露出爆款品相,但随着剧情的发展,让人越看越上瘾,成为了今年暑期档的王炸剧,这类题材也顺势火……总投资165亿元!欣旺达江西宜春投资新能源基地项目12月7日,欣旺达与宜春市人民政府签署《战略合作协议》,双方协定在宜春市政府管辖区域内,共同构建从碳酸锂生产、锂电池关键材料到锂电池回收利用的产业链体系,助力宜春锂电新能源产业……中国商业史之ofo小黄车第3集技术才是根本,输的漂亮是本事哈喽,各位朋友们大家好,我是李侃侃,一个喜欢分享商业故事的韭菜博主。今天咱们接着讲,ofo小黄车的故事。01:技术才是根本咱们说过,从一开始ofo的硬件设计就……关于武汉对于武汉,还是有些记忆。记得语文课本里有关于武昌起义,二七大罢工的课文。黄鹤楼,武大樱花很美,一直都很想去看看。高中最好的同学在中国地质大学读书,聚会的时候听他讲过武汉,才知道……MyBatis系列教程一初识MyBatis1。1ORM概览在了解ORM之前我们先了解什么是持久化,因为所有的ORM框架所做的事情无非就是将对象映射成数据库中的数据,以及将数据库中的数据映射成对象。1。1。1什么是……杜锋根据对手情况选定14人大名单我们会应对困难力争两战皆胜北京时间11月7日,今日,中国男篮正式公布了出征2023年男篮世界杯亚大区预选赛第五窗口期比赛的14人大名单,杜锋挂帅,王哲林、胡明轩、吴前等球员悉数入选。11月11日,中国男……
电子游戏产业背后的科技意义崇明公园里添了新装,你发现了吗?镜观世界传统与现代在这里交融挺过霸王级寒潮,穿越百慕大三角,这位海员带你认识真实海洋游客照系列NO。5奔赴一场日出的温柔,做追赶太阳的人双十一,就选256GB大内存款,这3款手机好评如潮最低才69印象山西这就是晋城一切随缘是躺平吗?理想L8小鹏G9等入榜第59批免征车辆购置税新能源汽车目录谈谈萎缩性胃炎22到11!红魔曼联创2年尴尬纪录,逆势崛起后,剑指复仇蓝狐我的驴行日记灵芝坡,红叶谷

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利