目錄
一步到位springboot目錄
gitee:https://gitee.com/chaitou/leilema.git
前言
上篇我們已經敲定ORM
框架使用Mybatis-plus
了,這篇我們就正式來擼。
在開擼之前再強調一遍:
- 本專題的代碼都使用
lombok
,因此拉下代碼後,要運行前請務必裝上lombok
插件,否則報錯。不知道怎麼裝的再回顧下springboot02:準備 - 最好自己學習使用docker搭建一個
mysql
,並通過項目中/sql
目錄下的語句或springboot02:準備中的sql語句準備好數據庫環境(當讓也可以使用項目上的數據庫,但是請在使用後清空生成的數據,防止影響他人的是使用)
如何集成框架
有一些初學者認爲集成框架是架構師做的事情,是很牛逼很難的事情。這裏我糾正一下這種同學的觀點,集成框架是非常簡單的事情。架構師的價值體現在對項目的把握,提出一套易於開發,易於擴展,在性能成本方面又最具性價比的解決方案。所以在這裏給小白吃個定心丸,別方,無論什麼集成什麼框架頂多就3步
- 引入框架依賴,以前一如
jar
包,現在使用maven
或gredle
就更簡單了 - 寫入配置,按照官方文檔,將需要的配置寫到項目中
- 使用
是的,就這麼簡單,接下去就手把手帶大家集成一下Mybatis-plus
集成Mybatis-plus
一、引入依賴
- 首先我們需要使用
mysql
數據庫,所以我們需要引入mysql
的驅動器依賴。
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 其次要用
Mybatis-plus
,就需要引入其starter
依賴
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
這樣寫ok嗎?low low low
身爲一名優秀的架構師,我們是看不得這種3.3.0
的,要把他寫成配置,不然逼格根本上不去。以後看到寫3.3.0
這種數字的一定要跟他說low
<properties>
<java.version>1.8</java.version>
<mybatis-plus.version>3.3.0</mybatis-plus.version>
</properties>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
- 最後再強調一遍
lombok
的依賴,因爲entity
實體層必然需要用到getter
跟setter
(怕你們項目起不來,我可真是太卑微了,最後一次強調lombok
…)
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
二、配置
- 配置數據源,你得告訴spring,你這數據庫的地址賬號密碼,用的驅動是什麼,不然人家怎麼連的上去是吧
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://148.70.139.121:3306/leilema?useSSL=false&serverTimezone=GMT%2B8
username: root
password: leilema
- 現在
xml
的配置都被去掉了,都改用註解的形式,Mybatis-plus
當然也不例外了,我們新建一個MybatisPlusConfiguration
配置類,等同於老springxml
中寫的
@EnableTransactionManagement
@MapperScan("com.bugpool.leilema.*.mapper")
@Configuration
public class MybatisPlusConfiguration {
/**
* 分頁插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
解釋一下這幾個註解
@Configuration
:表明這是一個配置文件,spring應該把他當成跟xml配置文件一樣進行讀取,然後放入Ioc容器中@EnableTransactionManagement
:開啓事務用的,既然要與數據庫打交到,事務是不可或缺的,雖然本篇還用不着,但是先寫着吧@MapperScan("com.bugpool.leilema.*.mapper")
:指定掃描mapper
的目錄,mapper
就是常說的dao
層。Mybatis-plus
啓動時會去自動掃描這些目錄下的文件,並當成Mapper
注入到Spring Ioc容器中,如果路徑錯誤,必然引起service
層的注入錯誤- @Bean:標識方法將返回一個Bean實例,這裏返回的是分頁攔截器,用於分頁查詢
三、使用
ProductInfo
商品是單表操作,因此以它爲例,我們需要建立一下層級目錄,entity
實體層、mapper
數據訪問層、service
業務、service
服務層、controller
控制層
實體層:
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 商品主鍵
*/
@TableId(value = "product_id", type = IdType.AUTO)
private Integer productId;
/**
* 商品名稱
*/
private String productName;
/**
* 單價
*/
private BigDecimal productPrice;
/**
* 描述
*/
private String productDescription;
/**
* 商品狀態,0正常1下架
*/
private Integer productStatus;
/**
* 創建時間
*/
private LocalDateTime createTime;
/**
* 創建人
*/
private String createUser;
/**
* 修改時間
*/
private LocalDateTime updateTime;
/**
* 修改人
*/
private String updateUser;
}
數據訪問層:
public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
}
還需要添加mapper的xml文件
<?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.bugpool.leilema.product.mapper.ProductInfoMapper">
</mapper>
服務層:
public interface ProductInfoService extends IService<ProductInfo> {
}
@Service
public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {
}
控制層:
@RestController
@RequestMapping("/product/product-info")
public class ProductInfoController {
}
目錄層級如下
四、校驗是否集成成功
怎麼校驗呢?查一下數據庫不就知道了,在數據庫中插入一條數據,如果能查詢出來遍說明集成成功了。這裏我們先接觸一下單元測試
,不懂不要緊,只管先抄,後面專題講解
- 確保已經引入了spring的單元測試依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 在
/test
目錄下編寫單元測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductInfoMapperTest {
@Autowired
ProductInfoMapper productInfoMapper;
@Test
public void testGetById() {
ProductInfo productInfo = productInfoMapper.selectById(1);
System.out.println(productInfo);
Assert.assertNotNull(productInfo);
}
}
點擊運行,看看能不能把數據查出來,如果你看到下圖,說明已經集成成功了
去除Mapper的警告
@Autowired
ProductInfoMapper productInfoMapper;
這句代碼相信讀者都看到了productInfoMapper
飄紅了,這是爲什麼呢?
主要是因爲IDEA太智能了,當我們@Autowire
自動注入某個類的時候,他就會自動去項目下尋找是否有@Componte
、@Service
或者相關Bean註解的標識,如果沒有,他就認爲你注入的Bean不存在,提示你
回看我們的Mapper
文件,確實是沒有加相關依賴,因爲我們使用了@MapperScan("com.bugpool.leilema.*.mapper")
進行mapper
掃描,然後當如到Ioc容器中,但是IDEA看不懂啊,所以他就飄紅了。因此就算飄紅,其實我們的代碼是沒有問題的,也是可以正常運行。但是看着總是心煩(如果像我這種快捷鍵小王子,F2快速跳轉錯誤的操作一定會被逼死),因此我們就關閉IDEA讓他別檢測這個類型的錯誤了
去除這個檢測只會在本項目生效,其他項目不會生效,因此不用擔心影響其他項目。實在處女座的同學,就是擔心IDEA配置亂掉,可以到該目錄進行查看IDEA檢測配置