电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis

瀏覽:107日期:2023-08-20 08:17:06

MyBatis

MyBatis 是一個基于 Java 的持久層框架。MyBatis 提供的持久層框架包括 SQL Maps 和 Data Access Objects(DAO),它消除了幾乎所有的 JDBC 代碼和參數的手工設置以及結果集的檢索。 MyBatis 使用簡單的 XML 或注解用于配置和原始映射,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 對象)映射成數據庫中的記錄。 目前,Java 的持久層框架產品有許多,常見的有 Hibernate 和 MyBatis。

MyBatis和hibernate的區別有哪些

首先要知道ORM框架, 簡單來說就是通過實例對象的語法, 完成關系型數據庫的操作的一種框架, 是 對象-關系 映射, 也就是把數據庫映射成對象

JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis

開發方面

MyBatis 是一個半自動映射的框架,因為 MyBatis 需要手動匹配 POJO、SQL 和映射關系。(半自動ORM, 需要寫sql并 配置對象之間的關系) Hibernate 是一個全表映射的框架,只需提供 POJO 和映射關系即可。(全自動ORM 不需要寫sql以java對象表示數據庫關系, 自動完成sql的包裝 還可以跨數據庫 )

sql 優化方面

Hibernate 不需要編寫大量的 SQL,就可以完全映射,提供了日志、緩存、級聯(級聯比 MyBatis 強大)等特性,此外還提供 HQL(Hibernate Query Language)對 POJO 進行操作。但會多消耗性能。 MyBatis 手動編寫 SQL,支持動態 SQL、處理列表、動態生成表名、支持存儲過程。工作量相對大些。 (優化工作比較方便)

不同優勢

在技術選型時需考慮, 如果數據庫的設計上會有較大的, 頻繁的調整, 就是有MyBatis 如果需要做很多優化工作 MyBatis也是更勝一籌

實現過程

JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis

1)讀取 MyBatis 配置文件:mybatis-config.xml 為 MyBatis 的全局配置文件,配置了 MyBatis 的運行環境等信息,例如數據庫連接信息。

2)加載映射文件。映射文件即 SQL 映射文件,該文件中配置了操作數據庫的 SQL 語句,需要在 MyBatis 配置文件 mybatis-config.xml 中加載。mybatis-config.xml 文件可以加載多個映射文件,每個文件對應數據庫中的一張表。

3)構造會話工廠:通過 MyBatis 的環境等配置信息構建會話工廠 SqlSessionFactory。

4)創建會話對象:由會話工廠創建 SqlSession 對象,該對象中包含了執行 SQL 語句的所有方法。

5)Executor 執行器:MyBatis 底層定義了一個 Executor 接口來操作數據庫,它將根據 SqlSession 傳遞的參數動態地生成需要執行的 SQL 語句,同時負責查詢緩存的維護。

6)MappedStatement 對象:在 Executor 接口的執行方法中有一個 MappedStatement 類型的參數,該參數是對映射信息的封裝,用于存儲要映射的 SQL 語句的 id、參數等信息。

7)輸入參數映射:輸入參數類型可以是 Map、List 等集合類型,也可以是基本數據類型和 POJO 類型。輸入參數映射過程類似于 JDBC 對 preparedStatement 對象設置參數的過程。

8)輸出結果映射:輸出結果類型可以是 Map、 List 等集合類型,也可以是基本數據類型和 POJO 類型。輸出結果映射過程類似于 JDBC 對結果集的解析過程。

MyBatis在Spring Boot中的配置

創建一個SpringBoot項目 配置pom.xml文件

<!-- =================要添加的部分開始================== --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <!-- Mybatis代碼生成工具 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!-- mysql-connector-java: mysql數據庫驅動包在編譯時沒有直接使用,但是運行時需要,所以使用scope runtime --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> <scope>runtime</scope> </dependency> <!-- druid-spring-boot-starter: 阿里Druid數據庫連接池,同樣的運行時需要 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.21</version> </dependency><!-- =================要添加的部分結束================== -->

