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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

MyBatis

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

MyBatis和hibernate的區(qū)別有哪些

首先要知道ORM框架, 簡(jiǎn)單來說就是通過實(shí)例對(duì)象的語法, 完成關(guān)系型數(shù)據(jù)庫的操作的一種框架, 是 對(duì)象-關(guān)系 映射, 也就是把數(shù)據(jù)庫映射成對(duì)象

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

開發(fā)方面

MyBatis 是一個(gè)半自動(dòng)映射的框架,因?yàn)?MyBatis 需要手動(dòng)匹配 POJO、SQL 和映射關(guān)系。(半自動(dòng)ORM, 需要寫sql并 配置對(duì)象之間的關(guān)系) Hibernate 是一個(gè)全表映射的框架,只需提供 POJO 和映射關(guān)系即可。(全自動(dòng)ORM 不需要寫sql以java對(duì)象表示數(shù)據(jù)庫關(guān)系, 自動(dòng)完成sql的包裝 還可以跨數(shù)據(jù)庫 )

sql 優(yōu)化方面

Hibernate 不需要編寫大量的 SQL,就可以完全映射,提供了日志、緩存、級(jí)聯(lián)(級(jí)聯(lián)比 MyBatis 強(qiáng)大)等特性,此外還提供 HQL(Hibernate Query Language)對(duì) POJO 進(jìn)行操作。但會(huì)多消耗性能。 MyBatis 手動(dòng)編寫 SQL,支持動(dòng)態(tài) SQL、處理列表、動(dòng)態(tài)生成表名、支持存儲(chǔ)過程。工作量相對(duì)大些。 (優(yōu)化工作比較方便)

不同優(yōu)勢(shì)

在技術(shù)選型時(shí)需考慮, 如果數(shù)據(jù)庫的設(shè)計(jì)上會(huì)有較大的, 頻繁的調(diào)整, 就是有MyBatis 如果需要做很多優(yōu)化工作 MyBatis也是更勝一籌

實(shí)現(xiàn)過程

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

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

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

3)構(gòu)造會(huì)話工廠:通過 MyBatis 的環(huán)境等配置信息構(gòu)建會(huì)話工廠 SqlSessionFactory。

4)創(chuàng)建會(huì)話對(duì)象:由會(huì)話工廠創(chuàng)建 SqlSession 對(duì)象,該對(duì)象中包含了執(zhí)行 SQL 語句的所有方法。

5)Executor 執(zhí)行器:MyBatis 底層定義了一個(gè) Executor 接口來操作數(shù)據(jù)庫,它將根據(jù) SqlSession 傳遞的參數(shù)動(dòng)態(tài)地生成需要執(zhí)行的 SQL 語句,同時(shí)負(fù)責(zé)查詢緩存的維護(hù)。

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

7)輸入?yún)?shù)映射:輸入?yún)?shù)類型可以是 Map、List 等集合類型,也可以是基本數(shù)據(jù)類型和 POJO 類型。輸入?yún)?shù)映射過程類似于 JDBC 對(duì) preparedStatement 對(duì)象設(shè)置參數(shù)的過程。

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

MyBatis在Spring Boot中的配置

創(chuàng)建一個(gè)SpringBoot項(xiàng)目 配置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數(shù)據(jù)庫驅(qū)動(dòng)包在編譯時(shí)沒有直接使用,但是運(yùn)行時(shí)需要,所以使用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數(shù)據(jù)庫連接池,同樣的運(yùn)行時(shí)需要 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.21</version> </dependency><!-- =================要添加的部分結(jié)束================== -->

