小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)

源码及截图下载:https://download.csdn.net/download/qq_31122833/10831823

欢迎指正,微信:cc806522806

1、打开spring-cloud-utils项目下的pom.xml,加入如下依赖:

        
        
            mysql
            mysql-connector-java
            runtime
        
        
            com.baomidou
            mybatisplus-spring-boot-starter
            1.0.5
        
        
            com.baomidou
            mybatis-plus
            2.1.9
        
        
            junit
            junit
            
            4.12
        

2、在spring-cloud-utils项目下新加code包、code包下新加autoCode.java类:其中autoCode.java是为我们自动生成代码的工具,由mybatis-plus提供:

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第1张图片

/**
 * 

* 测试生成代码 *

* * @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:

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第2张图片

4、在myspringcloud数据库下,添加sc_user表 :

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第3张图片

5、接下来,我们运行autoCode.java :

此方法会给我们打开本地文件夹,里面是它自动为我们生成的entity、service、mapper、xml、controller

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第4张图片

 6、我们将entity放入spring-cloud-entity项目中、其余的放在spring-cloud-user项目下:

放好后,我们的代码是会报错的;别急,我们添加相应的依赖就好了!
1、在spring-cloud-user项目下的pom.xml中添加如下依赖:
        
            com.luda.springcloud
            spring-cloud-entity
            0.0.1-SNAPSHOT
        
        
			com.luda.springcloud
			spring-cloud-utils
			0.0.1-SNAPSHOT
		
		
			com.baomidou
			mybatisplus-spring-boot-starter
			1.0.5
		
		
			com.baomidou
			mybatis-plus
			2.1.9
		
        
            com.alibaba
            druid
            1.0.25
        
        
            mysql
            mysql-connector-java
            runtime
        

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、我们的项目变成了这个鬼样子:

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第5张图片

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 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下加入以下依赖:

        
			io.github.openfeign
			feign-core
			9.5.0
		
		
			com.netflix.hystrix
			hystrix-core
			1.5.12
		

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;

/**
 * 

* user 控制器 *

* * @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 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}

小白入门Java开发第三篇:从零开始搭建SpringCloud第五节(对接数据库之引入Mybatisplus)_第6张图片

你可能感兴趣的:(小白入门Java开发教程)