在源代碼路徑下創建Generator

import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;import java.io.InputStream;import java.util.ArrayList;import java.util.List;public class Generator { private static final boolean OVERWRITE = true; private static final String CONFIG_PATH = 'generator/config.xml'; public static void main(String[] args) throws Exception { System.out.println('--------------------start generator-------------------'); System.out.println(new File('').getAbsolutePath()); List<String> warnings = new ArrayList<>(); ClassLoader classloader = Thread.currentThread().getContextClassLoader(); InputStream is = classloader.getResourceAsStream(CONFIG_PATH); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(is); DefaultShellCallback callback = new DefaultShellCallback(OVERWRITE); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); warnings.forEach(System.err::println); System.out.println('--------------------end generator-------------------'); }}

在resources目錄下配置application.properties

#debug=true# 設置打印日志的級別,及打印sql語句logging.level.root=ERRORlogging.level.druid.sql.Statement=ERRORlogging.level.frank=DEBUG# 美化JSON數據格式spring.jackson.serialization.indent-output=true# 設置JSON數據的日期格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8# JSON數據屬性為null時不返回spring.jackson.default-property-inclusion=non_null# 找不到資源404時拋出異常spring.mvc.throw-exception-if-no-handler-found=true# 禁用靜態資源的自動映射,如不禁用,不存在的url將被映射到/**,servlet不有機會拋出異常#spring.resources.add-mappings=false# get請求參數及表單提交數據的日期格式spring.mvc.date-format=yyyy-MM-dd HH:mm:ss# 應用/項目的部署路徑,默認為/#server.servlet.context-path=/lucky-draw# SpringMVC中,DispatcherServlet的映射路徑,默認為/**#spring.mvc.servlet.path=/**# 靜態資源映射:將路徑映射為/,即/static/xxx,映射為/xxx,支持多個字符串,逗號間隔# 默認為/META-INF/resources/, /resources/, /static/, /public/#spring.resources.static-locations=/static/,/public/#====================要根據具體數據庫配置......的部分開始====================#druid數據庫連接池配置spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/......?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=falsespring.datasource.username=rootspring.datasource.password=......spring.datasource.druid.initial-size=1spring.datasource.druid.min-idle=1spring.datasource.druid.max-active=20spring.datasource.druid.test-on-borrow=true#Mybatis配置mybatis.mapper-locations=classpath:mapper/**Mapper.xml#mybatis.type-aliases-package=frank.mappermybatis.configuration.map-underscore-to-camel-case=true#mybatis.config-location=classpath:mybatis/mybatis-config.xml#====================要根據具體數據庫配置......的部分結束====================##mapper##mappers 多個接口時逗號隔開##mapper.mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.MySqlMapper,tk.mybatis.mapper.common.IdsMapper##mapper.notEmpty=true##mapper.identity=MYSQL###pagehelper##數據庫方言:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby#pagehelper.helperDialect=mysql##默認值為 false,該參數對使用 RowBounds 作為分頁參數時有效。 當該參數設置為 true 時,會將 RowBounds 中的 offset 參數當成 pageNum 使用,可以用頁碼和頁面大小兩個參數進行分頁。##pagehelper.offset-as-page-num=falses##默認值為false,該參數對使用 RowBounds 作為分頁參數時有效。 當該參數設置為true時,使用 RowBounds 分頁會進行 count 查詢。#pagehelper.row-bounds-with-count=true##默認值為 false,當該參數設置為 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結果(相當于沒有執行分頁查詢,但是返回結果仍然是 Page 類型)。##pagehelper.page-size-zero=false##分頁合理化參數,默認值為false。當該參數設置為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最后一頁。默認false 時,直接根據參數進行查詢。#pagehelper.reasonable=true##為了支持startPage(Object params)方法,增加了該參數來配置參數映射,用于從對象中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認值, 默認值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。#pagehelper.params=pageNum=pageNumber;pageSize=pageSize;count=countSql;reasonable=reasonable;##支持通過 Mapper 接口參數來傳遞分頁參數,默認值false,分頁插件會從查詢方法的參數值中,自動根據上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。 使用方法可以參考測試代碼中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。##pagehelper.supportMethodsArguments=true##用于控制默認不帶 count 查詢的方法中,是否執行 count 查詢,默認 true 會執行 count 查詢,這是一個全局生效的參數,多數據源時也是統一的行為。#pagehelper.default-count=false

