您现在的位置是:主页 > news > 动易网站 修改栏目名字/流量平台
动易网站 修改栏目名字/流量平台
admin2025/5/21 13:55:54【news】
简介动易网站 修改栏目名字,流量平台,响应式网页设计原理,西安赶集网官网从零开始搭建Springboot工程需求背景分析一、创建一个简单的springboot工程二、搭建mysql1.本地安装mysql2.创建表和数据库三、springboot整合mybatis项目结构文件特别说明链接数据库单元测试四、编写你要实现的业务逻辑五、单元测试六、 统一封装返回值Result创建Result的实体…
从零开始搭建Springboot工程
- 需求背景分析
- 一、创建一个简单的springboot工程
- 二、搭建mysql
- 1.本地安装mysql
- 2.创建表和数据库
- 三、springboot整合mybatis
- 项目结构
- 文件特别说明
- 链接数据库单元测试
- 四、编写你要实现的业务逻辑
- 五、单元测试
- 六、 统一封装返回值Result
- 创建Result的实体类
- 错误信息定义
- 七、看一下效果
需求背景分析
在数据库中存在手机型号的一些信息,根据手机型号找到手机的其他信息,例如手机的归属,手机归属人的手机号,手机的编号等。
一、创建一个简单的springboot工程
请参考这篇文章,很简单,一直下一步就可以了,https://blog.csdn.net/wjg8209/article/details/94546110
二、搭建mysql
1.本地安装mysql
1、在mysql官网直接,下载mysql,直接安装上即可
2、这时候用可视化工具链接mysql是链接不上,需要重置一下密码
系统偏好设置-mysql
点击Initialize Database
输入你的新密码,记住这个密码,用于后期链接数据库的登陆使用。
选择‘Use legacy password‘。
重启mysql服务。
再用可视化工具去连就OK了
2.创建表和数据库
1、创建数据库,不写了
2、创建表和字段
CREATE TABLE
mobile_info(
idbigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
mobile_novarchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '设备编号',
ownervarchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '手机持有者',
modelvarchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '手机型号',
create_timetimestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
update_timetimestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', PRIMARY KEY (
id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT=‘测试机信息表’;
AUTO_INCREMENT=1,主键从1开始自增。`
3、创建完后是这样的
三、springboot整合mybatis
这个章节主要实现springboot和mysql的联通
项目结构
如图:
文件特别说明
SptestApplication启动类,注意加这个注释哈,@MapperScan (“com.liu.sptest.mapper”),不然会报错
package com.liu.sptest;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan ("com.liu.sptest.mapper")
public class SptestApplication {public static void main(String[] args) {SpringApplication.run(SptestApplication.class, args);}}
MobileInfo类,与数据库字段一一对应,@Data注释可以自动生成get和set方法
package com.liu.sptest.bean;import lombok.Data;import java.util.Date;@Data
public class MobileInfo {/*** 主键*/private Long id;/*** 设备编号*/private String mobileNo;/*** 手机持有者*/private String owner;/*** 持有者手机号*/private String phoneNo;/*** 手机型号*/private String model;/*** 创建时间*/private Date createTime;/*** 更新时间*/private Date updateTime;
}
controller—HelloMissLiu 控制层,尽量轻薄,
package com.liu.sptest.controller;import com.liu.sptest.common.bean.Result;
import com.liu.sptest.common.enums.CodeMsg;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.liu.sptest.service.MobileInfoService;
import javax.annotation.Resource;@RestController
@RequestMapping(value = "/beauty")
public class HelloMissLiu {@Resourceprivate MobileInfoService mobileInfoService;@GetMapping(value = "/getMobileInfoByModel")public Result getHello(@RequestParam("model") String model) {if(model.equals("")){return Result.error(CodeMsg.VALIDATION_ERROR);}return Result.success(mobileInfoService.getMobileInfo(model));}
}
mapper.MobileInfoMapper 用来映射真正的mysql语句而抽象出来的接口–非正式定义,就这么个意思。。。
package com.liu.sptest.mapper;import org.springframework.stereotype.Repository;
import com.liu.sptest.bean.MobileInfo;
import java.util.List;@Repository
public interface MobileInfoMapper {//增加一条设备信息int insertMobileInfo(MobileInfo mobileInfo);//修改设备信息int updateMobileInfo(String owner);//根据型号查询设备信息MobileInfo queryMobileByModel(String model);//根据姓名查询设备信息List<MobileInfo> queryMobileByOwner(String owner);
}
MobileInfoService 实现层,主要是业务逻辑的处理
package com.liu.sptest.service;import com.liu.sptest.mapper.MobileInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.liu.sptest.bean.MobileInfo;/*** @Author: beauty* @Date: 2020/4/18 3:00 下午*/
@Component
public class MobileInfoService {@Autowiredprivate MobileInfoMapper mobileInfoMapper;public MobileInfo getMobileInfo(String model) {return mobileInfoMapper.queryMobileByModel(model);}}
MobileInfoMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.liu.sptest.mapper.MobileInfoMapper"><resultMap id="BaseResultMap" type="com.liu.sptest.bean.MobileInfo"><result column="id" jdbcType="INTEGER" property="id" /><result column="mobile_no" jdbcType="VARCHAR" property="mobileNo" /><result column="owner" jdbcType="VARCHAR" property="owner" /><result column="phone_no" jdbcType="VARCHAR" property="phoneNo" /><result column="model" jdbcType="VARCHAR" property="model" /><result column="create_time" property="createTime" /><result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /></resultMap><sql id="Base_Column_List" >id, mobile_no, owner, phone_no, model, create_time, update_time</sql><select id="queryMobileByModel" parameterType="java.lang.String" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from mobile_infot where model = #{model}</select>
</mapper>
application.yml 数据库的连接信息都在这里,这里注意空格,冒号后要有空格,在yml文件中,直到参数名字变色了才算有效
#数据库连接:注意要加上时区
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/tesmobile?serverTimezone=GMT%2B8username: rootpassword: xxxxxdriver-class-name: com.mysql.jdbc.Driver
mybatis:mapper-locations: classpath:mapper/*Mapper.xmltype-aliases-package: com.liu.sptest.bean
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>sp_test</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- 加载mybatis整合springboot--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!-- MySQL的jdbc驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version></dependency><!--自动生成get和set方法--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.49</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
链接数据库单元测试
下面我们就写个单测看看有没有打通mysql,这里我遇到个问题,就是实体类中字段命名和数据库设计的不一致时候就取不出来,明明在MobileInfoMapper.xml使用resultMap做了一一映射怎么会匹配不到呢,后来改了MobileInfoMapper.xml文件,在select语句中加了resultMap=“BaseResultMap”,至于为什么这么干就可以取出库里面所有数据我也不知道,有知道的一定留言告诉我吖,select语句中至少配置resultType和resultMap其中的一个,我之前配置的resultType,后来删掉了配置了resultMap可以取出所有数据了。
package com.liu.sptest;import com.alibaba.fastjson.JSON;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.liu.sptest.service.MobileInfoService;
import javax.annotation.Resource;/*** @Author: beauty* @Date: 2020/4/23 11:22 上午*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class MysqlTest {@Resourceprivate MobileInfoService mobileInfoService;@Testpublic void testMybatis() {String str = JSON.toJSONString(mobileInfoService.getMobileInfo("oppo"));System.out.println("==================" + str);}
}
看下测试结果
四、编写你要实现的业务逻辑
代码如上边的MobileInfoService方法,实现了根据测试机型号查询测试机信息
五、单元测试
空
六、 统一封装返回值Result
具体我是参考https://www.jianshu.com/p/cfd66f651636 这篇文章的,代码没有完全复制,取了需要用的部分
创建Result的实体类
该实体类定义了返回结果的基本组成,包括返回的状态码,错误信息及具体的返回值,而且定义了正常请求时候的返回方法及错误请求返回的信息
package com.liu.sptest.common.bean;import com.liu.sptest.common.enums.CodeMsg;
import lombok.Data;import java.io.Serializable;/*** @Author: beauty* @Date: 2020/4/26 11:06 上午*/
@Data
public class Result<T> implements Serializable {private int code;private String msg;private T data;private Result(int code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}public static <T> Result<T> success(T data){return new Result<T>(0,"success",data);}public static <T> Result<T> error(CodeMsg cm){return new Result<T>(cm.getCode(),cm.getMsg(),null);}
}
错误信息定义
package com.liu.sptest.common.enums;import lombok.Data;/*** @Author: beauty* @Date: 2020/4/26 11:13 上午*/
@Data
public class CodeMsg {private int code;private String msg;/*** 私有构造器* @param code* @param msg*/private CodeMsg(int code, String msg) {this.code = code;this.msg = msg;}/*** 通用错误返回*/public static final CodeMsg SERVER_ERROR = new CodeMsg(60000,"服务器异常!");public static final CodeMsg VALIDATION_ERROR = new CodeMsg(60001,"参数效验错误!");
// public static final CodeMsg BIZ_ERROR = new CodeMsg(60002,"业务异常:%s!");
}
mobileInfoService.getMobileInfo(model)为一个对象,直接放到success方法中就行了,不要放string,不然返回值格式不好看,而且有反斜杠
return Result.success(mobileInfoService.getMobileInfo(model));
七、看一下效果