Springboot(一)
什么是SpringBoot
SpringBoot是Spring項目中的一個子工程迅办,與Spring-famework同屬于Spring的產(chǎn)品
用一些固定的方式來構建生產(chǎn)級別的Spring應用喝滞。SpringBoot推崇約定大于配置的方式以便于能夠盡可能快速的啟動并運行程序
我們把Spring Boot稱為搭建程序的腳手架帐偎,最主要作用就是幫我們快速的構建龐大的項目缚态,并且盡可能的減少一切xml配置,做到開箱即用媳板。
為什么要用SpringBoot
我們Java一直被人詬病臃腫、麻煩痘绎。往往我們需要開發(fā)一個Java項目時津函,總是需要大量的工作來進行配置和構建。主要原因是:
- 復雜的配置
- 混亂的依賴管理
SpringBoot的特點
我們可以使用SpringBoot創(chuàng)建Java應用孤页,并使用java -jar啟動尔苦,就能得到一個生產(chǎn)級別的web工程
- 為所有Spring的開發(fā)者提供一個非常快速的散庶、廣泛接受的入門體驗
- 開箱即用(啟動器starter-其實就是SpringBoot提供的一個jar包,并通過自己設置.properties參數(shù)來達到配置的目的)
- 提供一些大型項目中常見的非功能性特性
- 無需xml配置凌净,絕對沒有代碼生成
快速入門
快速創(chuàng)建SpringBoot項目
- 啟動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootFastcreateApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootFastcreateApplication.class, args);
}
}
啟動類分析
- @SpringBootApplication:證明這工程是一個springboot的應用
- main方法:SpringApplication.run
構造一個springApplication悲龟,執(zhí)行SpringApplication的run方法
手動創(chuàng)建SpringBoot項目
-
創(chuàng)建一個Maven工程 作為父工程
- 引入spring父工程依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
- 添加一個起步依賴(引入start-web、java的版本1.8)
為了讓SpringBoot幫我們完成各種自動配置冰寻,我們必須引入SpringBoot提供的自動配置依賴须教。也就是啟動器。因為我們是web項目斩芭,所以我們在這里引入web啟動器
<!--2轻腺、JAVA的版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--3、起步依賴-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 注意這里我們不需要指定版本的信息划乖,因為SpringBoot的父工程已經(jīng)對版本進行管理了
- 創(chuàng)建一個啟動類
package com.probuing.self;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author wangxin
* @date 2020/1/11 17:24
* @description: TODO
* GOOD LUCK贬养!
*/
@SpringBootApplication
public class ApplicationRun {
public static void main(String[] args) {
SpringApplication.run(ApplicationRun.class, args);
}
}
4.1 創(chuàng)建一個Controller
package com.probuing.self.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author wangxin
* @date 2020/1/11 17:26
* @description: TODO
* GOOD LUCK!
*/
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String helloController() {
return "hello,SpringBoot";
}
}
@RestController 包含@Controller 還有@ResponseBody
返回的就是json數(shù)據(jù)
-
啟動測試
- 啟動測試后我們可以看到監(jiān)聽的端口(紅框內(nèi))
- 訪問Controller
http://localhost:8080/hello
Springboot配置文件
4.1 配置文件介紹
properties:鍵值對配置
yml:可以跨應用
yaml:和yml一樣
yml和yaml比properties強大的是可以在配置文件中定義一個數(shù)組或集合
server:
port:8082
- 前綴需要兩個或多個空格琴庵,不能使用制表符
- 不同等級用:隔開
- 冒號之后如果有值误算,那么冒號和值之間至少有一個空格,不能緊貼著
配置文件優(yōu)先級
- properties->yml->yaml
- 優(yōu)先級:properties大于yml yum大于yaml
使用配置文件
- yml文件內(nèi)容 applicaiton.yml
server:
port:8090
# 常量
name: 和平精英
# 對象
game:
name: wow
age: 10
# 數(shù)組
games:
- wow
- cod
- ps4
使用@Value讀取配置文件
- HelloController.java
package com.probuing.sb_config.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @author wangxin
* @date 2020/1/11 17:48
* @description: TODO
* GOOD LUCK迷殿!
*/
@RestController
public class ConfigController {
@Value("$(name)")
private String name;
//定義對象屬性
@Value("$(game.name)")
private String gameName;
//數(shù)組屬性
@Value("$(games[2])")
private String getArrEl;
@RequestMapping(value = "/config")
public Map configMap() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("game_name", gameName);
map.put("getArrEl", getArrEl);
return map;
}
}
- 啟動類
/**
* @author wangxin
* @date 2020/1/11 17:58
* @description: TODO
* GOOD LUCK儿礼!
*/
@SpringBootApplication
public class ApplicationRun {
public static void main(String[] args) {
SpringApplication.run(ApplicationRun.class, args);
}
}
Application啟動類要放在最外側,要在所有的子包外面
Spring-boot 會自動加載啟動類所在包下及其子包下的所有組件
- 輸出
game_name "wow"
name "和平精英"
getArrEl "ps4"
Environment獲取配置文件信息
- 注入Environment
@Autowired
private Environment env;
- 通過Environment.getProperty獲取配置文件信息
@RequestMapping(value = "/config", method = RequestMethod.GET)
public Map configMap() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("game_name", gameName);
map.put("getArrEl", getArrEl);
return map;
}
@ConfigurationProperties注解
- Springboot官方使用的配置server:port
- 創(chuàng)建配置類
Game.java
package com.probuing.sb_config.configbean;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author wangxin
* @date 2020/1/11 18:45
* @description: TODO
* GOOD LUCK庆寺!
* Game配置類
*/
@Configuration
@ConfigurationProperties(prefix = "game")
@Data
public class GameConfig {
private String name;
private String age;
}
- 使用配置類
//配置類注入
@Autowired
private GameConfig gameConfig;
@RequestMapping(value = "/configConfig")
public String configureConfig() {
String config = gameConfig.getName() + gameConfig.getAge();
return config;
}
注解解釋
SpringBoot 自動配置的原理
我們了解了SpringBoot能夠使得無比繁雜的工程變的簡單蚊夫,并且讓很多繁雜的配置都消失了,我們來探究一下Spring是如何做到的
我們先從SpringBoot的啟動類開始:
Spring的啟動類中包括@SpringBootApplication 注解懦尝,和SpringApplication.run方法
我們跟進@SpringBootApplication注解中
我們看到這里重點的注解有三個:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
我們繼續(xù)看@SpringBootConfiguration
源碼
在這個源碼中 我們看到了@Configuration注解知纷,這個注解的作用就是聲明當前類是一個配置類,然后Spring會自動掃描到添加了@Configuration的類陵霉,會讀取其中的配置信息屈扎。@SpringBootConfiguration是來聲明當前類是
SpringBoot應用的配置類,項目中只能有一個撩匕。 @EnableAutoConfiguration這個注解的作用是告訴SpringBoot基于所添加的依賴鹰晨,去了解如何配置Spring。就是這個注解幫我們完成了默認的配置,所以模蜡,我們使用SpringBoot構建一個項目漠趁,只需要引入所需框架的依賴,默認配置就可以交給SpringBoot處理了 比如我們添加了
spring-boot-start-web`忍疾,而這個啟動器中幫我們添加了tomcat闯传、SpringMVC的依賴,此時Spring自動配置就知道需要開發(fā)一個web應用卤妒,然后就完成了SpringMVC的配置了SpringBoot內(nèi)部對大量的第三方庫或Spring內(nèi)部庫進行了默認配置甥绿,這些配置是否生效,取決于我們是否引入了對應庫所需的依賴则披,如果有所需的對應的依賴那么默認配置就會生效共缕。
所以,我們使用SpringBoot構建一個項目士复,只需要引入所需框架的依賴图谷,配置就可以交給SpringBoot處理了,如果不希望使用默認配置阱洪,則可以通過自定義配置進行配置
@ComponentScan 這個是配置組件掃描的指令便贵,提供了類似與<context:component-scan>標簽的作用
這里看到通過basePackageClasses屬性來指定要掃描的包,而我們的@SpringBootApplication注解聲明的類就是main函數(shù)所在的啟動類冗荸,因此掃描的包是該類所在包及其子包承璃,因此,
一般啟動類會放在一個比較前的包目錄中
SpringBoot默認配置原理
在SpringApplication類構建的時候蚌本,我們可以看到這樣一段初始化代碼
進入setInitializers中
這里可以看到 通過SpringFactoriesLoader.loadFactoryNames(type, classLoader)加載一些FactoryName,然后利用createSpringFactoiesInstance將這些加載到的類名進行實例化
然后繼續(xù)跟進loadFactoryNames方法:
可以看到利用類加載器加載某個文件:
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
我們可以發(fā)現(xiàn)SpringBoot會在初始化的時候绸硕,加載所有classpath:META-INF/spring.factories文件,包括jar包當中魂毁。我們看到在Spring的一個依賴包:spring-boot-autoconfigure中玻佩,就可以看到這樣的文件spring.factories
以后我們引入的任何第三方容器,只要實現(xiàn)自動配置席楚,都會有類似的文件
自動配置總結
SprongBoot為我們提供了默認配置咬崔,而默認配置生效的步驟:
- @EnableAutoConfiguration注解會去尋找META-INF/spring.factories文件,讀取其中以EnableAutoConfiguration為key的所有類的名稱烦秩,這些類就是提前寫好的自動配置類
- 這些配置類都聲明了@Configuration注解垮斯,并且通過@Bean注解提前配置了我們所需要的一切實例。完成自動配置
- 會有@Conditionalon注解只祠,來決定配置是否會生效兜蠕,如果我們自己配置了相關Bean,那么就會覆蓋默認的自動配置的Bean
- 我們還可以通過配置application.properties文件抛寝,來覆蓋自動配置中的屬性
- 啟動器:
我們?nèi)绻幌肱渲茫恍枰胍蕾嚰纯晒瘐铮蕾嚨陌姹疚覀円矡o需關心,只要引入了SpringBoot提供的starter川陆,就會自動管理依賴及版本了 - 全局配置:
SpringBoot的默認配置,都會讀取默認屬性鳞绕,這些屬性可以通過自定義application.properties文件來進行覆蓋。這樣雖然使用的還是默認配置尸曼,但是配置中的值以及改成了我們自定義的
當我們需要自定義屬性時们何,就需要覆蓋application.properties指定key來覆蓋
SpringBoot實戰(zhàn)
整合Mybatis
引入依賴
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBoot</artifactId>
<groupId>com.probuing</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot_mybatis</artifactId>
<dependencies>
<!--起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--jdbc應用于事務管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql數(shù)據(jù)庫驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
- 啟動類 SpringBootMybatisRunner.java
/**
* @author wangxin
* @date 2020/1/11 20:27
* @description: TODO
* GOOD LUCK楷扬!
*/
@SpringBootApplication
public class SpringBootMybatisRunner {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisRunner.class, args);
}
}
- 數(shù)據(jù)庫表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL COMMENT '用戶名',
`password` varchar(100) DEFAULT NULL COMMENT '密碼',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
`age` int(10) DEFAULT NULL COMMENT '年齡',
`sex` tinyint(1) DEFAULT NULL COMMENT '性別烘苹,1男性,2女性',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`note` varchar(255) DEFAULT NULL COMMENT '備注',
`created` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
`updated` datetime DEFAULT NULL COMMENT '更新時間',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES ('1', 'zhangsan1', '1234567', '張三', '25', '1', '1964-08-08', '張三同學在學Java', '2014-09-19 16:56:04', '2014-09-21 11:24:59');
INSERT INTO `tb_user` VALUES ('2', 'lisi11', '123456777', '李四', '21', '1', '1995-01-01', '李四同學在傳智學Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04');
INSERT INTO `tb_user` VALUES ('3', 'wangwu', '123456', '王五', '22', '1', '1994-01-01', '王五同學在學php', '2014-09-19 16:56:04', '2014-09-19 16:56:04');
INSERT INTO `tb_user` VALUES ('4', 'zhangwei', '123456', '張偉', '20', '1', '1996-09-01', '張偉同學在傳智播客學Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04');
INSERT INTO `tb_user` VALUES ('5', 'lina', '123456', '李娜', '28', '0', '1988-01-01', '李娜同學在傳智播客學Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04');
INSERT INTO `tb_user` VALUES ('6', 'lilei', '123456', '李磊', '23', '1', '1993-08-08', '李磊同學在傳智播客學Java', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('7', 'hanmeimei', '123456', '韓梅梅', '24', '0', '1992-08-08', '韓梅梅同學在傳智播客學php', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('8', 'liuyan', '123456', '柳巖', '21', '0', '1995-08-08', '柳巖同學在傳智播客學表演', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('9', 'liuyifei', '123456', '劉亦菲', '18', '0', '1998-08-08', '劉亦菲同學在傳智播客學唱歌', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('10', 'fanbingbing', '123456', '范冰冰', '25', '0', '1991-08-08', '范冰冰同學在傳智播客學表演', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('11', 'zhengshuang', '123456', '鄭爽', '23', '0', '1993-08-08', '鄭爽同學在傳智播客學習如何裝純', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
INSERT INTO `tb_user` VALUES ('12', 'tangyan', '123456', '唐嫣', '26', '0', '1990-08-08', '鄭爽同學在傳智播客學習如何耍酷', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
- 實體類 User.java
@Data
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
- dao層
public interface IUserDao {
//根據(jù)id進行查詢
User findById(Long id);
}
-
映射文件 mapper.xml
這里mapper的路徑為自定義路徑
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.probuing.sb.dao.IUserDao">
<resultMap id="baseResultMap" type="User">
<id column="id" property="id"></id>
<result column="user_name" property="userName"></result>
<result column="password" property="password"></result>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
<result column="sex" property="sex"></result>
<result column="birthday" property="birthday"></result>
<result column="note" property="note"></result>
<result column="created" property="created"></result>
<result column="updated" property="updated"></result>
</resultMap>
<select id="findById" parameterType="long" resultMap="baseResultMap">
SELECT * FROM tb_user WHERE id = #{id}
</select>
</mapper>
- 配置文件application.yml
# 服務器地址
server:
port: 8099
#數(shù)據(jù)庫連接:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: xml123xml
#mybatis掃描:
mybatis:
mapper-locations: classpath:mappers/*.xml
type-aliases-package: com.probuing.sb.domain
- service層
IUserService.java
public interface UserService {
User findById(Long id);
}
實現(xiàn)類
IUserServiceImpl.java
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Override
public User findById(Long id) {
return userDao.findById(id);
}
}
- Controller
@RestController
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping(value = "/toUpdate/{id}")
public User toUpdate(@PathVariable Long id) {//@PathVariable 表示取路徑上的變量
return userService.findById(id);
}
}
- 啟動類 啟動時需要掃描dao
@SpringBootApplication
@MapperScan("cn.itcast.dao") //掃描dao
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
注意
- 映射文件的路徑和接口IUserDao的路徑不一致惰说,在配置文件application.yml中吆视,配置了mybatis的掃描
- 在啟動類中添加MapperScan掃描dao
整合通用Mapper
我們在開發(fā)中發(fā)現(xiàn),dao層的技術您觉,都是通用的琳水,所以我們可以引入通用Mapper來實現(xiàn)減少映射文件mapper的編寫
- maven坐標 添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
- 配置文件
application.yml
server:
port: 8091
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: xml123xml
- 實體類
User.java
package com.probuing.sb_mapper.domain;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Table(name = "tb_user")
public class User {
@Id
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
注意
實體類中:
- 要有表對應 使用@Table(name=表明)指定實體類對應的表名
- 實體類中要有主鍵對應擎宝,使用@Id定義在屬性上表明定義的屬性映射主鍵
- dao層
創(chuàng)建一個空的Dao接口 繼承Mapper
注意:這里導入的包是 tk.mybatis.mapper.common.Mapper
IUserDao.java
public interface IUSerDao extends Mapper<User> {
}
- service層
IUserService.java
public interface IUserService {
User findById(Long id);
}
實現(xiàn)類
UserServiceImpl.java
@Service
public class UserServiceImpl implements IUserService {
//注入IUserDao
@Autowired
private IUSerDao iuSerDao;
public User findById(Long id) {
return iuSerDao.selectByPrimaryKey(id);
}
}
注意
這里Service的實現(xiàn)類中的dao已經(jīng)繼承了各種dao方法 包括select update insert delete 和條件的example
- Controller層
UserController.java
@RestController
public class UserController {
@Autowired
private IUserService userService;
// @RequestMapping(value = "/findUser/{id}")
@GetMapping(value = "/findUser/{id}")
public User findUser(@PathVariable("id") Long id) {
return userService.findById(id);
}
}
注意
這里的Controller的RequestMapping中,寫法:
@RequestMapping(value="/findUser/{id}",method=RequestMethod.GET)等價于
@GetMapping("/findUser/{id}")
- 啟動類(需要掃描dao)
ApplicationMapperRunner.java
注意
這里的MapperScan引入的包一定是tk包下的
@SpringBootApplication
@MapperScan("com.probuing.dao")
public class ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(ApplicationRunner.class, args);
}
}
- 測試
通過Mapper自定義接口實現(xiàn)查詢
IUserDao.java
public interface IUSerDao extends Mapper<User> {
@Select("SELECT * FROM tb_user where user_name = #{userName}")
User selectByUserName(String userName);
}
- 通過Example條件查詢
@Test
public void findUserNameExample() {
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userName", "lina");
List<User> list = userDao.selectByExample(example);
for (User user : list) {
System.out.println(user.toString());
}
}
SpringBoot整合mybatisPlus
Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變极阅,為簡化開發(fā)涨享、提高效率而生
引入依賴
- pom坐標
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast</groupId>
<artifactId>springboot_plus</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--管理事務厕隧,@Transtional-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
- 配置文件
application.yml
server:
port: 8092
#數(shù)據(jù)庫連接:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: xml123xml
- 實體類
User.java
package com.probuing.mp.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author wangxin
* @date 2020/1/12 00:19
* @description: TODO
* GOOD LUCK髓迎!
*/
@Data
@TableName(value = "tb_user")
public class User {
@TableId(type = IdType.AUTO)//表示自增 UUID表示UUID
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
注意
實體類中必須定義表名(TableName)建丧,定義主鍵(TableId)
- dao層
IUserDao.java
public interface IUserDao extends BaseMapper<User> {
}
注意
mybatisPlus提供的是BaseMapper
- service層
IUserService.java
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
public User findById(Long id) {
return userDao.selectById(id);
}
}
注意
MybatisPlus 提供的是selectById
- Controller
UserController.java
@RestController
public class UserController {
@Autowired
private IUserService userService;
@GetMapping(value = "/findById/{id}")
public User findById(@PathVariable("id") Long id) {
return userService.findById(id);
}
}
- 啟動類掃描
ApplicaitonMPRunner.java
@SpringBootApplication
@MapperScan("com.probuing.mp.dao")
public class ApplicationMPRunner {
public static void main(String[] args) {
SpringApplication.run(ApplicationMPRunner.class, args);
}
}