长沙雨花区建设局网站,wordpress打不开主页,房地产新闻,学校网站asp目录 前言
一、MyBatis简介
1.MyBatis是什么
2.MyBatis的特点
3.mybatis的作用
4.MyBatis的应用场景
5.MyBatis优缺点
二、相关概念
1.ORM概述
2.常见的ORM框架
3.什么是持久层框架
三、MyBatis的工作原理
1.框架交互
2.工作原理
编辑
四、MyBatis环境搭建
1…目录 前言
一、MyBatis简介
1.MyBatis是什么
2.MyBatis的特点
3.mybatis的作用
4.MyBatis的应用场景
5.MyBatis优缺点
二、相关概念
1.ORM概述
2.常见的ORM框架
3.什么是持久层框架
三、MyBatis的工作原理
1.框架交互
2.工作原理
编辑
四、MyBatis环境搭建
1 创建maven工程
2 导入相关pom依赖
3 导入jdbc配置文件
4.导入web.xml对应版本
5 Mybatis相关插件安装
6 Mybatis-cfg.xml 核心配置
7 generatorConfig.xml 配置代码生成器
五、MyBatis实现CURD增删改查
1.找到配置好的MyBatis插件启动mybatis-generator.geneerate 2.编写业务逻辑层
3.SqlSession工厂类
4.测试类
测试结果 前言
MyBatis是一个简单易用的持久层框架通过将Java对象映射到数据库表中提供了高效、灵活的数据库访问解决方案。相对于其他ORM框架MyBatis具有更低的学习成本和更高的灵活性使得开发人员可以更加直观地操作数据库。
本文将带您了解MyBatis的基本概念、特性以及它在项目中的优势和应用场景。首先我们会介绍什么是MyBatis以及它的工作原理。然后我们将探讨MyBatis的环境搭建。最后我们将讨论MyBatis适用的场景并展示如何进行基本的CRUD操作。
通过学习本文您将对MyBatis有一个全面的了解并能够在实际项目中应用MyBatis来处理数据库操作。无论您是初学者还是有一定经验的开发人员本文都将为您提供有价值的信息和指导。让我们开始吧
一、MyBatis简介
1.MyBatis是什么
MyBatis是一个开源的持久层框架它提供了将Java对象映射到数据库记录的功能通过XML或注解配置SQL语句并且能够执行和管理这些SQL语句。MyBatis通过简化数据库访问操作帮助开发人员更有效地与关系型数据库进行交互。
2.MyBatis的特点
简单易用: MyBatis使用简单的SQL语句和参数来进行数据库操作相对于其他ORM框架学习和使用成本较低。灵活性强: MyBatis支持基于XML或注解的配置方式开发人员可以根据需要选择合适的方式来定义SQL语句。易于集成: MyBatis可以与Spring等流行的Java企业级框架无缝集成方便开发人员使用。高性能: MyBatis通过优化的缓存机制、延迟加载等技术来提高数据库访问性能。
3.mybatis的作用
MyBatis主要用于将Java对象与数据库之间进行映射实现对象和关系型数据库之间的交互。它可以处理SQL语句的执行、结果集的映射、事务管理等操作帮助开发人员更加方便地进行数据库操作。
4.MyBatis的应用场景 对SQL语句有较强的控制需求如果你对数据库操作需要具备高度的灵活性和精确性MyBatis可以为你提供更细粒度的控制能力。你可以直接编写和调优SQL语句来满足特定的需求而无需依赖框架的自动生成SQL。 复杂业务逻辑和数据处理在某些项目中业务逻辑可能非常复杂并且需要对数据进行一系列的处理此时使用MyBatis可以使得数据的处理更加直观和方便。通过配置映射文件或注解将Java对象与数据库表之间的映射关系定义清晰可以更直接地操作这些数据对象。 性能要求较高的系统MyBatis拥有良好的性能通过合理地利用缓存机制和优化技巧能够有效减少数据库访问次数并提高系统的响应速度。因此在需要注重性能和响应时间的系统中MyBatis是一个很好的选择。 需要与现有的数据库和代码集成如果你的项目已经存在了一个成熟的数据库以及对应的数据表结构且希望借助一个简单的持久层框架将其与代码集成起来那么MyBatis是一个合适的选择。MyBatis能够通过简单的映射配置将已有的数据库转化为Java对象从而提供方便的数据库操作接口。
5.MyBatis优缺点 优点 1、简单易学容易上手相比于 Hibernate基于SQL编程。 2、消除了JDBC大量冗余的代码不需要手动开关连接。 3、很好的与各种数据库兼容因为 MyBatis 使用JDBC来连接数据库所以只要JDBC 支持的数据库 MyBatis 都支持而JDB提 供了可扩展性所以只要这个数据库有针对Java的jar包就可以就可以与 MyBatis 兼容开发人员不需要考虑数据库的差异性。 4、提供了很多第三方插件分页插件 / 逆向工程。 5、能够与Spring很好的集成。 6、如果使用映射文件的话可以让代码和配置文件完全分离。只要方法的定义没有改变那么只需要修改配置文件就可以达到修改的目的。 缺点 SQL语句的编写工作量较大尤其是字段多、关联表多时更是如此对开发人员编写SQL语句的功底有一定要求。 SQL语句依赖于数据库导致数据库移植性差不能随意更换数据库。 二、相关概念
1.ORM概述 在使用JDBC 的时候我们通常将数据直接返回但现在也会将数据封装到实体类对象中由对象携带数据。这样操作的时候可以通过操作对象的方式操作数据。但是手写这类代码通常是繁琐的、重复的如果有自动完成这些功能的程序就好了。 ORMObject-Relational-Mapping是对象关系映射的意思它是一种思想是指将数据库中的每一行数据用对象的形式表现出来。可以将 ORM 简单理解为上面我们提出的可以自动将对象与数据进行映射的技术。 2.常见的ORM框架
Hibernate 完全ORM映射框架 优点 1、简化了整个jdbc操作过程 2、对于开发者来说不需要关心sql了只需要去操作对象就可以了hibernate可以帮我们自动生成所需要的sql 3、代码移植性比较好通过hibernate操作db都是通过操作对象来进行的而hibernate会根据我们的操作和db的类型生成符合各种db要求的sql如果我们需要切换db的类型hibernate会自动适应对于开发者业务代码来说不需要做任何业务代码上的调整 4、开发效率比较高 缺点 1、sql优化比较艰难各种操作最终发给db的sql是由hibernate自动生成的对于开发者来说如果想干预最终需要执行的sql相对来说比较困难 2、hibernate入门比较容易但是想成为高手学习成本比较高 3、对于复杂的动态sql代码中也需要写很多判断进行组装动态sql这块的支持比较欠缺 如果做一些简单的系统开发周期也比较紧急对sql的优化要求也不是很高可以使用hibernate。 JdbcTemplate 半自动的ORM框架 jdbcTemplate是在Spring框架的基础上开发的一个jdbc框架所以对spring是有依赖的它对jdbc做了封装隐藏了各种重复的操作使用时只需传入需要执行的sql、参数以及对于结果如何解析的程序就可以了使用起来还是很方便的但是面对与动态sql它也是无能为力了。整体上来说jdbctemplate相对于纯jdbc隐藏了很多重复性的操作对于sql的写法和结果的组装上完全交给了开发者自己去控制在系统中使用也可以帮助我们节约很多时间而且学习相当简单. MyBatis半自动的化的ORM框架 MyBatis是一个半自动化的orm框架为什么说是半自动化的呢因为他需要我们自己去写sql而他做的更好的地方就是动态sql的支持上面而上面说的各种技术面对与动态sql只能自己写很多判断去组装sql而这些判断和组装在mybatis中实现起来就非常简单了完全由mybatis去帮我们实现了。mybatis将sql交由开发者去控制所以在sql的优化方面开发者可以随心所欲也就是说mybatis将重复性的工作优化到了极致操作db的过程、动态sql的拼装、结果和对象的映射这些mybatis都帮我们实现的很好而让我们将更多的经历花在sql的写法和优化上面所以毫无疑问mybatis使用人数和公司也是最多的。 3.什么是持久层框架 持久层框架是用于处理数据持久化的软件工具或库。它提供了一组API和工具使开发人员可以将Java对象存储到数据库中并从数据库中读取和修改对象的数据。持久层框架简化了数据访问的过程极大地提高了开发效率。开发人员不仅更方便地进行数据库操作并提高系统的性能和可维护性。 持久层框架提供了以下功能 对象-关系映射持久层框架能够将Java对象与数据库表之间进行映射使得开发人员可以使用面向对象的思维来操作数据库。 数据库访问持久层框架提供了一套API或方法用于执行常见的数据库操作如插入、更新、删除和查询等。通过这些方法可以方便地进行数据库操作不必直接编写原始的SQL语句。 缓存管理持久层框架通常会提供缓存机制通过缓存可以提高系统的性能减少对数据库的频繁访问。框架会自动管理和更新缓存以保持数据的一致性。 事务管理持久层框架通常会提供事务管理的功能确保数据库操作的一致性和完整性。开发人员可以通过框架提供的API或注解来控制事务的边界并进行事务的提交或回滚操作。 查询语言支持持久层框架通常会针对查询操作提供更高级的查询语言或查询构建器使得查询操作更加灵活和直观。 映射配置持久层框架允许开发人员配置对象与数据库表之间的映射关系通过配置文件或注解方式定义表的结构以及属性和字段的映射规则。 数据库连接池管理持久层框架通常会提供数据库连接池来管理数据库连接的获取和释放以提高数据库访问的效率和性能。
三、MyBatis的工作原理
1.框架交互
开始搭建MyBatis之前我们先来看看MyBatis在整个框架中的定位框架交互流程图 我们知道MyBatis是ORM框架Object Relational Mapping即对象关系映射。
在⾯向对象编程语⾔中将关系型数据库中的数据与对象建⽴起映射关系进⽽⾃动的完成数据与对象的互相转换
ORM将数据库映射为对象
数据库表table-- 类class 记录record⾏数据-- 对象object 字段field -- 对象的属性attribute ⼀般的 ORM 框架会将数据库模型的每张表都映射为⼀个 Java 类。
也就是说使⽤ MyBatis 可以像操作对象⼀样来操作数据库中的表可以实现对象和数据库表之间 的转换接下来我们来看 MyBatis 的使⽤吧。
2.工作原理 配置文件在配置文件中设置数据库连接信息、映射器Mapper以及各种配置选项。 SqlSessionFactory通过SqlSessionFactory来获取SqlSession。SqlSessionFactory是一个单例对象负责创建和管理SqlSession。 SqlSessionSqlSession是MyBatis与数据库交互的主要接口。它可以执行SQL语句、提交和回滚事务等操作。 Mapper接口为每个SQL语句编写对应的Mapper接口通过Mapper接口中的方法来执行SQL操作。 映射文件或注解将SQL语句与Mapper接口的方法进行映射。可以使用XML配置文件或注解方式定义SQL语句。 数据库操作通过编写合适的SQL语句调用Mapper接口中的方法来进行数据库的增删改查等操作。 结果映射MyBatis根据SQL查询结果将数据映射到Java对象中便于开发人员操作和处理查询结果。 Mybatis的工作原理如上图需要首先创建一个Mybatis的全局配置文件mybatis-config.xml名称不固定可以随便起其次是多个mapper.xml配置文件用来书写sql语句为了能够使用这些配置文件我们需要通过SqlSessionFactory创建一个SqlSession对象这个对象是Mybatis的核心对象CRUD都是通过该对象进行调用后通过executor底层执行器执行sql语句得到结果集返回。 总的来说MyBatis的工作原理是通过配置文件和映射文件或注解定义SQL语句和Mapper接口的对应关系然后通过SqlSession执行SQL语句并将结果映射到Java对象中。这样就实现了Java对象与数据库之间的交互。 四、MyBatis环境搭建
1 创建maven工程 2 导入相关pom依赖
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.ctb/groupIdartifactIdmybatis01/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnamemybatis01 Maven Webapp/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependencies!-- ********************** junit单元测试依赖 ********************** --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version
!-- scopetest/scope--/dependency!-- ********************** Java Servlet API ********************** --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion4.0.0/versionscopeprovided/scope/dependency!-- ********************** Mybatis依赖 ********************** --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version/dependency!-- ********************** Mysql JDBC驱动 ********************** --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.44/version/dependency!-- ********************** 日志配置 ********************** --!--记得修改mybatis.cfg.xml添加如下内容--!--setting namelogImpl valueLOG4J2/--!--核心log4j2jar包--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.9.1/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.9.1/version/dependency!--web工程需要包含log4j-web非web工程不需要--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion2.9.1/version
!-- exclusions/exclusions 排除--/dependency/dependenciesbuildfinalNamemybatis01/finalNameresources!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--resourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resource!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--resourcedirectorysrc/main/resources/directoryincludesincludejdbc.properties/includeinclude*.xml/include/includes/resource/resourcespluginsplugingroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-maven-plugin/artifactIdversion1.3.2/versiondependencies!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.44/version/dependency/dependenciesconfigurationoverwritetrue/overwrite/configuration/pluginpluginartifactIdmaven-clean-plugin/artifactIdversion3.1.0/version/plugin!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --pluginartifactIdmaven-resources-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-compiler-plugin/artifactIdversion3.8.0/version/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/version/pluginpluginartifactIdmaven-war-plugin/artifactIdversion3.2.2/version/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.5.2/version/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.8.2/version/plugin/plugins/build
/project3 导入jdbc配置文件
根据自己所使用mysql版本或云数据进行相应配置的修改
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://47.100.191.44:3308/mybatis_ssm?useUnicodetruecharacterEncodingUTF-8
jdbc.usernametest01
jdbc.passwordtest014.导入web.xml对应版本
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1display-nameArchetype Created Web Application/display-name
/web-app5 Mybatis相关插件安装
Free mybatis plugin 提供了一些方便的功能比如自动生成MyBatis的Mapper接口和XML映射文件以及一些代码片段的快速生成。它可以减少手动编写重复代码的工作量提高开发效率。 Mybatis generator MyBatis官方提供的一个代码生成工具。它可以根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件。你只需要配置好数据库连接和表信息然后运行生成器就可以快速生成基础的代码减少手动编写的工作量。 mybatis tools 一个集成了多个MyBatis相关工具的插件。它包括了代码生成器、Mapper接口和XML文件的自动补全、语法检查等功能。使用这个插件可以提高开发效率减少错误。 maven helper 这个插件是用于Maven项目的它可以帮助你更方便地管理和配置Maven依赖。在使用MyBatis框架时你可能需要引入一些MyBatis相关的依赖库Maven Helper可以帮助你自动添加这些依赖简化配置过程。 6 Mybatis-cfg.xml 核心配置
?xml version1.0 encodingUTF-8?
!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- 引入外部配置文件 --properties resourcejdbc.properties/settingssetting namelogImpl valueLOG4J2//settings!-- 别名 --typeAliases!--typeAlias typecom.javaxl.model.Book aliasBook/--/typeAliases!-- 配置mybatis运行环境 --environments defaultdevelopmentenvironment iddevelopment!-- typeJDBC 代表使用JDBC的提交和回滚来管理事务 --transactionManager typejdbc/!-- mybatis提供了3种数据源类型分别是POOLED,UNPOOLED,JNDI --!-- POOLED 表示支持JDBC数据源连接池 --!-- UNPOOLED 表示不支持数据源连接池 --!-- JNDI 表示支持外部数据源连接池 --dataSource typePOOLEDproperty namedrivervalue${jdbc.driver}/property nameurlvalue${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}//dataSource/environment/environmentsmappersmapper resourcecom/ctb/mapper/BookMapper.xml//mappers
/configuration7 generatorConfig.xml 配置代码生成器
?xml version1.0 encodingUTF-8 ?
!DOCTYPE generatorConfiguration PUBLIC -//mybatis.org//DTD MyBatis Generator Configuration 1.0//ENhttp://mybatis.org/dtd/mybatis-generator-config_1_0.dtd
generatorConfiguration!-- 引入配置文件 --properties resourcejdbc.properties/!--指定数据库jdbc驱动jar包的位置--classPathEntry locationD:\\software\\maven\\mvn_protetis\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar/!-- 一个数据库一个context --context idinfoGuardian!-- 注释 --commentGeneratorproperty namesuppressAllComments valuetrue/!-- 是否取消注释 --property namesuppressDate valuetrue/ !-- 是否生成注释代时间戳 --/commentGenerator!-- jdbc连接 --jdbcConnection driverClass${jdbc.driver}connectionURL${jdbc.url} userId${jdbc.username} password${jdbc.password}/!-- 类型转换 --javaTypeResolver!-- 是否使用bigDecimal false可自动转化以下类型Long, Integer, Short, etc. --property nameforceBigDecimals valuefalse//javaTypeResolver!-- 01 指定javaBean生成的位置 --!-- targetPackage指定生成的model生成所在的包名 --!-- targetProject指定在该项目下所在的路径 --javaModelGenerator targetPackagecom.ctb.modeltargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse/!-- 是否对model添加构造函数 --property nameconstructorBased valuetrue/!-- 是否针对string类型的字段在set的时候进行trim调用 --property nametrimStrings valuefalse/!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法只有构造方法 --property nameimmutable valuefalse//javaModelGenerator!-- 02 指定sql映射文件生成的位置 --sqlMapGenerator targetPackagecom.ctb.mappertargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse//sqlMapGenerator!-- 03 生成XxxMapper接口 --!-- typeANNOTATEDMAPPER,生成Java Model 和基于注解的Mapper对象 --!-- typeMIXEDMAPPER,生成基于注解的Java Model 和相应的Mapper对象 --!-- typeXMLMAPPER,生成SQLMap XML文件和独立的Mapper接口 --javaClientGenerator targetPackagecom.ctb.mappertargetProjectsrc/main/java typeXMLMAPPER!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model true:com.oop.eksp.user.model.[schemaName] --property nameenableSubPackages valuefalse//javaClientGenerator!-- 配置表信息 --!-- schema即为数据库名 --!-- tableName为对应的数据库表 --!-- domainObjectName是要生成的实体类 --!-- enable*ByExample是否生成 example类 --!--table schema tableNamet_book domainObjectNameBook--!--enableCountByExamplefalse enableDeleteByExamplefalse--!--enableSelectByExamplefalse enableUpdateByExamplefalse--!--lt;!ndash; 忽略列不生成bean 字段 ndash;gt;--!--lt;!ndash; ignoreColumn columnFRED / ndash;gt;--!--lt;!ndash; 指定列的java数据类型 ndash;gt;--!--lt;!ndash; columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / ndash;gt;--!--/table--table schema tableNamet_mvc_book domainObjectNameBookenableCountByExamplefalse enableDeleteByExamplefalseenableSelectByExamplefalse enableUpdateByExamplefalse!-- 忽略列不生成bean 字段 --!-- ignoreColumn columnFRED / --!-- 指定列的java数据类型 --!-- columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / --/table/context
/generatorConfiguration注意 1.修改本地路径到指定数据库jdbc驱动jar包的位置 !--指定数据库jdbc驱动jar包的位置--classPathEntry locationD:\\software\\maven\\mvn_protetis\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar/2.修改指定JavaBean生成的位置 javaModelGenerator targetPackagecom.ctb.modeltargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse/!-- 是否对model添加构造函数 --property nameconstructorBased valuetrue/!-- 是否针对string类型的字段在set的时候进行trim调用 --property nametrimStrings valuefalse/!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法只有构造方法 --property nameimmutable valuefalse//javaModelGenerator 3.修改指定sql映射文件生成的位置 sqlMapGenerator targetPackagecom.ctb.mappertargetProjectsrc/main/java!-- 是否允许子包即targetPackage.schemaName.tableName --property nameenableSubPackages valuefalse//sqlMapGenerator 4.修改指定mapper文件生成的位置 javaClientGenerator targetPackagecom.ctb.mappertargetProjectsrc/main/java typeXMLMAPPER!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model true:com.oop.eksp.user.model.[schemaName] --property nameenableSubPackages valuefalse//javaClientGenerator 5.修改需要引用的数据库表名--多张表则需要编写多个table标签 table schema tableNamet_mvc_book domainObjectNameBookenableCountByExamplefalse enableDeleteByExamplefalseenableSelectByExamplefalse enableUpdateByExamplefalse!-- 忽略列不生成bean 字段 --!-- ignoreColumn columnFRED / --!-- 指定列的java数据类型 --!-- columnOverride columnLONG_VARCHAR_FIELD jdbcTypeVARCHAR / --/table 五、MyBatis实现CURD增删改查
1.找到配置好的MyBatis插件启动mybatis-generator.geneerate 它将会生成我们所需要的实体和数据访问层的接口类和实现类 2.mapper中接口与xml文件的关系 通过接口和 XML 文件的映射关系实现了接口中的方法与 XML 文件中的 SQL 语句的绑定。当调用接口的方法时MyBatis会根据方法的名称和参数类型找到对应的XML文件中的SQL语句并执行该SQL语句。XML文件中的SQL语句可以直接调用数据库操作也可以通过映射配置将结果集映射到对象中。 为什么MyBatis要这么麻烦的定义一个接口和一个xml文件才能实现执行sql的功能呢
因为实际开发的过程中SQL语句往往是比较复杂的如果写在Java的类中不太合适的因此采用了接口XML文件的形式。
下面按照开发的工程思路也就是下面的流程来实现MyBatis查询用户的功能 3.编写业务逻辑层
接口类
package com.ctb.biz;import com.ctb.model.Book;/*** author 彪* remark* create 2023-08-21 8:20*/
public interface BookBiz {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);
}实现接口
package com.ctb.biz.impl;import com.ctb.biz.BookBiz;
import com.ctb.mapper.BookMapper;
import com.ctb.model.Book;/*** author 彪* remark* create 2023-08-21 8:20*/
public class BookBizImpl implements BookBiz {private BookMapper bookBiz;public BookMapper getBookBiz() {return bookBiz;}public void setBookBiz(BookMapper bookBiz) {this.bookBiz bookBiz;}Overridepublic int deleteByPrimaryKey(Integer bid) {return bookBiz.deleteByPrimaryKey(bid);}Overridepublic int insert(Book record) {return bookBiz.insert(record);}Overridepublic int insertSelective(Book record) {return bookBiz.insertSelective(record);}Overridepublic Book selectByPrimaryKey(Integer bid) {return bookBiz.selectByPrimaryKey(bid);}Overridepublic int updateByPrimaryKeySelective(Book record) {return bookBiz.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(Book record) {return bookBiz.updateByPrimaryKey(record);}
}4.SqlSession工厂类
package com.ctb.utils;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SessionUtil {private static SqlSessionFactory sessionFactory;private static ThreadLocalSqlSession threadLocal new ThreadLocalSqlSession();static {sessionFactory new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream(/mybatis.cfg.xml));}public static SqlSession openSession() {SqlSession session threadLocal.get();if (null session) {session sessionFactory.openSession();threadLocal.set(session);}return session;}public static void main(String[] args) {SqlSession session openSession();System.out.println(session.getConnection());session.close();
// System.out.println(session.getConnection());}
}5.测试类
package com.ctb.demo;import com.ctb.biz.BookBiz;
import com.ctb.biz.impl.BookBizImpl;
import com.ctb.mapper.BookMapper;
import com.ctb.model.Book;
import com.ctb.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;/*** author 彪* remark* create 2023-08-21 8:43*/
public class Demo {private SqlSession sqlSession;private BookBiz bookBiz;Beforepublic void a(){System.out.println(执行测试方法之前会执行的初始化代码块);sqlSession SessionUtil.openSession();BookBizImpl bookBiz new BookBizImpl();BookMapper mapper sqlSession.getMapper(BookMapper.class);bookBiz.setBookBiz(mapper);this.bookBizbookBiz;}Afterpublic void b(){System.out.println(执行测试方法之后会执行);}Testpublic void test1(){Book book bookBiz.selectByPrimaryKey(35);System.out.println(book);}Testpublic void test2(){int i bookBiz.deleteByPrimaryKey(35);if (i0){System.out.println(删除成功);}else {System.out.println(删除失败);}}
}这里简单测试了一下查询和删除其他的就不一一测试了
测试结果
查询 删除 MyBatis快速入门以及环境搭建和CRUD的实现到这就结束了
祝大家在编程之路越走越顺越走越宽