摘要:但是鑒于國內市場環境而言,掌握無異于是佳的選擇,低學習成本和動態解耦的特點使得更容易被人們所接受。
SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射,幾乎避免了所有的 JDBC 代碼和手動設置參數以及獲取結果集,使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄,在國內可謂是占據了半壁江山......
ORM對比圖以下針對Spring JDBC、 Spring Data Jpa、Mybatis三款框架做了個粗略的對比。一般應用的性能瓶頸并不是在于ORM,所以這三個框架技術選型應該考慮項目的場景、團隊的技能掌握情況、開發周期(開發效率)...
框架對比 | Spring JDBC | Spring Data Jpa | Mybatis |
---|---|---|---|
性能 | 性能最好 | 性能最差 | 居中 |
代碼量 | 多 | 少 | 多 |
學習成本 | 低 | 高 | 居中 |
推薦指數 | ??? | ????? | ????? |
個人觀點
拋開學習成本而言,對于業務簡單的中小型項目中使用Spring Data Jpa 開發無異于是最快速的。但是鑒于國內市場環境而言,掌握Mybatis無異于是佳的選擇,低學習成本和動態SQL解耦的特點使得更容易被人們所接受。對于業務復雜且對性能要求較高的項目來說Mybatis往往能更好的勝任,可以自己進行SQL優化,同時更讓我喜歡的是Mybatis分頁插件與通用Mapper(單表CURD無需自己手寫)有了這兩款插件的支持,還有什么理由拒絕Mybatis呢
導入依賴在 pom.xml 中添加 Mybatis 的依賴包mybatis-spring-boot-starter,該包擁有自動裝配的特點
連接數據庫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中添加數據源的配置,同時也需要添加對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目錄下創建mapper目錄然后存放xml mybatis.type-aliases-package=com.battcn.entity # 駝峰命名規范 如:數據庫字段是 order_id 那么 實體字段就要寫成 orderId mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.map-underscore-to-camel-case是一個非常好的配置項,合理的命名規范可以讓我們省略很多不必要的麻煩,比如xx-mapper.xml中的resultMap的映射可以省略掉了
注意事項
由于 mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml配置的在java package中,而Spring Boot默認只打入java package -> *.java,所以我們需要給pom.xml文件添加如下內容
具體編碼src/main/resources src/main/java **/*.xml true org.springframework.boot spring-boot-maven-plugin
完成基本配置后,接下來進行具體的編碼操作。
表結構創建一張 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="用戶表";實體類
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等等一系列注解,第二種就是傳統方式了,寫個接口映射,然后在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 { /** * 根據用戶名查詢用戶結果集 * * @param username 用戶名 * @return 查詢結果 */ @Select("SELECT * FROM t_user WHERE username = #{username}") ListfindByUsername(@Param("username") String username); /** * 保存用戶信息 * * @param user 用戶信息 * @return 成功 1 失敗 0 */ int insert(User user); }
UserMapper 映射文件
測試INSERT INTO `t_user`(`username`,`password`) VALUES (#{username},#{password})
完成數據訪問層接口后,最后編寫一個junit測試類來檢驗代碼的正確性。
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("[添加結果] - [{}]", row1); final int row2 = userMapper.insert(new User("u2", "p2")); log.info("[添加結果] - [{}]", row2); final int row3 = userMapper.insert(new User("u1", "p3")); log.info("[添加結果] - [{}]", row3); final List總結u1 = userMapper.findByUsername("u1"); log.info("[根據用戶名查詢] - [{}]", u1); } }
更多Mybatis的騷操作,請參考官方文檔
目前很多大佬都寫過關于 SpringBoot 的教程了,如有雷同,請多多包涵,本教程基于最新的 spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一起介紹...
說點什么個人QQ:1837307557
battcn開源群(適合新手):391619659
微信公眾號(歡迎調戲):battcn
個人博客:http://blog.battcn.com/
全文代碼:https://github.com/battcn/spring-boot2-learning/tree/master/chapter6
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71362.html
摘要:準備階段以上一篇文章的代碼為例子,即整合,上一篇文章是基于注解來實現的數據訪問層,這篇文章基于的來實現,并開啟聲明式事務。創建實體類數據訪問層接口層用戶減塊用戶加塊,聲明事務,并設計一個轉賬方法,用戶減塊,用戶加塊。 springboot開啟事務很簡單,只需要一個注解@Transactional 就可以了。因為在springboot中已經默認對jpa、jdbc、mybatis開啟了事事...
摘要:通用是為了解決使用中的基本操作,使用它可以很方便的進行開發,可以節省開發人員大量的時間。當該參數設置為時,時會查詢第一頁,超過總數時,會查詢最后一頁。 SpringBoot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工...
摘要:前言由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 前言 由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導航哦~想要獲取最新原創的技術文章歡迎關注我的公眾號:Java3y Java3y文章目錄導航 Java基礎 泛型就這么簡單 注解就這么簡單 Druid數據庫連接池...
摘要:有必要建一個資源服務器存放靜態資源。一些用戶級別的數據輕量可以考慮存儲在中。存儲的是值,可以通過來對和對象之間的轉換如果我們的數據是在后臺傳過去或者轉換而成的,在前臺上并沒有做什么改變的話。 移動商城項目總結 移動商城項目是我第二個做得比較大的項目,該項目系統來源于傳智Java168期,十天的視頻課程(想要視頻的同學關注我的公眾號就可以直接獲取了) 通過這次的項目又再次開闊了我的視野,...
摘要:我有個定時器,這個注解是讓它發現定時器讓它去發現你的層如果你在創建項目的時候,忘記勾選某一些依賴的話不要緊,可以在文件里添加依賴。 前言 我之前是學SpringMVC的,后面聽同學說SpringBoot挺好用,極力推薦我學這個鬼。一開始,在網上找SpringBoot的學習資料,他們博文寫得不是說不好,而是不太詳細。我就在想我要自己寫一篇盡可能詳細的文章出來。 技術棧 Spring S...
閱讀 1330·2021-11-25 09:43
閱讀 739·2021-11-18 10:02
閱讀 2862·2021-09-07 09:59
閱讀 2748·2021-08-30 09:44
閱讀 2921·2019-08-30 13:17
閱讀 2305·2019-08-29 12:17
閱讀 1673·2019-08-28 17:57
閱讀 1281·2019-08-26 14:04