开发者学堂课程【全面讲解开源数据库中间件 MyCat 使用及原理(四):MyCat - 日志模块 - 插入日志】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/758/detail/13323
MyCat - 日志模块 - 插入日志
内容介绍:
一、插入日志
二、测试
一、插入日志
上节内容分析完 ID 的生成机制,本节内容是完成日志的插入操作
1.定义一个 MyCat 接口:
声明方法:
import cn.itcast.model .Tboperatelog;
public interface operateLogMapper {
/**
*插入日志
*@param operatelog
*/
public void insert ( TbOperatelog operatelog) ;
}
operatelog 是与表结构对应的实体类
2.声明对应的映射配置文件
再声明一个 xml 配置文件:
引入 mybatis 配置文件的头信息:
namespace 是接口的权限另类名
编写 insert 语句:
直接将其拷贝加入即可
完成后:
接口以及映射配置文件编写完成。
3.再编写 service 接口:
在该 service 接口中声明一个方法:
import cn.itcast. model. TbOperatelog;
publie interface OperateLogService {
/**
*插入日志
@param operateLog
* /
public void insert (TbOperatelog operatelog);
}
再创建一个包,是其实现类存放的包:
创建实现类:
让该类实现一个接口并且实现其中的一个方法:
import cn.itcast. log.mapper.operateLogMapper;
import cn.itcast.log.service.operateLogservice;
import cn.itcast.model.Tboperatelog;
import org.springframework.stereotype.Service;
@Service
public class operateLogServiceImpl implements operateLogService {
@Autowired
private OperateLogMapper operateLogMapper;
@Autowier
private IDWorker idWorker;
@Override
private void insert (TbOperatelog operatelog){
//1.获取一个分布式的 id
long id =idWork.nextId();
//可以得到该 id
operatelog.serId(id);
//调用 Mapper 中的方法进行插入
operateLogMapper.insert(operatelog)
}
}
到此,将 service 层编写完成。
4.接下来需要去编写一个 controller
先创建:
做一个注解 @ReatController,再加一个注解 @RequestMapping, 其前缀为 operateLog。
所以第二个注解为 @RequestMapping(“/ operateLog”)。然后在类中注入一个OperateLogService,通过 @Autowired 实现注入,再在其中添加一个 add 方法(注意:返回 Result,因为所有接口的返回值统一是 Result)。
在该方法中接收一个 TbOperatelog operatelog 对象,这里需要加注解 @PostMapping(“/add”),声明完成后,在该方法中调用 operateLogService 中的 insert 方法插入日志,插入日志完成后直接返回 new Result,里面传入 true 和 StatusCode.OK
代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.Restcontroller;
@Restcontroller
@RequestMapping ( " /operateLog")
public class operateLogController {
@Autowired
private OperateLogservice operateLogService;
@PostMapping (" / add")
public Result add(@RequestBody Tboperatelog operatelog){
operateLogService.insert(operatelog) ;
return new Result ( flag: true,statuscode. OK,message:"操作成功");
}
}
在 service 层要向其中查询数据,所以可以在其中加一个事务的注解:
(部分代码)
@Transactional
@Override
private void insert (TbOperatelog operatelog){
//1.获取一个分布式的 id
long id =idWork.nextId();
//可以得到该 id
operatelog.serId(id);
//调用 Mapper 中的方法进行插入
operateLogMapper.insert(operatelog)
}
二、测试
接口开发完毕,对插入日志的接口做一个测试
1.启动 v_service_log,(这里不通过 GatewayApplication),直接访问该 log 的微服务。
暴露出 9003 端口;
2.接下来插入日志:
需要请求 /operateLog
请求方式为 POST ,并选择 Body,然后添加数据。
代码:
{
"returnValue" :"OK",
"returnClass" :""java.lang.String",
"operateClass" : "cn .itcast.goods.SPUController",
operateMethod"" : "findById"
}
点击 Send:
操作成功。
刷新数据库,发现数据插入成功:
并且生成了 id,且可以保证该 id 不会出现重复。