在源代碼路徑下創(chuàng)建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# 設(shè)置打印日志的級(jí)別,及打印sql語句logging.level.root=ERRORlogging.level.druid.sql.Statement=ERRORlogging.level.frank=DEBUG# 美化JSON數(shù)據(jù)格式spring.jackson.serialization.indent-output=true# 設(shè)置JSON數(shù)據(jù)的日期格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8# JSON數(shù)據(jù)屬性為null時(shí)不返回spring.jackson.default-property-inclusion=non_null# 找不到資源404時(shí)拋出異常spring.mvc.throw-exception-if-no-handler-found=true# 禁用靜態(tài)資源的自動(dòng)映射,如不禁用,不存在的url將被映射到/**,servlet不有機(jī)會(huì)拋出異常#spring.resources.add-mappings=false# get請(qǐng)求參數(shù)及表單提交數(shù)據(jù)的日期格式spring.mvc.date-format=yyyy-MM-dd HH:mm:ss# 應(yīng)用/項(xiàng)目的部署路徑,默認(rèn)為/#server.servlet.context-path=/lucky-draw# SpringMVC中,DispatcherServlet的映射路徑,默認(rèn)為/**#spring.mvc.servlet.path=/**# 靜態(tài)資源映射:將路徑映射為/,即/static/xxx,映射為/xxx,支持多個(gè)字符串,逗號(hào)間隔# 默認(rèn)為/META-INF/resources/, /resources/, /static/, /public/#spring.resources.static-locations=/static/,/public/#====================要根據(jù)具體數(shù)據(jù)庫配置......的部分開始====================#druid數(shù)據(jù)庫連接池配置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#====================要根據(jù)具體數(shù)據(jù)庫配置......的部分結(jié)束====================##mapper##mappers 多個(gè)接口時(shí)逗號(hào)隔開##mapper.mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.MySqlMapper,tk.mybatis.mapper.common.IdsMapper##mapper.notEmpty=true##mapper.identity=MYSQL###pagehelper##數(shù)據(jù)庫方言:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby#pagehelper.helperDialect=mysql##默認(rèn)值為 false,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為 true 時(shí),會(huì)將 RowBounds 中的 offset 參數(shù)當(dāng)成 pageNum 使用,可以用頁碼和頁面大小兩個(gè)參數(shù)進(jìn)行分頁。##pagehelper.offset-as-page-num=falses##默認(rèn)值為false,該參數(shù)對(duì)使用 RowBounds 作為分頁參數(shù)時(shí)有效。 當(dāng)該參數(shù)設(shè)置為true時(shí),使用 RowBounds 分頁會(huì)進(jìn)行 count 查詢。#pagehelper.row-bounds-with-count=true##默認(rèn)值為 false,當(dāng)該參數(shù)設(shè)置為 true 時(shí),如果 pageSize=0 或者 RowBounds.limit = 0 就會(huì)查詢出全部的結(jié)果(相當(dāng)于沒有執(zhí)行分頁查詢,但是返回結(jié)果仍然是 Page 類型)。##pagehelper.page-size-zero=false##分頁合理化參數(shù),默認(rèn)值為false。當(dāng)該參數(shù)設(shè)置為 true 時(shí),pageNum<=0 時(shí)會(huì)查詢第一頁, pageNum>pages(超過總數(shù)時(shí)),會(huì)查詢最后一頁。默認(rèn)false 時(shí),直接根據(jù)參數(shù)進(jìn)行查詢。#pagehelper.reasonable=true##為了支持startPage(Object params)方法,增加了該參數(shù)來配置參數(shù)映射,用于從對(duì)象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認(rèn)值, 默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。#pagehelper.params=pageNum=pageNumber;pageSize=pageSize;count=countSql;reasonable=reasonable;##支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù),默認(rèn)值false,分頁插件會(huì)從查詢方法的參數(shù)值中,自動(dòng)根據(jù)上面 params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁。 使用方法可以參考測(cè)試代碼中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。##pagehelper.supportMethodsArguments=true##用于控制默認(rèn)不帶 count 查詢的方法中,是否執(zhí)行 count 查詢,默認(rèn) true 會(huì)執(zhí)行 count 查詢,這是一個(gè)全局生效的參數(shù),多數(shù)據(jù)源時(shí)也是統(tǒng)一的行為。#pagehelper.default-count=false

