1. 安裝mysql數(shù)據(jù)庫(kù)
? mac上可以通過(guò)brew命令安裝mysql
2. 安裝好數(shù)據(jù)庫(kù)后,讓項(xiàng)目與數(shù)據(jù)庫(kù)建立連接需要引入依賴(lài)
```
? ? ? ? <!-- 連接數(shù)據(jù)庫(kù)所需包-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? ? ? ? <version>5.1.6</version>
? ? ? ? </dependency>
```
3. 資源文件的創(chuàng)建未桥。資源配置文件都是放在resources文件夾下的栽渴。資源配置文件的后綴是.properties。命名方式的話一般都是在名稱(chēng)后面加上-dev囱持、-test夯接、-prod以表示在開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境以及線上環(huán)境的配置文件纷妆。舉例盔几,創(chuàng)建一個(gè)application.properties文件,在該文件內(nèi)掩幢,可以指定目前處于active狀態(tài)的配置文件是哪個(gè)逊拍。比如如下內(nèi)容則代表上鞠,生效的是開(kāi)發(fā)環(huán)境配置資源
```
spring.profiles.active=dev
```
然后在dev文件中配置連接數(shù)據(jù)庫(kù)的相關(guān)屬性,內(nèi)容如下:
```
# 數(shù)據(jù)庫(kù)連接
spring.datasource.url=jdbc:mysql://localhost:3306/chat?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=50
spring.datasource.tomcat.test-on-borrow=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
```
上述內(nèi)容表示的是芯丧,連接本地的chat數(shù)據(jù)庫(kù)芍阎。chat數(shù)據(jù)庫(kù)的用戶(hù)名以及密碼分別是root、root
4. 接下來(lái)就是項(xiàng)目數(shù)據(jù)如何和mysql之間進(jìn)行交互缨恒。在這里不會(huì)寫(xiě)原始的jdbc操作語(yǔ)句谴咸。而是選擇ORM框架mybatis
5. 項(xiàng)目要使用mybatis首先也要引入依賴(lài)
```
? ? ? ? <!-- mybatis所需包依賴(lài)-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.mybatis.spring.boot</groupId>
? ? ? ? ? ? <artifactId>mybatis-spring-boot-starter</artifactId>
? ? ? ? ? ? <version>1.1.1</version>
? ? ? ? </dependency>
```
6. 項(xiàng)目中要使用mybatis有兩種方式一種是xml文件,一種是注解骗露。在該項(xiàng)目中使用后者岭佳。
7. 首先需要建一張數(shù)據(jù)庫(kù)表,用于我們練習(xí)增刪改查操作萧锉。在這里我們舉例建一個(gè)用戶(hù)信息表驼唱,首先新建一個(gè)chat數(shù)據(jù)庫(kù)
```sql
CREATE DATABASE `chat`;
```
選中指定字符集,防止插入中文產(chǎn)生亂碼
```sql
set names utf8;
```
然后選中使用該數(shù)據(jù)庫(kù)
```sql
use chat
```
然后輸入下述語(yǔ)句創(chuàng)建一張用戶(hù)信息表
```sql
CREATE TABLE `user` (
? `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
? `userId` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '用戶(hù)id',
? `username` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)名',
? `password` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)密碼',
? `salt` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '鹽',
? `phone` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)手機(jī)號(hào)',
? `email` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)郵箱',
? `portraitUrl` varchar(256) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)頭像地址',
? `status` smallint(1) NOT NULL DEFAULT '0' COMMENT '用戶(hù)帳號(hào)狀態(tài)',
? `createTime` bigint(20) NOT NULL DEFAULT '0' COMMENT '創(chuàng)建時(shí)間',
? `updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
? `nickname` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用戶(hù)昵稱(chēng)',
? PRIMARY KEY (`id`),
? UNIQUE KEY `uniq_user_id` (`userId`),
? UNIQUE KEY `uniq_username` (`username`),
? UNIQUE KEY `uniq_phone` (`phone`),
? KEY `idx_user_id` (`userId`),
? KEY `idx_username` (`username`),
? KEY `idx_phone` (`phone`),
? KEY `idx_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用戶(hù)信息表';
```
8. 數(shù)據(jù)庫(kù)表建好之后需要在項(xiàng)目中建立與其映射的實(shí)體類(lèi)驹暑。在項(xiàng)目中新建mapper包玫恳,然后新建一個(gè)User實(shí)體類(lèi)。在生成實(shí)體類(lèi)時(shí)优俘,我們可以使用Lombok框架京办,省去多余的get set等方法的生成,使代碼看起來(lái)不會(huì)過(guò)于臃腫帆焕。
首先導(dǎo)入Lombok的maven依賴(lài)
```
? ? ? ? <!-- 實(shí)體類(lèi)自動(dòng)生成get set toString等方法的框架-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.projectlombok</groupId>
? ? ? ? ? ? <artifactId>lombok</artifactId>
? ? ? ? ? ? <version>1.16.18</version>
? ? ? ? ? ? <scope>provided</scope>
? ? ? ? </dependency>
```
然后在Idea中安裝Lombok插件惭婿,preference->Plugins->lombok Plugin 安裝完畢后重啟idea
。
最后建立User實(shí)體類(lèi)叶雹,記住一定要添加@Data注解财饥。
```
@Data
public class User {
? ? private Long id;
? ? private Long userId;
? ? private String username;
? ? private String password;
? ? private String salt;
? ? private String phone;
? ? private String email;
? ? private String portraitUrl;
? ? private Integer status;
? ? private String nickname;
? ? private Long createTime;
? ? private Long updateTime;
? ? public User() {
? ? ? ? id = null;
? ? ? ? userId = 0L;
? ? ? ? username = "";
? ? ? ? password = "";
? ? ? ? salt = "";
? ? ? ? phone = "";
? ? ? ? email = "";
? ? ? ? portraitUrl = "";
? ? ? ? status = 0;
? ? ? ? nickname = "";
? ? ? ? createTime = System.currentTimeMillis() / 1000;
? ? }
? ? public static class Status {
? ? ? ? public final static Integer UNUSE = 0;
? ? ? ? public final static Integer USED = 1;
? ? }
}
```
9. 新建mapper接口類(lèi),需要添加@Component注解和@Mapper注解折晦,前者是將該接口類(lèi)注冊(cè)進(jìn)spring中钥星,使其依賴(lài)注入,后者是該類(lèi)可以使用mybatis注解的標(biāo)志满着。
```
@Component
@Mapper
public interface UserMapper {
? ? /**
? ? * @Author:gaofeng
? ? * @Date:2019/1/11
? ? * @Description: 保存用戶(hù)
? ? **/
? ? @Insert("INSERT INTO user(userId, username, password, salt, phone, email, portraitUrl, status, createTime) values" +
? ? ? ? ? ? "(#{userId}, #{username}, #{password}, #{salt}, #{phone}, #{email}, #{portraitUrl}, #{status}, " +
? ? ? ? ? ? "#{createTime})")
? ? public Integer saveUser(User user);
? ? /**
? ? * @Author:gaofeng
? ? * @Date:2019/1/11
? ? * @Description: 根據(jù)手機(jī)號(hào)查找用戶(hù)
? ? **/
? ? @Select("SELECT * FROM user WHERE phone=#{phone}")
? ? public User selectUserByPhone(String phone);
? ? /**
? ? * @Author:gaofeng
? ? * @Date:2019/1/11
? ? * @Description: 根據(jù)用戶(hù)名或者手機(jī)號(hào)查找用戶(hù)
? ? **/
? ? @Select("SELECT * FROM user WHERE phone=#{0} OR username=#{1}")
? ? public User selectUserByPhoneOrUsername(String phone, String username);
}
```
10. 上面簡(jiǎn)單寫(xiě)了幾個(gè)操作數(shù)據(jù)庫(kù)的sql語(yǔ)句谦炒。到這里項(xiàng)目與mysql連接就基本完成了,接下來(lái)我們寫(xiě)個(gè)簡(jiǎn)單的接口測(cè)試一下风喇。在這里找出我們之前寫(xiě)的HelloWordController宁改,將UserMapper注入,然后在hello方法中完成新建一個(gè)簡(jiǎn)單實(shí)體類(lèi)魂莫,并save的操作
```
@RestController
@RequestMapping(value = "/helloworld")
public class HelloWordController {
? ? private UserMapper userMapper;
? ? @Autowired
? ? public HelloWordController(UserMapper userMapper) {
? ? ? ? this.userMapper = userMapper;
? ? }
? ? @RequestMapping(value = "/hello")
? ? public String hello() {
? ? ? ? User user = new User();
? ? ? ? user.setUsername("zhangsan");
? ? ? ? user.setPhone("17801020000");
? ? ? ? user.setPassword("123456");
? ? ? ? userMapper.saveUser(user);
? ? ? ? return "hello";
? ? }
}
```
11. 然后在瀏覽器中訪問(wèn)http://localhost:8080/helloworld/hello还蹲,然后去數(shù)據(jù)庫(kù)中查詢(xún)一下user表,你會(huì)發(fā)現(xiàn)多了一條記錄。查詢(xún)語(yǔ)句
```
select * from user\G
```