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

源码及截图下载: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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达哥的垃圾桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值