在resources目錄下創(chuàng)建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> <!-- 默認(rèn)false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時(shí)把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name='forceBigDecimals' value='false' /> </javaTypeResolver> <!--MyBatis 生成器只需要生成 Model--> <javaModelGenerator targetProject='修改為自己的項(xiàng)目名/src/test/java' targetPackage='修改為實(shí)體類的包(model,在啟動(dòng)類的根包下)'><!-- <property name='rootClass' value='修改為實(shí)體類的父類'/>--> </javaModelGenerator> <!--mybatis 的xml文件地址--> <sqlMapGenerator targetProject='修改為自己的項(xiàng)目名/src/test/resources' targetPackage='修改為xml的包(mapper)'> <property name='enableSubPackages' value='true'/> </sqlMapGenerator> <!--mybatis的mapper接口--> <javaClientGenerator type='XMLMAPPER' targetProject='修改為自己的項(xiàng)目名/src/test/java' targetPackage='修改為mapper的包(在啟動(dòng)類的根包下)'> <property name='enableSubPackages' value='true'/><!-- <property name='rootInterface' value='修改為mapper的父接口'/>--> </javaClientGenerator> <!-- 需要生成的表,%表示模糊匹配,也可以指定具體的表名 --><!-- <table tableName='%'--><!--enableCountByExample='false'--><!--enableDeleteByExample='false'--><!--enableSelectByExample='false'--><!--enableUpdateByExample='false'--><!-- >--> <table tableName='%'> <!-- insert方法通過自增主鍵插入數(shù)據(jù)后,主鍵值是否設(shè)置到對(duì)象屬性中 --> <!-- <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>

