Spring Cloud+Vue簡單模仿微博四:服務提供者整合Hibernate以及設計資料庫
阿新 • • 發佈:2018-12-17
一、建立資料庫
暫時先建立一個使用者表
/*
Navicat MySQL Data Transfer
Source Server : MyDB
Source Server Version : 50549
Source Host : localhost:3306
Source Database : microblog
Target Server Type : MYSQL
Target Server Version : 50549
File Encoding : 65001
Date: 2018-10-27 18:27:40
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `userinfo`
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`Email` varchar(20) CHARACTER SET utf8 NOT NULL,
`Password` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`Nickname` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '',
`Production` varchar(80) CHARACTER SET utf8 DEFAULT NULL,
`Level` int(11) NOT NULL,
`Createtime` datetime NOT NULL,
`Gender` bit(1) DEFAULT NULL,
`Birthday` datetime DEFAULT NULL,
`Islove` bit(1) DEFAULT NULL,
`Province` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
`City` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
`University` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
`Isdelete` bit(1) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', ' [email protected]', '123456', '風一般的少年', '無', '1', '2018-10-25 22:59:12', '', '1996-12-01 22:59:23', '1', '江蘇省', '常州市', '常州大學', '');
二、整合hibernate
1、新增依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency>
2、配置檔案application.yml
server: port: 2000 spring: application: name: provide-service datasource: url: jdbc:mysql://localhost:3306/microblog username: root password: 123456 driverClassName: com.mysql.jdbc.Driver tomcat: max-active: 20 max-idle: 8 min-idle: 8 initial-size: 10 jpa: database: MYSQL showSql: true hibernate: ddl-auto: update eureka: client: serviceUrl: defaultZone: http://localhost:1000/eureka/
3、啟動類添加註解
@SpringBootApplication
@EnableDiscoveryClient
@EnableJpaRepositories("eurekaclient.provider.dao")
@EntityScan("eurekaclient.provider.entity")
@EnableScheduling
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
分別是對dao、entity的scan
4、新增entity包與UserInfo實體類
package eurekaclient.provider.entity;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name="userinfo")
public class UserInfo implements Serializable {
private static final long serialVersionUID = -3946734305303957850L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="Email",nullable = false)
private String Email;
@Column(name = "Password")
private String Password;
@Column(name = "Nickname",nullable = false)
private String Nickname;
@Column(name = "Production")
private String Production;
@Column(name = "Level",nullable = false)
private Integer Level;
@Column(name = "Createtime",nullable = false)
private Date Createtime;
@Column(name = "Gender")
private Boolean Gender;
@Column(name = "Birthday")
private Date Birthday;
@Column(name = "Islove")
private Boolean Islove;
@Column(name="Province")
private String Province;
@Column(name = "City")
private String City;
@Column(name = "University")
private String University;
@Column(name = "Isdelete",nullable = false)
private Boolean Isdelete;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public String getNickname() {
return Nickname;
}
public void setNickname(String nickname) {
Nickname = nickname;
}
public String getProduction() {
return Production;
}
public void setProduction(String production) {
Production = production;
}
public Integer getLevel() {
return Level;
}
public void setLevel(Integer level) {
Level = level;
}
public Date getCreatetime() {
return Createtime;
}
public void setCreatetime(Date createtime) {
Createtime = createtime;
}
public Boolean getGender() {
return Gender;
}
public void setGender(Boolean gender) {
Gender = gender;
}
public Date getBirthday() {
return Birthday;
}
public void setBirthday(Date birthday) {
Birthday = birthday;
}
public Boolean getIslove() {
return Islove;
}
public void setIslove(Boolean islove) {
Islove = islove;
}
public String getProvince() {
return Province;
}
public void setProvince(String province) {
Province = province;
}
public String getCity() {
return City;
}
public void setCity(String city) {
City = city;
}
public String getUniversity() {
return University;
}
public void setUniversity(String university) {
University = university;
}
public Boolean getIsdelete() {
return Isdelete;
}
public void setIsdelete(Boolean isdelete) {
Isdelete = isdelete;
}
}
5、新增dao包與UserInfoDao介面
package eurekaclient.provider.dao;
import eurekaclient.provider.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface UserInfoDao extends JpaRepository<UserInfo,Long> {
@Query("select user from UserInfo user where user.Email=:Email")
UserInfo GetUserByEmail(@Param("Email") String Email);
}
6、新增service包與UserService介面
package eurekaclient.provider.service;
import eurekaclient.provider.entity.UserInfo;
public interface UserService {
UserInfo GetByEmail(String Email);
boolean CheckLogin(String Email,String Password);
void sendSimpleEmail(String to, String subject, String content);
}
7、在service包中新增serviceimpl以及UserServiceImpl介面實現類
package eurekaclient.provider.service.serviceimpl;
import eurekaclient.provider.dao.UserInfoDao;
import eurekaclient.provider.entity.UserInfo;
import eurekaclient.provider.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserInfoDao userInfoDao;
@Override
public UserInfo GetByEmail(String Email) {
return userInfoDao.GetUserByEmail(Email);
}
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
@Value("${mail.fromMail.addr}")
private String from;
@Override
public boolean CheckLogin(String Email, String Password) {
UserInfo userInfo=GetByEmail(Email);
if (userInfo.getPassword().equals(Password)){
return true;
}else{
return false;
}
}
@Override
public void sendSimpleEmail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();//建立簡單郵件訊息
message.setFrom(from);//設定傳送人
message.setTo(to);//設定收件人
message.setSubject(subject);//設定主題
message.setText(content);//設定內容
try {
mailSender.send(message);//執行傳送郵件
logger.info("簡單郵件已經發送。");
} catch (Exception e) {
logger.error("傳送簡單郵件時發生異常!", e);
}
}
}
如郵件方法不可用,可自行刪除,後續會完善!
8、新增controller以及UserController
package eurekaclient.provider.controller;
import eurekaclient.provider.entity.UserInfo;
import eurekaclient.provider.service.UserService;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/provider/user")
public class UserController {
@Resource
private UserService userService;
@GetMapping(value="/getUser",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public UserInfo GetAll(@RequestParam(value = "email") String email){
return userService.GetByEmail(email);
}
@GetMapping(value="/checkLogin",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public boolean CheckLogin(@RequestParam(value = "email") String email,@RequestParam(value = "pass") String pass){
return userService.CheckLogin(email,pass);
}
}
OK,至此,服務提供類已經繼承hibernate。
三、消費者編寫消費者服務
1、建立service包、serviceimpl子包,編寫UserService介面以及UserServiceImpl實現類
UserService程式碼如下
package eurekaclient.consumer.service;
import eurekaclient.consumer.service.serviceimpl.UserServiceImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(value="PROVIDE-SERVICE",fallback = UserServiceImpl.class)
public interface UserService {
@GetMapping(value = "/provider/user/getUser")
String getUserByEmail(@RequestParam("email") String email);
@GetMapping(value = "/provider/user/checkLogin")
String checkLogin(@RequestParam(value = "email") String email,@RequestParam(value = "pass") String pass);
}
UserSeriviceImpl程式碼如下
package eurekaclient.consumer.service.serviceimpl;
import eurekaclient.consumer.entity.ResultMsg;
import eurekaclient.consumer.service.UserService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class UserServiceImpl implements UserService {
@Override
public String getUserByEmail(String email) {
return new ResultMsg("error","","出錯了,請重試").toString();
}
@Override
public String checkLogin(String email, String pass) {
return new ResultMsg("error","","登入出錯,請重試").toString();
}
}
實現類中主要編寫熔斷降級的方法
2、建立請求結果資訊類
建立entity包並建立ResultMsg類
package eurekaclient.consumer.entity;
public class ResultMsg {
private String state;//狀態 ok,error
private String msg;//訊息
private String errorMsg;//錯誤資訊
public ResultMsg(String state, String msg, String errorMsg) {
this.state = state;
this.msg = msg;
this.errorMsg = errorMsg;
}
@Override
public String toString() {
return "{" +
"state:'" + state + '\'' +
", msg:'" + msg + '\'' +
", errorMsg:'" + errorMsg + '\'' +
'}';
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
3、建立控制器包與UserController類
package eurekaclient.consumer.controller;
import eurekaclient.consumer.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
@GetMapping(value="/getUser",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String GetAll(@RequestParam(value = "email") String email){
return userService.getUserByEmail(email);
}
@GetMapping(value="/checkLogin",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String CheckLogin(@RequestParam(value = "email") String email,@RequestParam(value = "pass") String pass){
return userService.checkLogin(email,pass);
}
}
OK,至此我們已經可以從閘道器處訪問我們的服務並讀取資料庫了。