springboot快速整合Mybatis元件的方法(推薦)
Spring Boot簡介
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。
原有Spring優缺點分析
Spring的優點分析
Spring是Java企業版(Java Enterprise Edition,JEE,也稱J2EE)的輕量級代替品。無需開發重量級的Enterprise JavaBean(EJB),Spring為企業級Java開發提供了一種相對簡單的方法,通過依賴注入和麵向切面程式設計,用簡單的Java物件(Plain Old Java Object,POJO)實現了EJB的功能。
Spring的缺點分析
雖然Spring的元件程式碼是輕量級的,但它的配置卻是重量級的。一開始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基於註解的元件掃描,這消除了大量針對應用程式自身元件的顯式XML配置。Spring 3.0引入了基於Java的配置,這是一種型別安全的可重構配置方式,可以代替XML。
所有這些配置都代表了開發時的損耗。因為在思考Spring特性配置和解決業務問題之間需要進行思維切換,所以編寫配置擠佔了編寫應用程式邏輯的時間。和所有框架一樣,Spring實用,但與此同時它要求的回報也不少。
除此之外,專案的依賴管理也是一件耗時耗力的事情。在環境搭建時,需要分析要匯入哪些庫的座標,而且還需要分析匯入與之有依賴關係的其他庫的座標,一旦選錯了依賴的版本,隨之而來的不相容問題就會嚴重阻礙專案的開發進度。
MyBatis
@
簡介
優點
最大的優點是SQL語句靈活,適合調優情景,業務複雜情景
劣勢
最大的劣勢是不同資料庫之間的遷移
引入mybatis元件
pom.xml中加入
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
application.properties中加入
#dateSource spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root # mybatis # 下劃線轉駝峰開啟 mybatis.configuration.map-underscore-to-camel-case=true # mapper掃描位置 mybatis.mapper-locations=classpath:mapper/*.xml
需要說明的是,我引入的mysql驅動為 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些引數的說明;
- serverTimezone:該驅動需要指定某時區。
- useUnicode:開啟指定編碼。
- characterEncoding:指定讀取資料庫的編碼,因為專案採用UTF-8,存取資料庫資訊時保持一致。
- useSSL:是否建立SSL連線,我顯示選的否,因為這要為伺服器證書驗證提供信任庫,暫時沒條件。
程式碼實戰
本地的 mysql 版本為 5.7.20。
建表語句
CREATE TABLE USER_INFO ( user_id DECIMAL(10) PRIMARY KEY NOT NULL,user_name VARCHAR(20) DEFAULT "" NOT NULL ); CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id); ALTER TABLE USER_INFO COMMENT = '使用者基本資訊表';
插入資料
INSERT INTO test.user_info (user_id,user_name) VALUES (1,'特朗普'); INSERT INTO test.user_info (user_id,user_name) VALUES (2,'唐納德');
現在的專案路徑為
在SpringBoot的入口類中加 @MapperScan 註解,以掃描 DAO 類,不用在每個dao介面加個@Mapper 註解。
package com.example; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.example.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); } }
注:如果沒有分拆專案成微服務架構,或分散式架構,application主類中的@SpringBootApplication自動會掃描本包中的@Controller,@Service,@Resource等,是不需要浪費另一行@ComponentScan註解,配置路徑的。
UserController.java
package com.example.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.example.service.IUserService; @Controller @RequestMapping("user") public class UserController { @Autowired private IUserService userService; @RequestMapping("/queryUser") @ResponseBody void queryUser() { this.userService.queryUser(); } }
IUserService.java
package com.example.service; public interface IUserService { void queryUser(); }
UserServiceIml.java
package com.example.service; import com.example.dao.UserDao; import com.example.entity.UserEntity; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service("userService") public class UserServiceIml implements IUserService { @Resource private UserDao userDao; @Override public void queryUser() { List<UserEntity> userList = this.userDao.queryUser(); System.out.println("================"); System.out.println(userList); System.out.println("================"); } }
注:如果是SSM架構過來的,這個@Resource註解可能比較陌生,因為我估計會和我之前一樣用@Autowired,但是我是沒有在dao層用 @Repository 註解的,之前用了在主類用了@MapperScan自動去掃描所有的dao,所以不能再用之前的@Autowired。
UserDao.java
package com.example.dao; import com.example.entity.UserEntity; import java.util.List; public interface UserDao { List<UserEntity> queryUser(); }
UserEntity.java
package com.example.entity; public class UserEntity { private long userId; private String userName; public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserEntity{" + "userId=" + userId + ",userName='" + userName + '\'' + '}'; } }
如果你執行不成功,請對比引入的包的版本,和資料庫配置是否是根據你本地的,順便看看註解是否和文中一樣。
效果圖如下;
注:如果是跟著本教程來的,因為一開始就引入了spring security,而新增的路徑不在剛才的許可權中,所以我給zs使用者改成了user下的皆可訪問。如果沒有跟著之前配置spring security,無需理會如下內容
//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA") http.authorizeRequests().antMatchers("/user/**").hasRole("AAA")
總結
以上所述是小編給大家介紹的springboot快速整合Mybatis元件的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!