版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
框架简介MyBatis简介MyBatis环境的搭建与入门程序MyBatis的基础操作MyBatis的工作原理第1章
初识MyBatis2024/1/29本课程目标2学完本门课程后,你能够掌握MyBatis、Spring、SpringMVC三大框架技术搭建SpringMVC+Spring+MyBatis框架,并在此框架上熟练进行项目开发学习方法3方法查看框架官方文档和源码多动手多思考学习目标/Target4了解框架的概念和优点了解MyBatis框架的概念和优点掌握MyBatis环境搭建掌握MyBatis入门程序的编写熟悉MyBatis工作原理章节概述/Summary5
实际开发中,随着业务的发展,软件系统变得越来越复杂,如果所有的软件都从底层功能开始开发,那将是一个漫长而繁琐的过程。此外,团队协作开发时,由于没有统一的调用规范,系统会出现大量的重复功能的代码,给系统的二次开发和维护带来不便。为解决上述问题,框架应运而生。框架实现了很多基础性的功能,开发人员不需要关心底层功能操作,只需要专心地实现所需要的业务逻辑,大大提高了开发人员的工作效率。当前市场上的Java
EE开发主流框架有Spring、SpringMVC和Mybatis等,本章主要对框架的概念以及Mybatis的基础知识进行介绍。目录/CONTENTS框架简介MyBatis的基础操作MyBatis环境的搭建与入门程序MyBatis简介6MyBatis的工作原理14325框架简介01第1章初识MyBatis为什么需要框架技术8如何更快更好完成某主题PPT?使用PPT模板思考使用模板有什么好处呢?不用考虑布局、排版等,提高效率可专心在内容上结构统一,便于阅读新手也可以作出专业的PPT提问问题
“框架(Framework)”一词最早出现在建筑领域,指的是在建造房屋前期构建的建筑骨架。在编程领域,框架就是应用程序的骨架,开发人员可以在这个骨架上加入自己的东西,搭建出符合自己需求的应用系统。什么是框架框架的概念9软件框架
软件框架是一种通用的、可复用的软件环境,它提供特定的功能,促进软件应用、产品和解决方案的开发工作。软件框架会包含支撑程序、编译器、代码、库、工具集以及API,它把所有这些部件汇集在一起,以支持项目或系统的开发。
软件框架可以形象地比喻成我们在盖楼房时,用梁+柱子+承重墙搭建起来的钢筋混凝土结构的建筑框架,它是整个建筑的骨架。而实现的软件功能,也就像在这个建筑框架中所要实现的不同类型、功能的房子,比如健身房、商场、酒店、饭店等。框架的概念10框架的概念11框架技术是一个应用程序的半成品提供可重用的公共结构按一定规则组织的一组组件分析优势不用再考虑公共问题专心在业务实现上结构统一,易于学习、维护新手也可写出好程序
在早期Java
EE应用开发中,企业开发人员是利用JSP+Servlet技术进行软件应用和系统开发的,使用该技术会有以下两个弊端。
(1)软件应用和系统可维护性差
如果全部采用JSP+Servlet技术进行软件的开发,因为分层不够清晰,业务逻辑的实现无法单独分离出来,从而造成系统后期维护困难。
(2)代码重用性低
企业希望以最快的速度,开发出最稳定、最实用的软件。如果系统不使用框架,每次开发系统都需要重新开发,需要投入大量的人力物力,并且重新开发的代码可能具有更多的漏洞,这就增加了系统出错的风险。早起Java
EE开发弊端
框架的优势12
相比于使用JSP+Servlet技术进行软件开发,使用框架有以下优势。
1.提高开发效率:如果采用成熟、稳健的框架,那么一些通用的基础工作,如事务处理、安全性、数据流控制等都可以交给框架处理,程序员只需要集中精力完成系统的业务逻辑设计,降低了开发难度。
2.提高代码规范性和可维护性:当多人协同进行开发时,代码的规范性和可维护性就变得非常重要。成熟的框架都有严格的代码规范,能保证团队整体的开发风格统一。
3.提高软件性能:使用框架进行软件开发,可以减少程序中的冗余代码。例如,使用Spring框架开发时,通过Spring的IOC特性,可以将对象之间的依赖关系交给Spring控制,方便解耦,简化开发;使用MyBatis框架开发时,MyBatis提供了XML标签,支持动态的SQL,开发人员无需在类中编写大量的SQL语句,只需要在配置文件中进行配置即可。框架优势框架的优势13
Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的,其主要优势之一就是分层架构。Spring提供了更完善的开发环境,可以为POJO(PlainOrdinaryJavaObject,普通Java对象)对象提供企业级的服务。Spring框架当前主流框架14
SpringMVC是一个Web开发框架,可以将它理解为Servlet。在MVC模式中,SpringMVC作为控制器(Controller)用于实现模型与视图的数据交互,是结构最清晰的。
SpringMVC框架采用松耦合、可插拔的组件结构,具有高度可配置性,与其他的MVC框架相比,具有更强的扩展性和灵活性。SpringMVC框架当前主流框架15
MyBatis是Apache的一个开源项目iBatis,2010年这个项目由ApacheSoftwareFoundation迁移到了GoogleCode,并且改名为MyBatis,2013年11月MyBatis又被迁移到Github。MyBatis是一个优秀的持久层框架,它可以在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM(Object/RelationMapping,即对象关系映射)实现。MyBatis封装性要低于Hibernate,但它性能优越、简单易学,在互联网应用的开发中被广泛使用。
上述介绍的Struts2、Hibernate、Spring、SpringMVC和MyBatis等都是Java
EE开发中最常见的框架,它们能极大地提高JavaEE应用的开发效率,并能保证应用具有稳定的性能,得到了开发者广泛地支持。MyBatis框架当前主流框架16
Hibernate
是一个优秀的持久层框架,它可以在Java对象与关系型数据库之间建立某种映射,以实现Java对象的直接存取。
使用JDBC连接来读写数据库,过程繁琐。Hibernate框架通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate已经成为当前主流的数据库持久层框架,被广泛应用在企业开发中。Hibernate框架
当前主流框架17SpringBoot框架是Pivotal团队基于Spring开发的全新框架,其设计初衷是为了简化Spring的配置,使用户能够构建独立运行的程序,提高开发效率。SpringBoot框架本身并不提供Spring框架的核心特性及扩展功能,它只是用于快速、敏捷地开发新一代基于Spring框架的应用,同时它还集成了大量的第三方类库(如Jackson、JDBC、Redis等),使用户只需少量配置就能完成相应功能。SpringBoot框架
当前主流框架18SpringCloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案,它利用SpringBoot的开发便利性巧妙地简化了分布式系统的开发。例如,配置管理、服务发现、控制总线等操作,都可以使用SpringBoot做到一键启动和部署。可以说,SpringCloud将SpringBoot框架进行了再封装,屏蔽掉了复杂的配置和实现原理,具有简单易懂、易部署和易维护等特点。SpringCloud框架
当前主流框架19MyBatis简介02第1章初识MyBatis数据持久化概念21持久化是程序数据在瞬时状态和持久状态间转换的过程内存姓名:小颖性别:女特长:英语JDBC…Stmt.execute("…")…持久状态JDBC的劣势
JDBC是Java程序实现数据访问的基础,JDBC的劣势主要有以下几个方面。(1)数据库连接创建、释放频繁会造成系统资源浪费,从而影响系统性能。(2)
SQL语句在代码中硬编码,造成代码不易维护。在实际应用的开发中,SQL变化的可能性较大。在传统JDBC编程中,SQL变动需要改变Java代码,违反了开闭原则。(3)用PreparedStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不一定,可能多也可能少,修改SQL需要修改代码,造成系统不易维护。(4)JDBC对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,造成系统不易维护。
传统JDBC的劣势22ORM框架23ORM(ObjectRelationalMapping)编写程序的时候,以面向对象的方式处理数据保存数据的时候,却以关系型数据库的方式存储ORM解决方案包含下面四个部分在持久化对象上执行基本的增、删、改、查操作对持久化对象提供一种查询语言或者API对象关系映射工具提供与事务对象交互、执行检查、延迟加载以及其他优化功能
属性字段nameuser_namesexuser_Sexskilluser_skillUser对象name:小颖sex:女skill:英语、程序设计对象-关系映射什么是MyBatis
MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。MyBatis概述24MyBatis简介25MyBatis前身是iBatis,本是Apache的一个开源的项目官方网站ORM框架实体类和SQL语句之间建立映射关系特点基于SQL语法,简单易学能了解底层封装过程SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度方便程序代码调试什么是MyBatis26MyBatis框架也被称之为ORM(Object/RelationMapping,即对象关系映射)框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。ORM框架的工作原理解决JDBC编程劣势
针对前面提到的JDBC编程的劣势,MyBatis提供了以下解决方案,具体如下。
问题一:数据库链接创建、释放频繁会造成系统资源浪费,从而影响系统性能。
解决方案:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
问题二:SQL语句在代码中硬编码,造成代码不易维护。在实际应用的开发中,SQL变化的可能较大。在传统JDBC编程中,SQL变动需要改变Java代码,违反了开闭原则。
解决方案:MyBatis将SQL语句配置在MyBatis的映射文件中,实现了与Java代码的分离。MyBatis概述27解决JDBC编程劣势
问题三:使用preparedStatement向占有位符号传参数存在硬编码,因为SQL语句的where条件不一定,可能多也可能少,修改SQL需要修改代码,造成系统不易维护。
解决方案:MyBatis自动将Java对象映射至SQL语句,通过Statement中的parameterType定义输入参数的类型。
问题四:JDBC对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,造成系统不易维护。
解决方案:MyBatis自动将SQL执行结果映射至Java对象,通过Statement中的resultType定义输出结果的类型。MyBatis概述28与Hibernate直观对比29HibernateHibernate是一个全表映射的框架。通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。开发者并不需要熟练的掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。Hibernate也存在一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。MyBatisMyBatis是一个半自动映射的框架。“半自动”是相对于Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需提供POJO和映射关系即可。与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用MyBatis更加合适。Hibernate与MyBatis有什么区别?MyBatis环境的搭建
与入门程序03第1章初识MyBatis百货中心供应链管理系统介绍2-131总体功能模块百货中心供应链管理系统用户登录用户登录登录验证用户退出用户管理查询用户搜索条件查询分页査询添加用户修改用户删除用户用户权限管理添加用户权限修改用户权限删除用户权限供应商管理查询供应商搜索条件查询分页査询添加供应商修改供应商删除供应商商品管理查询商品搜索条件查询分页査询添加商品修改商品删除商品商品类别管理查询商品类别添加商品类别删除商品类别采购订单管理查询采购订单搜索条件查询分页査询添加采购订单修改采购订单删除采购订单销售订单管理查询销售订单搜索条件查询分页査询新闻管理查询新闻搜索条件查询分页査询添加新闻修改新闻删除新闻演示:课堂贯穿案例(百货中心供应链管理系统)百货中心供应链管理系统介绍2-232数据库设计表用户表(表名:tb_user)用户权限表(表名:tb_role)供应商表(表名:tb_provider)商品类别表(表名:tb_product_category)商品表(表名:tb_product)采购订单表(表名:tb_bill)销售订单表(表名:tb_order)销售订单关联表(表名:tb_order_detail)新闻表(表名:tb_news)逻辑外键关联演示:数据库表结构MyBatis环境搭建的步骤
使用MyBatis框架进行数据库开发之前,需要先搭建MyBatis环境,MyBatis环境搭建主要有如下基本步骤。(1)创建工程;
(2)引入相关依赖;(3)数据库准备;(4)编写数据库连接信息配置文件;(5)编写核心配置文件和映射文件。MyBatis环境搭建33创建工程:(1)启动IntelliJIDEA开发工具,单击工具栏中的File→new→Project选项,弹出NewProject对话框。MyBatis环境搭建34STEP01创建工程:(2)在NewProject对话框中,单击左侧菜单中的“Maven”选项,然后单击“Next”按钮,进入项目命名对话框。MyBatis环境搭建35STEP01创建工程:(3)在“Name”文本框中对Maven项目命名,在“Location”文本框选择项目存放的路径。单击“ArtifactCoordinates”选项可以填写GroupId、ArtifactId和Version。其中GroupId通常设置为公司倒置的网络域名,如“cn.dsscm”;ArtifactId通常设置为项目名;Version使用IDEA默认版本即可。填写完成之后单击“Finish”按钮完成项目创建。MyBatis环境搭建36STEP01引入相关依赖:由于本项目要连接数据库以及对程序进行测试,所以需要在项目的pom.xml文件中导入MySQL驱动包、Junit测试包、MyBatis的核心包等相关依赖。MyBatis环境搭建37STEP02<dependencies><dependency>
<groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency>……</dependencies><build><resources><resource>
<directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>首次引依赖需要联网IDEA默认集成的Maven,所以在第一次引入依赖时,需要在联网状态下进行,且引入依赖需要较长时间,耐心等待到依赖引入完成即可。
MyBatis环境搭建38创建数据库:在MySQL中导入名称为“dsscm.sql”素材文件,创建一个名称为dsscm的数据库。MyBatis环境搭建39STEP03创建数据库连接信息配置文件:在项目的src/main/resources目录下创建数据库连接的配置文件,这里将其命名为perties,在该文件中配置数据库连接的参数。MyBatis环境搭建40STEP04driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/dsscm?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=falseusername=rootpassword=123456创建日志配置文件:在项目的src/main/resources目录下创建perties文件MyBatis环境搭建41STEP041. log4j.rootLogger=debug,stdout,R2. 3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout5. 6. #Patterntooutputthecaller'sfilenameandlinenumber.7. log4j.appender.stdout.layout.ConversionPattern=%5p[%t](%F:%L)-%m%n8. 9. log4j.appender.R=org.apache.log4j.RollingFileAppender10. log4j.appender.R.File=example.log11. 12. log4j.appender.R.MaxFileSize=100KB13. #Keeponebackupfile14. log4j.appender.R.MaxBackupIndex=515. 16. log4j.appender.R.layout=org.apache.log4j.PatternLayout17. log4j.appender.R.layout.ConversionPattern=%p%t%c-%m%nSTEP05创建MyBatis的核心配置文件:在项目的src/main/resources目录下创建MyBatis的核心配置文件,该文件主要用于项目的环境配置,如数据库连接相关配置等。核心配置文件可以随意命名,但通常将其命名为mybatis-config.xml。<configuration><propertiesresource="perties"/><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED">
<propertyname="driver"value="${mysql.driver}"/><propertyname="url"value="${mysql.url}"/><propertyname="username"value="${mysql.username}"/><propertyname="password"value="${mysql.password}"/></dataSource>
</environment></environments></configuration>MyBatis环境搭建42共性问题集中讲解43常见问题及解决办法代码规范问题调试技巧共性问题集中讲解演示案例44查询用户表记录数
需求说明搭建MyBatis开发环境,实现用户表记录数查询在IDEA中创建工程,导入MyBatis的jar包创建MyBatis配置文件mybatis-config.xml,配置数据库信息编写实体类User.java编写SQL映射文件UserMapper.xml编写测试类UserMapperTest.java,运行输出结果分析实现步骤12345MyBatis的入门程序45创建UserMapper.xml:创建包“cn.dsscm.dao”并在里面配置映射文件,该文件也是一个XML文件,命名为UserMapper.xmlSTEP01<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="cn.dsscm.dao.UserMapper"> <!--查询用户表记录数--> <selectid="count"resultType="int"> SELECTcount(1) FROMtb_user </select></mapper>MyBatis的入门程序46创建测试类:在src/test/java目录下创建cn.dsscm.test包,在该包下创建UserMapperTest.java进行功能测试。STEP02实现步骤读取全局配置文件:mybatis-config.xml创建SqlSessionFactory对象,此对象可以完成对配置文件的读取创建SqlSession对象,此对象的作用是调用mapper文件进行数据操作关闭SqlSession对象@Testpublicvoidtest1(){ //创建SqlSession对象
SqlSessionsqlSession=null; try{ //获取mybatis-config.xml的输入流
InputStreamis=Resources.getResourceAsStream("mybatis-config.xml"); //创建SqlSessionFactory对象
SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(is); intcount=0; //创建sqlSession sqlSession=factory.openSession(); //调用mapper文件来对数据进行操作,必须先把mapper文件引入到mybatis-config.xml中
count=sqlSession.selectOne("cn.dsscm.dao.UserMapper.count"); logger.debug("UserMapperTestcount>"+count); }catch(IOExceptione){ e.printStackTrace(); }finally{ //关闭SqlSession对象
sqlSession.close(); }}共性问题集中讲解47常见问题及解决办法代码规范问题调试技巧共性问题集中讲解与JDBC直观对比48MyBatis将代码分解包装对数据库的数据源的管理包括事务管理通过配置文件,获取返回结果到Java对象的映射通过配置文件,管理SQL及输入参数的映射MyBatis框架优缺点49优点与JDBC相比,减少了50%以上的代码量最简单的持久化框架,小巧并简单易学SQL代码从程序代码中彻底分离,可重用提供XML标签,支持编写动态SQL提供映射标签,支持对象与数据库的ORM字段映射缺点SQL语句编写工作量大,对开发人员有一定要求数据库移植性差MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目!技能训练50查询供应商表记录数需求说明搭建MyBatis开发环境,实现供应商表记录数查询创建Maven工程,导入MyBatis的jar包创建MyBatis配置文件mybatis-config.xml,配置数据库信息编写实体类Provider.java编写SQL映射文件ProviderMapper.xml编写测试类ProviderMapperTest.java,运行输出结果练习提示完成时间:20分钟共性问题集中讲解51常见问题及解决办法代码规范问题调试技巧共性问题集中讲解MyBatis
的基础操作04第1章初识MyBatis演示案例53查询用户
需求说明搭建MyBatis开发环境,实现用户表记录数查询在IDEA中创建工程,导入MyBatis的jar包创建MyBatis配置文件mybatis-config.xml,配置数据库信息编写实体类User.java编写SQL映射文件UserMapper.xml编写测试类UserMapperTest.java,运行输出结果分析实现步骤12345查询用户
54根据用户编号查询用户信息。1根据用户名模糊查询用户信息。2
在实际开发中,查询操作通常都会涉及到单条数据的精确查询,以及多条数据的模糊查询。1.根据用户编号查询用户信息查询用户
55创建POJO实体:在项目的src/main/java目录下创建cn.dsscm.pojo包,在该包下创建User.java类STEP01importjava.util.Date;publicclassUser{ privateIntegerid;//id privateStringuserCode;//用户编码
privateStringuserName;//用户名称
privateStringuserPassword;//用户密码
privateIntegergender;//性别
privateDatebirthday;//出生日期
privateStringphone;//电话
…….
//省略Getter、Setter和toString方法}1.根据用户编号查询用户信息查询用户
56编辑映射文件UserMapper.xml:在映射文件UserMapper.xml,添加根据用户id查询用户信息列表的配置STEP021. <?xmlversion="1.0"encoding="UTF-8"?>2. <!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN"3. "/dtd/mybatis-3-mapper.dtd">4. 5. <mappernamespace="cn.dsscm.dao.user.UserMapper">6. <!--根据用户id查询用户信息列表--><selectid="getUserListById"parameterType="Integer"resultType="cn.dsscm.pojo.User">8. SELECT*FROMdsscm_user9. WHEREid=#{id}10. </select>11. </mapper>1.根据用户编号查询用户信息查询用户
57编辑测试方法:编辑UserMapperTest.java文件,为其添加根据用户ID查询用户信息的操作的测试方法STEP03@TestpublicvoidfindUserByIdTest(){ Useruser=null; SqlSessionsqlSession=null; try{ //1获取mybatis-config.xml的输入流
InputStreamis=Resources.getResourceAsStream("mybatis-config.xml";); //2创建SqlSessionFactory对象,完成对配置文件的读取
SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(is); //3创建sqlSession sqlSession=factory.openSession(); //4调用mapper文件来对数据进行操作,必须先把mapper文件引入到mybatis-config.xml中
user=sqlSession.selectOne("cn.dsscm.dao.user.UserMapper.getUserListById",1); logger.debug("UserTestuser>"+user); }catch(IOExceptione){ e.printStackTrace(); }finally{ sqlSession.close(); }}2.根据用户名模糊查询用户信息查询用户
58编辑映射文件UserMapper.xml:在映射文件UserMapper.xml中,添加根据用户名模糊查询信息列表的SQL语句STEP011. <!--根据用户名模糊查询用户信息列表-->2. <selectid="getUserListByName"parameterType="String"3. resultType="cn.dsscm.pojo.User">4. SELECT*FROMtb_user5. WHEREuserNameLIKE'%${value}%'6. </select>1. <!--根据用户名模糊查询用户信息列表-->2. <selectid="getUserListByName"parameterType="String"3. resultType="cn.dsscm.pojo.User">4. SELECT*FROMtb_user5. WHEREuserNameLIKEconcat('%',#{value},'%')6. </select>2.根据用户名模糊查询用户信息查询用户
59编辑测试方法:在测试类UserMapperTest.java中,添加一个测试方法findUserByNameTest()STEP02@TestpublicvoidfindUserByIdTest(){ …… //4调用mapper文件来对数据进行操作,必须先把mapper文件引入到mybatis-config.xml中
list=sqlSession.selectList("cn.dsscm.dao.user.UserMapper.getUserListByName","张"); logger.debug("UserTestlist>"+list); ……}一个项目多个配置文件
如果一个项目有多个映射文件,则mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多个<mapper>元素指定映射文件的路径。MyBatis的基础操作60读取配置文件通过SqlSessionFactory创建SqlSession根据配置文件构建SqlSessionFactory12
3使用SqlSession对象操作数据库4关闭SqlSession5MyBatis的操作步骤案例总结查询用户61技能训练62实现供应商表的查询需求说明分别实现按下列条件查询订单表,查询条件如下:全部供应商。供应商(供应商id)。查询结果列显示:供应商信息。练习完成时间:20分钟共性问题集中讲解63常见问题及解决办法代码规范问题调试技巧共性问题集中讲解添加用户64编辑映射文件UserMapper.xml:添加操作是通过<insert>元素来实现的。例如,向数据库中的dsscm_user表中插入一条数据可以通过如下配置来实现。STEP01<!--增加用户--><insertid="add"parameterType="cn.dsscm.pojo.User"> insertintodsscm_user(userCode,userName,userPassword,gender, birthday,phone,address,userRole,createdBy,creationDate) values(#{userCode},#{userName},#{userPassword},#{gender},#{birthday}, #{phone},#{address},#{userRole},#{createdBy},#{creationDate})</insert>添加用户65编辑测试方法:在测试类MybatisTest中,添加测试方法addUserTest()。STEP02 @Test publicvoidfindUserByIdTest(){ …… //4、SqlSession执行添加操作
//4.1创建User对象,并向对象中添加数据
Useruser=newUser(); user.setUserCode("test001"); user.setUserName("测试用户001"); user.setUserPassword("1234567"); …… //4.2执行SqlSession的插入方法,返回的是SQL语句影响的行数
count=sqlSession.insert("cn.dsscm.dao.user.UserMapper.add",user); //4.3通过返回结果判断插入操作是否执行成功
if(count>0){ System.out.println("您成功插入了"+count+"条数据!"); }else{ System.out.println("执行插入操作失败!!!"); } //4.4提交事务
sqlSmit(); …… }更新用户66编辑映射文件UserMapper.xml:在映射文件UserMapper.xml中,更新操作在映射文件中是通过配置<update>元素来实现的。STEP01<!--修改用户信息--><updateid="modify"parameterType="cn.dsscm.pojo.User"> UPDATEdsscm_user SETuserCode=#{userCode},userName=#{userName}, userPassword=#{userPassword},gender=#{gender},birthday=#{birthday}, phone=#{phone},address=#{address},userRole=#{userRole}, modifyBy=#{modifyBy},modifyDate=#{modifyDate} WHEREid=#{id}</update>更新用户67编辑测试方法:在测试类MybatisTest中,添加测试方法updateUserTest(),将id为21的信息修改。STEP02//4、SqlSession执行添加操作
//4.1创建User对象,并向对象中添加数据
Useruser=newUser(); user.setId(21); user.setUserCode("test002"); ……. //4.2执行SqlSession的更新方法,返回的是SQL语句影响的行数
count=sqlSession.update("cn.dsscm.dao.user.UserMapper.modify",user); //4.3通过返回结果判断插入操作是否执行成功
if(count>0){ System.out.println("您成功修改了"+count+"条数据!"); }else{ System.out.println("执行修改操作失败!!!"); } //4.4提交事务
sqlSmit();…….删除用户68编辑映射文件UserMapper.xml:删除操作在映射文件中是通过配置<delete>元素来实现的。STEP01
<!--根据userId删除用户信息--> <deleteid="deleteUserById"parameterType="Integer"> DELETEfromdsscm_user WHEREid=#{id} </delete>删除用户69编辑测试方法:在测试类MyBatisTest中,添加测试方法deleteUserTest(),该方法用于将id为21的用户信息删除。STEP02 @Test publicvoidfindUserByIdTest(){ …… //4、SqlSession执行添加操作
//4.1执行SqlSession的更新方法,返回的是SQL语句影响的行数
count=sqlSession.delete("cn.dsscm.dao.user.UserMapper.deleteUserById",21); //4.2通过返回结果判断插入操作是否执行成功
if(count>0){ System.out.println("您成功删除了"+count+"条数据!"); }else{ System.out.println("执行删除操作失败!!!"); } //4.3提交事务
sqlSmit(); …… }技能训练70实现供应商表的查询需求说明在上一个练习的基础上,实现供应商表的增加操作。实现根据供应商id修改供应商信息的操作。实现根据供应商id删除供应商信息的操作。增加和修改供应商:使用insert元素和update元素。parameterType:Java实体类Provider。DAO层接口方法的返回类型:int。注意:createBy和creationDate,modifyDate和modifyBy这四个字段应根据方法是增加或者修改,来进行灵活操作。删除供应商:使用delete元素。练习完成时间:20分钟提示共性问题集中讲解71常见问题及解决办法代码规范问题调试技巧共性问题集中讲解MyBatis
的工作原理05第1章初识MyBatisMyBatis工作原理图MyBatis工作原理73MyBatis工作原理步骤
MyBatis框架在操作数据库时,大体经过了8个步骤。下面结合MyBatis工作原理图对每一步流程进行详细讲解,具体如下。(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。(2)加载映射文件Mapper.xm:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。MyBatis工作原理74MyBatis工作原理步骤(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。(4)创建SqlSession对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。(5)动态生成SQL语句:MyBatis底层定义了一个Executor接口用于操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。MyBatis工作原理75MyBatis工作原理步骤(6)MappedStatement对象将传入的Java对象映射到SQL语句中:SqlSession内部通过执行器Executor操作数据库,增删改语句通过Executor接口的update()方法执行,查询语句通过query()方法执行。这两个执行方法中包含一个MappedStatement类型的参数,该参数是对映射信息的封装,存储了要映射的SQL语句的id、参数等。Mapper.xml文件中一个SQL语句对应一个MappedStatement对象,SQL语句的id即是MappedStatement的id。MyBatis工作原理76MyBatis工作原理步骤(7)输入参数映射:在执行Executor类的update()方法和query()方法时,MappedStatement对象会对用户执行SQL语句时输入的参数进行定义,Executor执行器会在执行SQL语句之前,通过MappedStatement对象将输入的参数映射到SQL语句中。Executor执行器对输入参数的映射过程类似于JDBC编程对PreparedStatement对象设置参数的过程。(8)输出结果映射:excutor()方法在数据库中执行完SQL语句后,MappedStatement对象会对输出的结果进行定义,Executor执行器会在执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。Executor执行器将输出结果映射到Java对象的过程类似于JDBC编程对结果的解析处理过程。MyBatis工作原理77本章小结
本章主要针对MyBatis框架进行了讲解。首先对框架的概念、优点和当前一些主流的JavaEE框架进行了讲解,然后对传统JDBC的劣势进行了分析,由此引出了MyBatis框架,并对MyBatis框架的环境搭建、入门程序以及工作原理进行了详细地讲解。通过本章的学习,读者可以了解MyBatis框架及其作用,熟悉MyBatis的工作原理,并能够独立完成MyBatis框架环境的搭建以及入门程序的编写。本章小结78优秀持久层框架:实体类和SQL语句之间建立映射关系搭建MyBatis开发环境MyBatis入门程序查询用户添加用户修改用户删除用户初识MyBatis1.下载mybatis.jar包并导入工程2.编写MyBatis核心配置文件(mybatis-config.xml)3.创建实体类-POJO4.DAO层-SQL映射文件5.创建测试类根据据用户编号查询用户信息根据用户名模糊查询用户信息本章小结79本章作业✎
本章作业请简述MyBatis框架与Hibernate框架的区别。请简述MyBatis的工作执行流程。✎预习作业MyBatis配置文件中的各个元素有什么作用?MyBatis映射文件中有哪些常用元素?80问题及作业集中问题&课后作业MyBatis的核心接口和类MyBatis的核心配置文件MyBatis的映射文件使用接口实现条件查询使用接口实现添加、更新、删除第2章
MyBatis的核心配置2024/1/29学习目标/Target83了解MyBatis的核心接口和类的作用熟悉MyBatis的配置文件中各个元素的作用掌握MyBatis的映射文件中常用元素的使用方法掌握使用<select>元素实现条件查询的方法掌握使用接口实现添加、更新、删除的方法章节概述/Summary84通过上一章的学习,读者对MyBatis框架已经有了一个初步了解,但是要想熟练地使用MyBatis框架进行实际开发,只会简单的配置是不行的,我们还需要对框架中的核心对象、核心配置文件以及映射文件有更深入的了解。本章将针对MyBatis核心对象、核心配置文件和映射文件进行讲解。目录/CONTENTSMyBatis的核心接口和类使用接口实现条件查询MyBatis的映射文件MyBatis的核心配置文件使用接口实现添加、更新、删除14325MyBatis的
核心接口和类01第2章MyBatis的核心配置MyBatis基本要素MyBatis的核心对象SqlSessionFactoryBuilderSqlSessionFactorySqlSessionmybatis-config.xml系统核心配置文件mapper.xmlSQL映射文件87核心接口和类的结构SqlSessionFactoryBuilderSqlSessionFactorybuild()openSession()SqlSession88SqlSessionFactoryBuilder什么是SqlSessionFactoryBuilder?用过即丢,其生命周期只存在于方法体内可重用其来创建多个SqlSessionFactory实例负责构建SqlSessionFactory,并提供多个build方法的重载89SqlSessionFactoryBuilder的多个重载build()方法
SqlSessionFactoryBuilder90build(InputStreaminputStream,Stringenvironment,Propertiesproperties)build(Readerreader,Stringenvironment,Propertiesproperties)build(Configurationconfig)SqlSessionFactoryBuilder构建build()方法的形式由于build()方法中的参数environment和properties都可以为null,所以SqlSessionFactoryBuilder构建SqlSessionFactory对象的build()方法按照配置信息的传入方式,可以分为三种形式。SqlSessionFactoryBuilder91配置信息以三种形式提供给SqlSessionFactory的build方法:InputStream(字节流)、Reader(字符流)、Configuration(类)!形式一:SqlSessionFactoryBuilder构建build()方法
上述build()方法中,参数inputStream是字节流,它封装了XML文件形式的配置信息;参数environment和参数properties为可选参数。其中,参数environment决定将要加载的环境,包括数据源和事务管理器;参数properties决定将要加载的properties文件。
build(InputStreaminputStream,Stringenvironment,Propertiesproperties)SqlSessionFactoryBuilder92读取XML文件构造方式:Stringresource="mybatis-config.xml";InputStreamis=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(is);形式二:SqlSessionFactoryBuilder构建build()方法
由上述build()方法可知,第二种形式的build()方法参数作用与第一种形式大体一致,唯一不同的是,第一种形式的build()方法使用InputStream字节流封装了XML文件形式的配置信息,而第二种形式的build()方法使用Reader字符流封装了xml文件形式的配置信息。
build(Readerreader,Stringenvironment,Propertiesproperties)SqlSessionFactoryBuilder93形式三:SqlSessionFactoryBuilder构建build()方法
通过以上代码可知,配置信息可以通过InputStream(字节流)、Reader(字符流)、Configuration(类)三种形式提供给SqlSessionFactoryBuilder的build()方法。
build(Configurationconfig)SqlSessionFactoryBuilder94以读取XML文件的方式构造SqlSessionFactory对象
通过过读取XML配置文件的方式构造SqlSessionFactory对象的关键代码如下所示。
//读取配置文件InputStreaminputStream=Resources.getResourceAsStream("配置文件位置");//根据配置文件构建SqlSessionFactorySqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);SqlSessionFactoryBuilder95使用什么模式创建SqlSessionFactory对象
SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用程序执行期间都会存在。如果我们多次创建同一个数据库的SqlSessionFactory对象,那么该数据库的资源将很容易被耗尽。通常每一个数据库都只创建一个SqlSessionFactory对象,所以在构建SqlSessionFactory对象时,建议使用单例模式。SqlSessionFactoryBuilder96SqlSessionFactory97什么是SqlSessionFactory?SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。SqlSessionFactory98SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在。如果我们多次的创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为此,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。InputStreaminputStream=Resources.getResourceAsStream("配置文件位置");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);通过XML配置文件构建出的SqlSessionFactory实例现代码如下:构建SqlSessionFactorySqlSessionFactory的openSession()方法SqlSessionFactory99方法名称描述SqlSessionopenSession()开启一个事务。SqlSessionopenSession(BooleanautoCommit)参数autoCommit可设置是否开启事务。SqlSessionopenSession(Connectionconnection)参数connection可提供自定义连接。SqlSessionopenSession(TransactionIsolationLevellevel)参数level可设置隔离级别。SqlSessionopenSession(ExecutorTypeexecType)参数execType有三个可选值。SqlSessionopenSession(ExecutorTypeexecType,BooleanautoCommit)参数execType有三个可选值。SqlSessionopenSession(ExecutorTypeexecType,Connectionconnection)参数ExecutorType有三个可选值。openSession(ExecutorTypeexecType)参数值
参数execType有三个可选值:ExecutorType.SIMPLE:表示为每条语句创建一条新的预处理语句。ExecutorType.REUSE:表示会复用预处理语句。ExecutorType.BATCH:表示会批量执行所有更新语句。SqlSessionFactory100openSession(ExecutorTypeexecType,BooleanautoCommit)参数值
参数execType有三个可选值:ExecutorType.SIMPLE:表示为每条语句创建一条新的预处理语句。ExecutorType.REUSE:表示会复用预处理语句。ExecutorType.BATCH:表示会批量执行所有更新语句。
参数autoCommit可设置是否开启事务。
SqlSessionFactory101openSession(ExecutorTypeexecType,Connectionconnection)参数值
参数ExecutorType有三个可选值:ExecutorType.SIMPLE:表示为每条语句创建一条新的预处理语句。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 满井游记课件
- 2024年度物业租赁合同(办公场所)2篇
- 二零二四年度企业清算与法律服务合同
- 体育赛事承办合同
- 简易活动板房施工合同范本共2篇
- 2024年度电子商务供应链管理合同2篇
- 2024年度夫妻财产分割及债务处理协议
- 化工设计-ASPEN软件:第六章分离设备-塔
- 人教版九年级化学第四单元4化学式与化合价课时1化学式及其读写分层作业课件
- 烧伤整形美容护理教学授课
- 国家开放大学(山东)《财税法规专题》形考任务1-3+终结性考核参考答案
- 浙江省交通投资集团有限公司管理招聘真题
- DB50-T 771-2017 地下管线探测技术规范
- 2024年PMP项目管理师考试试卷及答案指导
- 教学计划(教案)-2024-2025学年人教版(2024)美术一年级上册
- 2024年新高考Ⅰ卷、Ⅱ卷、甲卷诗歌鉴赏试题讲评课件
- 任务二:诗歌朗诵教案 人教版
- 高职院校高水平现代物流管理专业群建设方案(现代物流管理专业群)
- 药用辅料生产质量管理规范
- 【小学语文中高年级单元整体设计的实践探究2000字(论文)】
- 全国清华大学版信息技术七年级下册第2单元第4课《动物的力量-认识高效运算的函数》教学设计
评论
0/150
提交评论