源码及截图下载:https://download.csdn.net/download/qq_31122833/10831823
欢迎指正,微信:cc806522806
1、打开spring-cloud-utils项目下的pom.xml,加入如下依赖:
<!-- 数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默认的版本为3.8.1,修改为4.x,因为3.x使用的为编程的方式,4.x为注解的形式。 -->
<version>4.12</version>
</dependency>
2、在spring-cloud-utils项目下新加code包、code包下新加autoCode.java类:其中autoCode.java是为我们自动生成代码的工具,由mybatis-plus提供:
/**
* <p>
* 测试生成代码
* </p>
*
* @author 鲁达
* @date 2018/12/06
*/
public class autoCode {
@Test
public void generateCode() {
String packageName = "com.luda.springcloud";
boolean serviceNameStartWithI = false;//user -> UserService, 设置成true: user -> IUserService
generateByTables(serviceNameStartWithI, packageName, "sc_user");
}
private void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) {
GlobalConfig config = new GlobalConfig();
String dbUrl = "jdbc:mysql://localhost:3306/myspringcloud";
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl(dbUrl)
.setUsername("root")
.setPassword("root")
.setDriverName("com.mysql.jdbc.Driver");
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
.setEntityLombokModel(false)
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel)
.setInclude(tableNames);//修改替换成你需要的表名,多个表名传数组
config.setActiveRecord(false)
.setAuthor("鲁达")
.setOutputDir("d:\\autoCode")
.setFileOverride(true)
.setMapperName("%sMapper")
.setXmlName("%sMapper");
if (!serviceNameStartWithI) {
config.setServiceName("%sService");
}
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(
new PackageConfig()
.setParent(packageName)
.setController("controller")
.setEntity("entity")
).execute();
}
private void generateByTables(String packageName, String... tableNames) {
generateByTables(true, packageName, tableNames);
}
}
3、我们打开navicat,新建数据库myspringcloud:
4、在myspringcloud数据库下,添加sc_user表 :
5、接下来,我们运行autoCode.java :
此方法会给我们打开本地文件夹,里面是它自动为我们生成的entity、service、mapper、xml、controller
6、我们将entity放入spring-cloud-entity项目中、其余的放在spring-cloud-user项目下:
放好后,我们的代码是会报错的;别急,我们添加相应的依赖就好了!
1、在spring-cloud-user项目下的pom.xml中添加如下依赖:
<dependency>
<groupId>com.luda.springcloud</groupId>
<artifactId>spring-cloud-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.luda.springcloud</groupId>
<artifactId>spring-cloud-utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
7、这些工作做完之后,我们要开始加数据库的配置了,打开spring-cloud-user项目下的application.properties,加入以下配置:
spring.datasource.connection-timeout=2000
# max-active: 50
spring.datasource.max-active=500
# initial-size: 10
spring.datasource.initial-size= 50
# min-idle: 5
spring.datasource.min-idle=0
# max-idle: 40
spring.datasource.max-idle=0
# max-wait: 500
spring.datasource.max-wait=0
spring.datasource.time-between-eviction-runs-millis=3600000
spring.datasource.min-evictable-idle-time-millis=3600000
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=false
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.removeAbandoned=true
spring.datasource.removeAbandonedTimeout=20
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#jdbc
mybatis.mapper-locations=classpath*:mybatis/*.xml
# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
mybatis-plus.mapper-locations=classpath:/mybatis/*.xml
#实体扫描,多个package用逗号或者分号分隔
mybatis-plus.typeAliasesPackage=entity
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
mybatis-plus.global-config.id-type=3
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
mybatis-plus.global-config.field-strategy=2
#驼峰下划线转换
mybatis-plus.global-config.db-column-underline=true
#刷新mapper 调试神器
#mybatis-plus.global-config.refresh-mapper=true
#数据库大写下划线转换
#mybatis-plus.global-config.capital-mode=true
#Sequence序列接口实现类配置
mybatis-plus.global-config.key-generator=com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
#逻辑删除配置(下面3个配置)
mybatis-plus.global-config.logic-delete-value=1
mybatis-plus.global-config.logic-not-delete-value=0
#mybatis-plus.global-config.sql-injector=com.baomidou.mybatisplus.mapper.LogicSqlInjector
#自定义填充策略接口实现
#mybatis-plus.global-config.meta-object-handler=com.baomidou.springboot.MyMetaObjectHandler
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
#配置JdbcTypeForNull, oracle数据库必须配置
#mybatis-plus.global-config.configuration.jdbc-type-for-null='null'
#二级缓存
mybatis-plus.global-config.configuration.map-underscore-to-camel-case= true
mybatis-plus.global-config.configuration.cache-enabled=true
#数据库连接配置
spring.datasource.url=jdbc:mysql://localhost/myspringcloud?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
8、我们的项目变成了这个鬼样子:
9、接下来,我们打开spring-cloud-entity项目,添加Result.java,接收数据返回业务状态等信息
package com.luda.springcloud.result;
import com.netflix.hystrix.exception.HystrixTimeoutException;
import feign.FeignException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.net.ConnectException;
/**
* SpringCloud返回信息格式
* Created by 鲁达 on 2018/12/06.
*/
public class Result<T> implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger log= LoggerFactory.getLogger(Result.class);
/**
* 返回状态
*/
private Boolean isTrue=true;
/**
* 状态码
*/
private String code;
/**
* 业务码
*/
private String type;
/**
* 状态说明
*/
private String message;
/**
* 返回数据
*/
private T data;
public Boolean getTrue() {
return isTrue;
}
public void setTrue(Boolean aTrue) {
isTrue = aTrue;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
/**
* 返回成功
* @param type 业务码
* @param message 错误说明
* @param data 数据
*/
public Result(String type, String message, T data) {
this.isTrue=true;
this.code ="0000";
this.type=type;
this.message = message;
this.data=data;
}
public Result() {
this.isTrue=true;
this.code ="0000";
}
public Result(Throwable throwable) {
log.error(throwable+"tt");
this.isTrue=false;
if(throwable instanceof FeignException){
this.code= "0001";
this.message="参数失败"+throwable;
}else if(throwable instanceof RuntimeException){
this.code= "1002";
this.message="链接失败"+throwable;
}else if(throwable instanceof HystrixTimeoutException){
this.code= "1003";
this.message="链接超时"+throwable;
}else if(throwable instanceof ConnectException){
this.code= "1002";
this.message="链接失败"+throwable;
}else if(throwable instanceof Exception){
log.error("未知异常"+throwable);
this.code= "9999";
this.message="未知异常"+throwable;
}
}
}
同时,在entity的pom.xml下加入以下依赖:
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>9.5.0</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.5.12</version>
</dependency>
10、我们打开spring-cloud-user项目下的ScUserController.java,添加如下代码:
package com.luda.springcloud.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.luda.springcloud.entity.ScUser;
import com.luda.springcloud.mapper.ScUserMapper;
import com.luda.springcloud.result.Result;
import com.luda.springcloud.service.ScUserService;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* <p>
* user 控制器
* </p>
*
* @author 鲁达
* @since 2018-12-06
*/
@RestController
@RequestMapping("/scUser")
@CrossOrigin
public class ScUserController {
@Value("${server.port}")
private String port;
@Autowired
private ScUserService userService;
@Resource
private ScUserMapper userMapper;
/**
* 添加用户
* @param name
* @param password
* @return
*/
@RequestMapping(value = "addScUser",method = {RequestMethod.POST, RequestMethod.GET})
public Result addScUser(@RequestParam(required = false) String name,
@RequestParam(required = false) String password) {
Result result = new Result();
ScUser user = new ScUser();
try {
user.setName(name);
user.setPassword(DigestUtils.md5Hex(password));
userService.insert(user);
result.setType("success");
result.setMessage("操作成功!");
}catch (Exception e){
e.printStackTrace();
result.setType("fail");
result.setMessage("操作异常!");
}
return result;
}
/**
* 获取用户--分页
* @param name
* @param pageNum
* @param pageSize
* @return
*/
@RequestMapping(value = "getScUserPageData",method = {RequestMethod.POST, RequestMethod.GET})
public Result<JSONObject> getScUserPageData(@RequestParam(required = false) String name,
@RequestParam(required = false) String pageNum,
@RequestParam(required = false) String pageSize) {
Result result = new Result();
try {
if(pageNum==null||"".equals(pageNum)) pageNum = "1";
if(pageSize==null||"".equals(pageSize)) pageSize = "10";
Page pages=new Page(Integer.parseInt(pageNum),Integer.parseInt(pageSize));
Wrapper w= new EntityWrapper();
if(name!=null||!"".equals(name)) w.like("name",name);
pages.setRecords(userMapper.selectPage(pages,w));
if(pages.getTotal()>0){
result.setType("success");
result.setMessage("有数据");
}else{
result.setType("fail");
result.setMessage("无数据");
}
result.setData(pages);
}catch (Exception e){
e.printStackTrace();
result.setType("fail");
result.setMessage("获取教师数据发生异常");
}
return result;
}
}
最后,我们启动项目:
1、先启动服务注册中心:SpringCloudServerApplication
再启动子服务去注册:SpringCloudUserApplication、SpringCloudWebApplication
2、启动完毕后,我们去浏览器访问:localhost:8001
3、会发现spring-cloud-user注册了:端口号是8003、会发现spring-cloud-web注册了:端口号是8002
4、请求localhost:8003/scUser/addScUser?name=鲁达&password=123
返回:{"code":"0000","type":"success","message":"操作成功!","data":null,"true":true}
5、请求localhost:8003/scUser/getScUserPageData
返回:{"code":"0000","type":"success","message":"有数据","data":{"total":1,"size":10,"pages":1,"current":1,"records":[{"id":"deb949f7b0ca4029a6bf8b49e03fe4c4","name":"鲁达","password":"202cb962ac59075b964b07152d234b70","birthday":null,"sex":null}]},"true":true}