在resources目錄下創建Generator包并且配置config.xml文件

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE generatorConfiguration PUBLIC '-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN' 'http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd'><generatorConfiguration> <properties resource='application.properties' /> <context targetRuntime='MyBatis3' defaultModelType='flat'> <property name='javaFileEncoding' value='UTF-8'/> <commentGenerator> <property name='suppressDate' value='true'/> <property name='suppressAllComments' value='true' /> <property name='addRemarkComments' value='true'/> </commentGenerator> <jdbcConnection driverClass='${spring.datasource.driver-class-name}' connectionURL='${spring.datasource.url}' userId='${spring.datasource.username}' password='${spring.datasource.password}'> <property name='useInformationSchema' value='true' /> </jdbcConnection> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name='forceBigDecimals' value='false' /> </javaTypeResolver> <!--MyBatis 生成器只需要生成 Model--> <javaModelGenerator targetProject='修改為自己的項目名/src/test/java' targetPackage='修改為實體類的包(model,在啟動類的根包下)'><!-- <property name='rootClass' value='修改為實體類的父類'/>--> </javaModelGenerator> <!--mybatis 的xml文件地址--> <sqlMapGenerator targetProject='修改為自己的項目名/src/test/resources' targetPackage='修改為xml的包(mapper)'> <property name='enableSubPackages' value='true'/> </sqlMapGenerator> <!--mybatis的mapper接口--> <javaClientGenerator type='XMLMAPPER' targetProject='修改為自己的項目名/src/test/java' targetPackage='修改為mapper的包(在啟動類的根包下)'> <property name='enableSubPackages' value='true'/><!-- <property name='rootInterface' value='修改為mapper的父接口'/>--> </javaClientGenerator> <!-- 需要生成的表,%表示模糊匹配,也可以指定具體的表名 --><!-- <table tableName='%'--><!--enableCountByExample='false'--><!--enableDeleteByExample='false'--><!--enableSelectByExample='false'--><!--enableUpdateByExample='false'--><!-- >--> <table tableName='%'> <!-- insert方法通過自增主鍵插入數據后,主鍵值是否設置到對象屬性中 --> <!-- <generatedKey column='id' sqlStatement='JDBC'/>--> <generatedKey column='id' sqlStatement='Mysql' identity='true' /> </table> <!-- <table tableName='user'>--> <!-- <generatedKey column='id' sqlStatement='Mysql' identity='true' />--> <!-- </table>--> </context></generatorConfiguration>

如果不知道路徑可以自己打印一下當前項目的絕對路徑

import java.io.File;/** * Created with IntelliJ IDEA. * Description: If you don’t work hard, you will a loser. * User: Listen-Y. * Date: 2020-08-21 * Time: 17:41 */public class test { public static void main(String[] args) { //打印當前項目的絕對路徑 System.out.println(new File('').getAbsolutePath()); }}

在test目錄下創建resources包

JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis

將application.properties和config.xml自己配置完畢就可以在Generator中運行 最后把test目錄下生成的model和mapper復制到源文件的啟動目錄的包下 把resources目錄下生成的mapper復制到源文件的resources目錄下 在啟動文件中加

@MapperScan(basePackages = '啟動類的根包名.mapper')

給mapper的每個文件增加注解

@Mapper

總結

到此這篇關于JavaEE SpringMyBatis是什么? 它和Hibernate的區別及如何配置MyBatis的文章就介紹到這了,更多相關JavaEE Spring MyBatis是什么它和Hibernate的區別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 实体店商新零售|微赢|波后|波后合作|微赢集团 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 尾轮组_头轮组_矿用刮板_厢式刮板机_铸石刮板机厂家-双驰机械 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 |