摘要:但是鑒于國(guó)內(nèi)市場(chǎng)環(huán)境而言,掌握無異于是佳的選擇,低學(xué)習(xí)成本和動(dòng)態(tài)解耦的特點(diǎn)使得更容易被人們所接受。
SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個(gè) WEB 工程
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射,幾乎避免了所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集,使用簡(jiǎn)單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫中的記錄,在國(guó)內(nèi)可謂是占據(jù)了半壁江山......
ORM對(duì)比圖以下針對(duì)Spring JDBC、 Spring Data Jpa、Mybatis三款框架做了個(gè)粗略的對(duì)比。一般應(yīng)用的性能瓶頸并不是在于ORM,所以這三個(gè)框架技術(shù)選型應(yīng)該考慮項(xiàng)目的場(chǎng)景、團(tuán)隊(duì)的技能掌握情況、開發(fā)周期(開發(fā)效率)...
框架對(duì)比 | Spring JDBC | Spring Data Jpa | Mybatis |
---|---|---|---|
性能 | 性能最好 | 性能最差 | 居中 |
代碼量 | 多 | 少 | 多 |
學(xué)習(xí)成本 | 低 | 高 | 居中 |
推薦指數(shù) | ??? | ????? | ????? |
個(gè)人觀點(diǎn)
拋開學(xué)習(xí)成本而言,對(duì)于業(yè)務(wù)簡(jiǎn)單的中小型項(xiàng)目中使用Spring Data Jpa 開發(fā)無異于是最快速的。但是鑒于國(guó)內(nèi)市場(chǎng)環(huán)境而言,掌握Mybatis無異于是佳的選擇,低學(xué)習(xí)成本和動(dòng)態(tài)SQL解耦的特點(diǎn)使得更容易被人們所接受。對(duì)于業(yè)務(wù)復(fù)雜且對(duì)性能要求較高的項(xiàng)目來說Mybatis往往能更好的勝任,可以自己進(jìn)行SQL優(yōu)化,同時(shí)更讓我喜歡的是Mybatis分頁插件與通用Mapper(單表CURD無需自己手寫)有了這兩款插件的支持,還有什么理由拒絕Mybatis呢
導(dǎo)入依賴在 pom.xml 中添加 Mybatis 的依賴包mybatis-spring-boot-starter,該包擁有自動(dòng)裝配的特點(diǎn)
連接數(shù)據(jù)庫org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test
與SpringDataJpa、Spring JDBC一樣,需要在application.properties中添加數(shù)據(jù)源的配置,同時(shí)也需要添加對(duì)mybatis的配置
spring.datasource.url=jdbc:mysql://localhost:3306/chapter6?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false spring.datasource.password=root spring.datasource.username=root # 注意注意 mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml #mybatis.mapper-locations=classpath:mapper/*.xml #這種方式需要自己在resources目錄下創(chuàng)建mapper目錄然后存放xml mybatis.type-aliases-package=com.battcn.entity # 駝峰命名規(guī)范 如:數(shù)據(jù)庫字段是 order_id 那么 實(shí)體字段就要寫成 orderId mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case是一個(gè)非常好的配置項(xiàng),合理的命名規(guī)范可以讓我們省略很多不必要的麻煩,比如xx-mapper.xml中的resultMap的映射可以省略掉了
注意事項(xiàng)
由于 mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml配置的在java package中,而Spring Boot默認(rèn)只打入java package -> *.java,所以我們需要給pom.xml文件添加如下內(nèi)容
具體編碼src/main/resources src/main/java **/*.xml true org.springframework.boot spring-boot-maven-plugin
完成基本配置后,接下來進(jìn)行具體的編碼操作。
表結(jié)構(gòu)創(chuàng)建一張 t_user 的表
CREATE TABLE `t_user` ( `id` int(8) NOT NULL AUTO_INCREMENT COMMENT "主鍵自增", `username` varchar(50) NOT NULL COMMENT "用戶名", `password` varchar(50) NOT NULL COMMENT "密碼", PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="用戶表";實(shí)體類
package com.battcn.entity; import java.io.Serializable; /** * @author Levin * @since 2018/5/9 0007 */ public class User implements Serializable { private static final long serialVersionUID = 8655851615465363473L; private Long id; private String username; private String password; // TODO 省略get set }持久層
這里提供了兩種方式操作接口,第一種帶@Select注解的是Mybatis3.x提供的新特性,同理它還有@Update、@Delete、@Insert等等一系列注解,第二種就是傳統(tǒng)方式了,寫個(gè)接口映射,然后在XML中寫上我們的SQL語句...
UserMapper
package com.battcn.mapper; import com.battcn.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; /** * t_user 操作:演示兩種方式 *第一種是基于mybatis3.x版本后提供的注解方式
*第二種是早期寫法,將SQL寫在 XML 中
* * @author Levin * @since 2018/5/7 0007 */ @Mapper public interface UserMapper { /** * 根據(jù)用戶名查詢用戶結(jié)果集 * * @param username 用戶名 * @return 查詢結(jié)果 */ @Select("SELECT * FROM t_user WHERE username = #{username}") ListfindByUsername(@Param("username") String username); /** * 保存用戶信息 * * @param user 用戶信息 * @return 成功 1 失敗 0 */ int insert(User user); }
UserMapper 映射文件
測(cè)試INSERT INTO `t_user`(`username`,`password`) VALUES (#{username},#{password})
完成數(shù)據(jù)訪問層接口后,最后編寫一個(gè)junit測(cè)試類來檢驗(yàn)代碼的正確性。
package com.battcn; import com.battcn.entity.User; import com.battcn.mapper.UserMapper; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /** * @author Levin */ @RunWith(SpringRunner.class) @SpringBootTest public class Chapter6ApplicationTests { private static final Logger log = LoggerFactory.getLogger(Chapter6ApplicationTests.class); @Autowired private UserMapper userMapper; @Test public void test1() throws Exception { final int row1 = userMapper.insert(new User("u1", "p1")); log.info("[添加結(jié)果] - [{}]", row1); final int row2 = userMapper.insert(new User("u2", "p2")); log.info("[添加結(jié)果] - [{}]", row2); final int row3 = userMapper.insert(new User("u1", "p3")); log.info("[添加結(jié)果] - [{}]", row3); final List總結(jié)u1 = userMapper.findByUsername("u1"); log.info("[根據(jù)用戶名查詢] - [{}]", u1); } }
更多Mybatis的騷操作,請(qǐng)參考官方文檔
目前很多大佬都寫過關(guān)于 SpringBoot 的教程了,如有雷同,請(qǐng)多多包涵,本教程基于最新的 spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會(huì)一起介紹...
說點(diǎn)什么個(gè)人QQ:1837307557
battcn開源群(適合新手):391619659
微信公眾號(hào)(歡迎調(diào)戲):battcn
個(gè)人博客:http://blog.battcn.com/
全文代碼:https://github.com/battcn/spring-boot2-learning/tree/master/chapter6
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71362.html
摘要:準(zhǔn)備階段以上一篇文章的代碼為例子,即整合,上一篇文章是基于注解來實(shí)現(xiàn)的數(shù)據(jù)訪問層,這篇文章基于的來實(shí)現(xiàn),并開啟聲明式事務(wù)。創(chuàng)建實(shí)體類數(shù)據(jù)訪問層接口層用戶減塊用戶加塊,聲明事務(wù),并設(shè)計(jì)一個(gè)轉(zhuǎn)賬方法,用戶減塊,用戶加塊。 springboot開啟事務(wù)很簡(jiǎn)單,只需要一個(gè)注解@Transactional 就可以了。因?yàn)樵趕pringboot中已經(jīng)默認(rèn)對(duì)jpa、jdbc、mybatis開啟了事事...
摘要:通用是為了解決使用中的基本操作,使用它可以很方便的進(jìn)行開發(fā),可以節(jié)省開發(fā)人員大量的時(shí)間。當(dāng)該參數(shù)設(shè)置為時(shí),時(shí)會(huì)查詢第一頁,超過總數(shù)時(shí),會(huì)查詢最后一頁。 SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個(gè) WEB 工...
摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡(jiǎn)單 注解就這么簡(jiǎn)單 Druid數(shù)據(jù)庫連接池...
摘要:有必要建一個(gè)資源服務(wù)器存放靜態(tài)資源。一些用戶級(jí)別的數(shù)據(jù)輕量可以考慮存儲(chǔ)在中。存儲(chǔ)的是值,可以通過來對(duì)和對(duì)象之間的轉(zhuǎn)換如果我們的數(shù)據(jù)是在后臺(tái)傳過去或者轉(zhuǎn)換而成的,在前臺(tái)上并沒有做什么改變的話。 移動(dòng)商城項(xiàng)目總結(jié) 移動(dòng)商城項(xiàng)目是我第二個(gè)做得比較大的項(xiàng)目,該項(xiàng)目系統(tǒng)來源于傳智Java168期,十天的視頻課程(想要視頻的同學(xué)關(guān)注我的公眾號(hào)就可以直接獲取了) 通過這次的項(xiàng)目又再次開闊了我的視野,...
摘要:我有個(gè)定時(shí)器,這個(gè)注解是讓它發(fā)現(xiàn)定時(shí)器讓它去發(fā)現(xiàn)你的層如果你在創(chuàng)建項(xiàng)目的時(shí)候,忘記勾選某一些依賴的話不要緊,可以在文件里添加依賴。 前言 我之前是學(xué)SpringMVC的,后面聽同學(xué)說SpringBoot挺好用,極力推薦我學(xué)這個(gè)鬼。一開始,在網(wǎng)上找SpringBoot的學(xué)習(xí)資料,他們博文寫得不是說不好,而是不太詳細(xì)。我就在想我要自己寫一篇盡可能詳細(xì)的文章出來。 技術(shù)棧 Spring S...
閱讀 1340·2021-11-25 09:43
閱讀 752·2021-11-18 10:02
閱讀 2878·2021-09-07 09:59
閱讀 2757·2021-08-30 09:44
閱讀 2928·2019-08-30 13:17
閱讀 2317·2019-08-29 12:17
閱讀 1681·2019-08-28 17:57
閱讀 1290·2019-08-26 14:04