提示:今天的内容在上一次的基础上继续开发,并采用前后端完全分离的方式发送请求,和postman测试请求。
提示:今天演示的项目是我重新搭建的,项目环境和上次演示的完全相同,开发照步骤来就好,不会有任何影响。以下是本篇文章正文内容,下面案例可供参考
一、创建Controller请求及数据返回
1、在项目路径 src/jmain/java/com/moyang/project 的路径下新建一个包名为:controller,和启动类同级;(com/moyang/project) 这个路径名称和我的可以不同,但是结构要保持一致;
2、controller包创建好之后,在包下面创建一个相应模块的controller类。
3、给控制器加上注解,并新建一个方法测试请求,以用户模块为例:userInfoController
4、测试结果,这里我用postman进行测试
接受到返回的信息说明接口是通的。
注:开发一定要懂知道的喝茶小技巧,创建的接口一定要先测一下能否正常请求并成功返回之后,在进行逻辑代码的编写,如果创建完接口不进行测试直接劈里啪啦一通乱敲,最后找bug都要找几杯茶的工夫(如果你是大神或者不爱喝茶,那就当我是在放屁)
@RestController
@RequestMapping("/project/userInfo")
public class UserInfoController {
@PostMapping("/userLogin")
public Map userLogin(@RequestBody Map param){
param.put("message","请求成功");
return param;
}
}
二、创建统一结果集返回数据
上面接收到了服务端的请求,并成功返回了参数,但实际开发的过程中服务段需要接受的参数要包含code状态码、message请求信息、resultDate返回结果。因为是前后端分离的项目采用的是ajax的方式请求,请求的参数和返回的参数通常都是Json格式,这时候用map就不够灵活了,所以有了将结果集封装成一个对象,把这个对象以Json的方式返回给前端;
茶不急喝,上代码先
1、在project包下面创建一个common包,这个包用于存放公共的资源,在这个包下新建一个JsonResult类(名字别太随意),创建方式与controller一致,这里就不上图了
@Data // Lombok自带注解,用于生成get、set方法
@AllArgsConstructor // Lombok自带注解,用于生成全参构造
@NoArgsConstructor // Lombok自带注解,用于生成无参构造
public class JsonResult {
// 返回状态
private Integer code;
// 请求信息
private String message;
// 返回结果
private Object resultData;
// 定义一个请求成功的方法,用于请求成功后返回给服务服务端
public static JsonResult success(Integer code,String message,Object resultData){
return new JsonResult(code,message,resultData);
}
// 定义一个请求失败的方法,用于请求失败或捕获到异常之后返回给服务服务端
public static JsonResult error(Integer code,String message,Object resultData){
return new JsonResult(code,message,resultData);
}
}
2、修改userInfoController的userLogin方法
@PostMapping("/userLogin")
public JsonResult userLogin(@RequestBody Map param){
JsonResult jsonResult= null;
try {
jsonResult = null;
param.put("param1","请求的参数");
param.put("返回Bean",new UserInfo("admin","123456","aihechadexiaochoukaifa@qq.com"));
//这里的userInfo在实际开发中不要这样返回,这样写我是为了演示效果
jsonResult=JsonResult.success(200,"服务请求成",param);
} catch (Exception e) {
// 这里为了演示我把 Exception 作为resultData返回出去,实际开发不要返回异常信息,原因以后再说
jsonResult=JsonResult.error(300,"可能出错的原因",e);
}
return jsonResult;
}
发送请求测试结果
以上操作就完成了对请求的接收和响应,对于JsonResult返回的方法可以根据自己的需求增加想要的方法,后续会有对异常返回统一的处理,今天先完成数据库的连接和mybatis-plus自动生成代码;
三、配置数据源连接数据库
在src/main/resource目录下边有一个application.properties配置文件。
打开这个配置文件,将数据库的连接配上。
# 设置端口,默认8080,改动范围在8000-9999
server.port=8888
# 数据库连接url,?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8 这一段是设置时区的
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名称?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
# 数据库连接驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
四、使用mybatis-plus自动生成代码完成数据查询
mybatis-plus官网:https://www.baomidou.com/ 在使用后代码自动生成器之前先看一下官方文档,知道新版与进版本的差异和一些可能出现的错误。
1、在pom.xml文件引入mybatis-plus依赖
引入这三个依赖到pom文件的dependencies节点下
<!--配合使用 ST-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--配合使用 ST-->
2、在测试类中创建代码生成器的执行方法,测试类名自己能看懂就行
@Test
void codeAutomatikNew(){
String projectPath=System.getProperty("user.dir");//获取项目路径
//(2)创建生产器
FastAutoGenerator.create("jdbc:mysql://localhost:3306/数据库名字?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "数据库用户", "数据库用户密码")
// 全局配置 GlobalConfig
.globalConfig(builder -> {
builder.author("moyang") // 设置作者名
.enableSwagger() // 开启 swagger 模式,默认值false
.dateType(DateType.ONLY_DATE) //定义生成的实体类中日期类型
// 指定输出目录,注意可根据包修改
.outputDir(projectPath+"/src/main/java");
})// 包配置 PackageConfig
.packageConfig(builder -> {
builder.parent("com.moyang") // 设置父包名
.moduleName("project") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "D:/Demo/java/financial-project/src/main/java/com/moyang/project/mapper/mapping")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_user_info","t_stock_money_info","t_stock_money_sum_info") // 设置需要生成的表名,多张以逗号隔开
.addTablePrefix("t_"); // 设置过滤表前缀
})
.templateEngine(null) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
运行这个方法src/main/java/com/xxx/xxx/会创建下面这几个包
当这些成功生成的时候就就说明代码生成没问题了。
3、修改UserInfoController,测一下能否正常访问数据库
@RestController
@RequestMapping("/project/userInfo")
public class UserInfoController {
/* 1、类下面通过注解引入UserInfoServiceImpl */
@Autowired
private UserInfoServiceImpl userInfoService;
/* 2、 增加获取用户的方法 */
@PostMapping("/getUserInfo")
public JsonResult getUserInfo(@RequestBody Map param){
JsonResult jsonResult= null;
try {
/* 3、 用QueryWrapper 传递参数*/
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.allEq(param,false);
UserInfo userBean = userInfoService.getOne(queryWrapper);
/* 4、将 查询到的用户信息userBean 返回个前端 */
jsonResult=JsonResult.success(200,"服务请求成",userBean);
} catch (Exception e) {
jsonResult=JsonResult.error(300,"可能出错的原因",e);
}
return jsonResult;
}
}
4、 postman发送请求测试接口是否成功
当结果成功返回就说说明没问题了
总结
提示:由于代码是自动生成的有几个细节点需要注意
1、在启动类上加上扫描mapper文件的注解@MapperScan(“com.moyang.project.mapper”)
2、在Service实现类上加上@Service,这两个注解一个都不能少
一套操作下来项目的架构就搭建的差不多了,后面开始业务逻辑的开发,开发中会用到世界开发中常用的技术框架,以及需要注意的细节点。是时候泡杯茶解解渴了。
泡茶之前记得提交代码到远程