SpringBoot在数据库整合方面支持很强大,可以用mybatis,也可以用hibernate,本文是使用Hibernate+JPA的方式访问,数据库选择MYSQL
数据库的安装其实不是重点,但是这边我想顺便给大家安利一下Docker在搭建开发环境的作用。大家都知道Docker主要用于软件的打包和自动化的部署,但是用得恰到好处,对于开发环境的搭建非常便利,安装Redis,Mysql,消息服务RabbitMq,等等。。一键搞定。下一步我们就开始吧。
1 .安装docker的运行环境,这个建议大家按照官网推荐的方式,在自己的操作系统上安装。其安装步骤看https://hub.docker.com/?overlay=onboarding 官方教程,非常简单。Mac安装成功后在顶部的导航栏会看到Docker的图标哦 。
2 . 安装Mysql并配置环境,我们只是要简单的使用Docker来进行开发,所以我们只要简单的会几个命令就可以了。比如:
{
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://md4nbj2f.mirror.aliyuncs.com"
]
}
3. 下一步就可以从docker来启动我们的mysql
docker run -p 3306:3306 --name mysql -v /Users/li/Documents/docker/mysql:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 -d centos/mysql-57-centos7
这里稍微解释一下各个参数:
至此,我们的mysql就算是配置完成了,我们可以在Docker的Dashboard中看到这个启动的服务,同时也可以在mac中使用navicat对mysql进行连接和操作。
SpringBoot把对JPA的使用进行了封装,简化了这个配置,基础的应用我们只要用它提供的默认选项就可以进行简单的连接了。
1、我们第一步要取消之前关闭的JPA自动配置,到DemoApplication中去掉 对DataSourceAutoConfiguration.class的exclude,同时开启JPA和事务管理。
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
//暂时关闭Security
@SpringBootApplication(exclude= {
SecurityAutoConfiguration.class
})
//启动JPA及其事务管理
@EnableJpaRepositories
@EnableTransactionManagement
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2、我们简单的设计一下测试数据表,并在MYSQL中创建数据库,我们可以用Navicat Premium连接Docker的Mysql,并创建一个table,假设是demo表
用户:User表,字段:id,username,nickname,headimg,age
文章:Article表,字段:id,title,content,thumb,author_id(关联到user)
3、创建实体类以及对应的Repositor
package com.example.demo.dao.entity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
//标记为实体类
@Entity
//使用lombok自动产出getter setter,注意安装lombok插件
@Data
//一般都要实现序列化接口
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
@Column(columnDefinition = "varchar(200) comment'用户名' ")
private String username;
@Column(columnDefinition = "varchar(200) comment'昵称' ")
private String nickname;
@Column(columnDefinition = "varchar(200) comment'头像' ")
private String headimg;
@Column(columnDefinition = "int(11) default 0 comment'年龄' ")
private Integer age;
// author代表在article中User的字段名
@OneToMany(mappedBy = "author")
//防止JSON无限循环调用
@JsonBackReference
private List articleList;
}
package com.example.demo.dao.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
//标记为实体类
@Entity
//使用lombok自动产出getter setter,注意安装lombok插件
@Data
//一般都要实现序列化接口
public class Article implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
@Column(columnDefinition = "varchar(200) comment'内容'")
private String content;
@Column(columnDefinition = "varchar(200) comment'标题'")
private String title;
@ManyToOne
//表示对应子表的关联外键
@JoinColumn(name = "author_id")
private User author;
}
在Repository下创建Repository
package com.example.demo.dao.repository;
import com.example.demo.dao.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository {
}
package com.example.demo.dao.repository;
import com.example.demo.dao.entity.Article;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ArticleRepository extends JpaRepository {
}
最后配置application.properties,开启JPA的配置和数据库配置
#引入数据库配置
database.name = demo
database.user = root
database.password = 123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/${database.name}?charset=utf8mb4&useSSL=false&characterEncoding=utf8
spring.datasource.username=${database.user}
spring.datasource.password=${database.password}
# JPA 相关配置
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
package com.example.demo;
import com.example.demo.dao.entity.Article;
import com.example.demo.dao.entity.User;
import com.example.demo.dao.repository.ArticleRepository;
import com.example.demo.dao.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
UserRepository userRepository;
@Autowired
ArticleRepository articleRepository;
@GetMapping("/user")
public String testUser(){
User user = new User();
user.setAge(1);
user.setHeadimg("头像地址");
user.setNickname("测试昵称");
user.setUsername("user-test-1");
user = userRepository.save(user);
return user.getNickname();
}
@GetMapping("/article")
public Article saveArticle(){
User user = userRepository.findById(1l).get();
Article article = new Article();
article.setAuthor(user);
article.setTitle("标题");
article.setContent("这是文章内容哦");
articleRepository.save(article);
return article;
}
}
运行浏览器依次访问 localhost:8080/test/user , localhost:8080/test/article
1、配置application.properties中DataSource,jpa,hibernate等
2、在启动类中开启@EnableJpaRepositories,@EnableTransactionManagement
3、创建相关的实体类及其Repsitory,SpringJpa提供的基础Repository拥有许多魔术方法,可以参考下面这个网站:
https://www.cnblogs.com/qq99514925/p/10668235.html
4、原来打算在这篇中加入SpringTest的整合,但是限于篇幅,暂时就算了,下回再开。