日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:251日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av网站在线观看| 精品欧美一区二区三区在线观看| 国产高清久久| 99riav国产精品| 亚洲精选av| 欧美另类中文字幕 | 免费欧美日韩| 六月丁香综合| 青青草精品视频| 国产日韩在线观看视频| 久久精品一区二区国产| 日韩欧美午夜| 美美哒免费高清在线观看视频一区二区 | 国产在线看片免费视频在线观看| 欧美日韩尤物久久| 玖玖玖国产精品| 国产欧美日韩亚洲一区二区三区| 麻豆精品新av中文字幕| 精品三级久久| 午夜电影一区| 激情视频网站在线播放色| 性欧美69xoxoxoxo| 久久国产99| 国产欧美一区二区三区精品观看| 97人人精品| 国产精品日韩欧美一区| 欧美亚洲网站| 日本午夜大片a在线观看| 99香蕉国产精品偷在线观看| 91精品国产自产精品男人的天堂 | 日韩av一区二区三区四区| 久久一区精品| 性欧美xxxx免费岛国不卡电影| 亚洲精品一二三**| 色在线视频观看| 日韩黄色免费网站| 99久久久久| 国产精品最新| 亚洲一区欧美二区| 国产一区二区三区久久| 免费在线观看日韩欧美| 精品一区二区三区中文字幕在线| 自由日本语亚洲人高潮| 国产剧情在线观看一区| 日韩午夜精品| 久久久久久久欧美精品| 国产欧美91| 五月天激情综合网| 国产精品www.| 首页亚洲欧美制服丝腿| 精品久久97| 亚洲精品自拍| 国产亚洲一区二区手机在线观看| 91精品视频一区二区| 激情综合自拍| 精品久久亚洲| 91久久精品无嫩草影院| 亚洲激情黄色| 久久久9色精品国产一区二区三区| 国产日韩中文在线中文字幕| 久久亚洲国产精品一区二区| 欧美精品日日操| 九九99久久精品在免费线bt| 亚洲不卡视频| 国产视频一区免费看| 久久美女性网| 国产精品国产一区| 日韩1区2区日韩1区2区| 国产精品女主播一区二区三区| 激情黄产视频在线免费观看| 国产精品66| 日韩精品免费一区二区夜夜嗨 | 红桃视频国产一区| 日韩电影免费网址| 国产高清视频一区二区| 亚洲一区二区三区在线免费| 不卡一区综合视频| 日本久久成人网| 久久精品国产99国产精品| 欧美日韩 国产精品| 亚洲涩涩av| 亚洲综合精品四区| 99pao成人国产永久免费视频| 日韩欧美一区二区三区免费观看| 国产精品毛片久久| 国产精品99视频| 麻豆理论在线观看| 一本大道色婷婷在线| 在线手机中文字幕| 天堂av在线| 99久久精品费精品国产| 久久亚洲国产| 欧美日中文字幕| 美女亚洲一区| 亚洲一区亚洲| 亚洲丝袜美腿一区| 亚洲精品在线二区| 日韩精品视频网站| 91精品尤物| 国产精品视频一区二区三区四蜜臂| 国产精品一区2区3区| 国产极品模特精品一二| 国产+成+人+亚洲欧洲在线| 欧美亚洲日本精品| 国产在线成人| 久久国产精品毛片| 亚洲综合福利| 欧美一区91| 精品久久影院| 久久久久久久久久久9不雅视频| 91国语精品自产拍| 噜噜噜久久亚洲精品国产品小说| 日韩欧美高清一区二区三区| 久久激情五月婷婷| 国内揄拍国内精品久久| 日本精品不卡| 石原莉奈在线亚洲三区| 日韩一二三区在线观看| 麻豆免费精品视频| 久久蜜桃av| 亚洲综合小说| 精品国产精品久久一区免费式 | 亚洲精品在线观看91| 在线视频日韩| 日本视频在线一区| 精品免费在线| 黄色成人在线网址| 国产欧美一区二区三区精品观看| 国产精选在线| 午夜免费一区| 欧美一级网址| 久久久久欧美精品| 蜜桃伊人久久| 精品一区二区三区中文字幕| 亚洲第一精品影视| 日本高清久久| 日韩中文首页| 日韩精品一卡二卡三卡四卡无卡| 日韩av一二三| 999久久久精品国产| 日本v片在线高清不卡在线观看| 欧美激情视频一区二区三区在线播放| 久久久久美女| 国产精品一区二区三区av| 国产在线成人| 国产精品网站在线看| 免费视频国产一区| 欧美黄色精品| 蜜臀av一区二区在线免费观看| 精品一二三区| 日韩有码av| 蜜臀av免费一区二区三区| 国产精品成人一区二区网站软件| 日韩精品免费一区二区三区| 日本va欧美va精品| 日韩午夜黄色| 国产精品原创| 欧美日韩伊人| 黄色日韩精品| 国产成人精品福利| 亚洲精品伊人| 午夜久久99| 麻豆mv在线观看| 国产探花一区二区| 夜夜嗨一区二区| 成人一区而且| 国产精品第一国产精品| 蜜臀久久99精品久久久画质超高清| 麻豆mv在线观看| 国产精品a久久久久| 亚洲精品九九| 国产亚洲精品自拍| 老牛影视精品| 精品资源在线| 国产日产精品_国产精品毛片| 黄色日韩精品| 久久一区二区三区喷水| 国产成人免费视频网站视频社区| 国产日韩三级| 91精品啪在线观看国产爱臀| 亚洲人成亚洲精品| 亚洲专区欧美专区| 亚洲手机视频| 麻豆国产91在线播放| 欧美亚洲一区二区三区| 午夜亚洲精品| 欧美日韩日本国产亚洲在线| 午夜精品成人av| 亚洲黄色中文字幕| 91综合网人人| 中文在线а√在线8| 精品三级在线| 精品欠久久久中文字幕加勒比| 国产精品最新自拍| 国产精品美女午夜爽爽| 国产亚洲人成a在线v网站| 国产日韩一区二区三免费高清| 欧美日韩xxxx| 日本午夜精品久久久久| 97久久亚洲|