一、创建数据库表
使用navicat或mysql命令行创建数据库misp,字符集选择utf8mb4。<br /><br />创建pos_category和lab_book表<br /><br />
二、配置mybatis和druid
本项目需要用到mybatis-spring-boot和阿里巴巴的druid连接池。
mybatis简单易用,是当前主流持久层框架。druid是阿里巴巴数据库连接池,有强大的sql监控功能。
Springboot官方技术推荐分别是springboot-data-jpa和hikari。因此,springboot中使用mybatis和druid都需要额外进行配置。
此外,springBoot官方推荐的json库是Jackson,分页工具是jpa分页。本项目考虑使用阿里巴巴的fastjson和mybatis的分页插件pageHelper。
1.修改pom.xml
在项目根目录pom.xml中统一管理版本。
在mis-core模块的pom.xml中加入maven依赖配置如下。
mis-lab模块依赖mis-core,所以再mis-lab模块pom.xml下添加
mis-web模块pom.xml中添加mis-lab依赖。
2.修改application.yml
在mis-web模块src/main/resource目录下的配置文件application.yml中配置mybatis和druid相关配置
修改druid数据源设置的数据库连接参数为本机mysql设定。
如果项目分包不同或者xml文件位置不同,请对应修改mybatis配置。
3.新建DruidConfig配置类
在mis-core模块增加edu.scau.mis.core.config包,新建DruidConfig类,代码如下
4.添加mybatis配置
在mis-web模块src/main/resource目录下新建mybatis目录夹和mybatis-config.xml文件
至此,Springboot集成持久层框架Mybatis和数据库连接池Druid。
三、编写Pos系统产品管理后端代码
1.PosCategory
2.CategoryMapper
@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理。
@Component是通用注解。
以下三个注解是@Component注解的拓展,并且具有了特定的功能:
@Repository注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。
@Service是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。
@Controller(包括@RestController)是spring-mvc注解,具有将请求进行转发,重定向的功能。
Mybatis Mapper接口CategoryMapper如下:
3.CategoryMapper.xml
为避免将sql语句混入Java代码中,Mybatis 映射文件CategoryMapper.xml代码如下:
此处注意mapper的namespace里面的包名需要核对,不然后续的运行过程中会出现“程序包不存在”的报错。
4.ICategoryService及实现类CategoryServiceImpl
Servcie层接口ICategoryService 和CategoryServiceImpl代码。
注意import的包名!!经常有重复前缀的情况出现,会运行失败,但是不会提示是包名错误,比较难发现。
四、Restful接口
mis-web模块为web端的Restful接口,所有模块接口都放入该模块。该模块也是SpringBoot项目启动主程序和配置文件所在模块。
1.CategoryController
SpringMvc提供对Restful支持,通过提供一系列注解实现。
@Controller声明一个处理请求的的控制器。
@RequestMapping注解在类或方法上,指定可以接收的url,可以通过method指定接收http请求的方法。它有四种特例,分别对应不同方法。
- @GetMapping,作用等同于@RequestMapping(method=RequestMethod.GET),用于查询操作。
- @PostMapping,作用等同于@RequestMapping(method=RequestMethod.POST),用于新增操作。
- @PutMapping,作用等同于@RequestMapping(method=RequestMethod.PUT),用于更新操作。
- @DeleteMapping,作用等同于@RequestMapping(method=RequestMethod.DELETE),用于删除操作。
@ResponseBody将响应内容转换成json格式。json格式通常是前端javascript指定的数据交换格式。
@RestController相当于@Controller+@ResponseBody的组合,对外接口默认返回json格式。
前后端分析开发要求controller返回json,因此选择@RestControlller注解。
编写控制类CategoryController,代码如下
2.接口测试
浏览器测试
五、配置查看druid监控
1.配置druid监控
之前DruidConfig已经进行了配置,详情可查看本笔记的2.3新建DruidConfig配置类相关代码。
2.查看druid监控
在浏览器中访问localhost:8080/druid,用DruidConfig配置的用户名admin,密码123456登录可查看监控。
进入后,可查看各项监控功能。每执行一次sql语句,sql监控可查看执行情况。监控可作为运维工具,也可作为开发过程中性能优化工具。通过产看执行次数、执行时间等进行有选择优化。
恭喜您,Springboot整合mybatis和druid成功。
六、收获体会
这次的过程对比上次困难非常非常非常多,我总结了一下主要是包名和部分文件后缀的问题。基本上每一步都有报错,而且也发现上一次的实验有配置错误的地方,及时更正了。下面列出几个,解决起来耗费很多时间的问题:
① 在导入完相关代码后,我的mybatis配置文件首行红色,提示Resource registered by this uri is not recognized。在百度后,得到解决方案:https://blog.csdn.net/u014594604/article/details/86438990
结果仍然报错,于是搜索查看了很多条答案,给出的方案都不可行。在我重新看上面的方案后,我才发现自己粗心,点错添加网址的加号了,应该点下面的,就能解决了。
②在运行过程中,报错提示:Could not find artifact …,原因是多模块项目构建时,先将parent项目要先install一回,之后子项目才可以运行mvn compile命令,否则就会报如上异常。
https://blog.csdn.net/zpwggi123/article/details/87189959
③Dependency not found的报错,这个我其实仍然不知道是什么原因导致的,但是根据下面的网址操作,再加上重新导入了一次JUnits,就不报错了。
https://blog.csdn.net/goQuesting/article/details/78422964
④alibaba的包和druid的包报错,依赖也标红,后来重新更换了maven3.6.3版本就没事了,但是3.8.2也能用,只是要加http改一下代码
⑤卡了我最久最久的地方,就是我的mapper包一直说不存在,还有就是后面运行的时候报servlet错误这两个问题(前面的先解决了然后又有后面的报错),在我点开每一个文件仔细核对代码后,发现很多是由于之前创建包的时候,命名和文件类型的问题,命名有几个重复前缀,导致后面的文件自动导入的包名有误,而且不显示报错!!必须仔细检查并改正成正确的无重复包名。
还有就是我创建文件的时候,因为一开始不知道是什么文件类型,就随便创了,但是是不行的,如果文件类型不是java文件,就手动改一下后缀.java,(最好以后都直接先选好文件类型,不要随便选空白文件),如下图。主要是这个错误无提示,所以真的花了很长时间解决。我是除了mapper以外还有service的文件也没改后缀,改了两个之后(再加上之前的包名细微的纠正),就顺利运行整个项目了。(感动)
19级信管3班 0318谭靖谊