成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一起來學(xué)SpringBoot | 第七篇:整合Mybatis

includecmath / 1660人閱讀

摘要:但是鑒于國(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)


    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
連接數(shù)據(jù)庫

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}") List findByUsername(@Param("username") String username); /** * 保存用戶信息 * * @param user 用戶信息 * @return 成功 1 失敗 0 */ int insert(User user); }

UserMapper 映射文件




  
    INSERT INTO `t_user`(`username`,`password`) VALUES (#{username},#{password})
  

測(cè)試

完成數(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 u1 = userMapper.findByUsername("u1");
        log.info("[根據(jù)用戶名查詢] - [{}]", u1);
    }
}
總結(jié)

更多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

相關(guān)文章

  • SpringBoot非官方教程 | 七篇SpringBoot開啟聲明式事務(wù)

    摘要:準(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開啟了事事...

    tyheist 評(píng)論0 收藏0
  • 起來學(xué)SpringBoot | 第八篇:通用Mapper與分頁插件的集成

    摘要:通用是為了解決使用中的基本操作,使用它可以很方便的進(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 工...

    韓冰 評(píng)論0 收藏0
  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(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ù)庫連接池...

    KevinYan 評(píng)論0 收藏0
  • 移動(dòng)商城項(xiàng)目【總結(jié)】

    摘要:有必要建一個(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)目又再次開闊了我的視野,...

    BlackHole1 評(píng)論0 收藏0
  • 如何整合Spring + SpringBoot + MyBatis + MongoDB

    摘要:我有個(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...

    xiaokai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

includecmath

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<