如果不知道路徑可以自己打印一下當(dāng)前項(xiàng)目的絕對(duì)路徑

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) { //打印當(dāng)前項(xiàng)目的絕對(duì)路徑 System.out.println(new File('').getAbsolutePath()); }}

在test目錄下創(chuàng)建resources包

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

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

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

給mapper的每個(gè)文件增加注解

@Mapper

總結(jié)

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲深夜福利在线观看| 麻豆精品蜜桃视频网站| 涩涩av在线| 日本伊人久久| 亚州欧美在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美网站在线| 国产在线成人| 日韩午夜一区| 免费在线观看不卡| 丝袜美腿亚洲一区二区图片| 麻豆91精品| 老司机久久99久久精品播放免费| 亚洲综合不卡| 日韩免费精品| 国产精品自在| 国产成人77亚洲精品www| 另类专区亚洲| 欧美精品资源| 激情欧美丁香| 快she精品国产999| 日韩精品中文字幕吗一区二区| 国产精品久久免费视频| 黄色网一区二区| 日韩免费看片| 怡红院精品视频在线观看极品| 99视频在线精品国自产拍免费观看| 香蕉国产精品| 免费观看久久久4p| 欧美日韩亚洲三区| 精品免费视频| 成人免费网站www网站高清| 亚洲电影在线| 久久福利影视| 国产精品中文字幕亚洲欧美| 日韩av在线播放网址| 亚洲一级影院| 日本午夜精品一区二区三区电影| 狂野欧美性猛交xxxx| 久久国产免费| 日韩三区四区| 97精品一区| 久久夜色精品| 精品国产不卡| 在线成人直播| 国产精品最新自拍| 1024精品一区二区三区| 综合激情网站| 久久精品国产亚洲一区二区三区| 99久久婷婷| 婷婷精品在线| 激情国产在线| 亚洲综合婷婷| 日韩精品专区| 亚洲欧美网站在线观看| 久久久久免费| 综合一区av| 久久影院午夜精品| 蜜桃av一区二区三区电影| 韩国一区二区三区视频| 巨乳诱惑日韩免费av| 精品欧美日韩精品| 一区二区三区午夜视频| 国产一区丝袜| 视频精品一区二区| www.九色在线| 亚洲精品第一| 亚洲www免费| 欧美在线观看天堂一区二区三区| 亚洲风情在线资源| 久久精品97| 欧美不卡在线| 久久精品国产99国产精品| 蜜臀精品一区二区三区在线观看| 日韩免费福利视频| 欧美日韩一区二区三区四区在线观看| 久久久夜精品| 中文字幕免费一区二区| 一区二区精品伦理...| 日韩1区2区3区| 91精品1区| 激情综合五月| 久久国产生活片100| 欧美a一区二区| 亚洲影视一区二区三区| 亚洲天堂黄色| 色综合五月天| 国产精品一区三区在线观看| 99视频精品| 成人日韩在线观看| 久久麻豆视频| 欧美亚洲福利| 婷婷综合一区| 伊人成人在线视频| 美女av在线免费看| 久久精品一区二区国产| 亚洲精品一二三**| 亚洲中字黄色| 成人av二区| 亚洲va中文在线播放免费| 久久香蕉精品香蕉| 国产精品xxx在线观看| 清纯唯美亚洲综合一区| 中文字幕日本一区二区| 亚洲一区国产一区| 亚洲国产一区二区三区在线播放| 日韩一区三区| 91亚洲国产| 欧美成人aaa| 国产精品丝袜在线播放| 久久久蜜桃一区二区人| 亚洲伦乱视频| 99视频精品全部免费在线视频| 精品女同一区二区三区在线观看| 国产精品nxnn| 国产精品流白浆在线观看| 噜噜噜久久亚洲精品国产品小说| 婷婷综合亚洲| 亚洲激情中文在线| 亚洲精品一区二区妖精| 午夜av一区| 中国女人久久久| 午夜精品亚洲| 欧美 日韩 国产一区二区在线视频 | 日本亚洲欧洲无免费码在线| 久久av一区| 免播放器亚洲| 免费看精品久久片| 日韩一区精品| 蜜桃久久久久久| 亚洲精一区二区三区| 三级欧美在线一区| 免费观看在线色综合| 亚洲精品免费观看| 7m精品国产导航在线| 国产欧美日韩亚洲一区二区三区| 日本不卡在线视频| 91精品视频一区二区| 国产精品一区二区三区www| 91p九色成人| 精品一区二区三区中文字幕| 国产精品99久久精品| 成人久久一区| 最新日韩av| 亚洲三级视频| 国产日韩一区二区三区在线| 国产精品视频一区二区三区四蜜臂 | 视频一区中文字幕国产| 亚洲无线观看| 日本国产亚洲| 久久久91麻豆精品国产一区| 国产一区二区三区天码| 国产伦久视频在线观看| 久久九九电影| 午夜一区在线| 日韩国产精品久久久久久亚洲| 欧美影院精品| 精品日产乱码久久久久久仙踪林| 成人羞羞在线观看网站| 香蕉国产精品| 日韩激情精品| 欧美激情在线精品一区二区三区| 91亚洲人成网污www| 欧美日韩国产探花| 日韩1区2区3区| 成人在线视频免费| 亚洲精品电影| 国产欧美一区二区三区精品观看| 精品网站999| 亚洲视频综合| 日本久久一区| 神马午夜在线视频| 一区在线视频观看| 国产亚洲一区二区三区啪| 国产在线一区不卡| 91精品99| 91成人精品观看| 中文另类视频| 日本在线观看不卡视频| 中文在线а√天堂| 亚洲丝袜啪啪| 欧美经典一区| 婷婷亚洲五月色综合| 国产精品一线| 99re国产精品| 国产精品久久久久久久久久妞妞| 日本久久成人网| 欧美一级网站| 欧美理论视频| 国产极品久久久久久久久波多结野| 欧美色图国产精品| 日韩av网站免费在线| 欧美freesex黑人又粗又大| 免费久久99精品国产自在现线| 你懂的国产精品| 亚洲女人av| 日本久久综合| 日韩中文字幕一区二区高清99| 日韩一区欧美| 国产色噜噜噜91在线精品|