首页 » 网站建设 » phpslowloger技巧_SpringBoot专栏集成mybatis以及restful风格样例演示第8讲

phpslowloger技巧_SpringBoot专栏集成mybatis以及restful风格样例演示第8讲

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

重点讲解下restfull风格,然后快速集成下mybatis,末了会供应下项目实战中一年运用的样例,欢迎点评。
此外大家项目中碰着问题可不才面留言,看到后随时回答,共同进步

什么是REST

一种软件架构风格、设计风格,而不是标准,只是供应了一组设计原则和约束条件。
它紧张用于客户端和做事器交互类的软件。
基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

phpslowloger技巧_SpringBoot专栏集成mybatis以及restful风格样例演示第8讲

理解RESTful

要理解RESTful架构,须要理解Representational State Transfer这个词组到底是什么意思,它的每一个词都有些什么涵义。

phpslowloger技巧_SpringBoot专栏集成mybatis以及restful风格样例演示第8讲
(图片来自网络侵删)

下面我们结合REST原则,环绕资源展开谈论,从资源的定义、获取、表述、关联、状态变迁等角度,列举一些关键观点并加以阐明。

资源与URI统一资源接口资源的表述资源的链接状态的转移

要从以上几点去理解restful风格,假如长篇描述或许一篇文章也无法描述清楚,我们从实战出发,只须要节制要要点即可,随着深入我们会有更深的理解。

1.案例中的Controller层会涉及GET,DELETE,PUT和POST的范例用法

2.我们先来详细看下RESTful风格的url,比如我要查询商品信息,那么

非REST的url:http://.../queryGoods?id=1001&type=t01

REST的url: http://.../t01/goods/1001

可以看出REST特点:url简洁,将参数通过url传到做事器,而传统的url比较啰嗦,而且现实中浏览器地址栏会拼接一大串字符,想必你们都见过吧。
但是采取REST的风格就会好很多,现在很多的网站已经采取这种风格了,这也是潮流方向,范例的便是url的短化转换

集成步骤:

在pom文件引入mybatis-spring-boot-starter的依赖

<!--新增--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>

引入数据库连接依赖:

<!-- alibaba的druid数据库连接池 --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version></dependency>

引入数据源

#数据库配置spring: application: name: limp-framework-provider datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://115.28.166.xx:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: test initialSize: 3 minIdle: 3 maxActive: 20 # 配置获取连接等待超时的韶光 maxWait: 60000 # 配置间隔多久才进行一次检测,检测须要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的韶光,单位是毫秒 minEvictableIdleTimeMillis: 3600000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: true testOnReturn: true # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,slf4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多个DruidDataSource的监控数据 #useGlobalDataSourceStat: true

mybatis配置

mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径 type-aliases-package: com.limp.framework.boss.domain # 所有Entity别名类所在包 mapper-locations: classpath:com/limp/framework/boss/persistence/oracle/.xml,classpath:com/limp/framework/boss/persistence/mysql/.xml # mapper映射文件

Controller、Service层、Dao代码

采取resutful风格:

Controller层:紧张把稳增编削查 四种办法()

package com.limp.framework.boss.controller;import com.limp.framework.boss.domain.UserInfo;import com.limp.framework.boss.service.UserInfoService;import com.limp.framework.core.bean.Pager;import com.limp.framework.core.bean.Result;import com.limp.framework.core.bean.ResultCode;import com.limp.framework.core.constant.Constant;import com.limp.framework.core.constant.ResultMsg;import com.limp.framework.utils.StrUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.propertyeditors.CustomDateEditor;import org.springframework.ui.Model;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.;import java.text.SimpleDateFormat;import java.util.Date;/ demo干系操作 /@RestController@RequestMapping(\"大众/systemdemo\"大众)public class DemoDomainController extends BaseController { private Logger loger= LoggerFactory.getLogger(DemoDomainController.class); @Autowired UserInfoService userInfoService; / 设置默认页面显示的条数 / public static final Integer DEFAULT_ROW=10; / 新增实体类信息 @param domain @return / @RequestMapping(value = \"大众/domain\公众,method= RequestMethod.POST) public String saveUserInfo(UserInfo domain) { loger.debug(\公众/新增实体类信息/\"大众); if(userInfoService.save(domain)){ return Result.getInstance(ResultCode.SUCCESS.toString(), ResultMsg.SUCCESS,\"大众\公众,\"大众\"大众).getJson(); } return Result.getInstance(ResultCode.ERROR.toString(), ResultMsg.ERROR,\公众\"大众,\"大众\"大众).getJson(); } / 根据id删除实体类 为了管理员易于操作支持批量操作 @param id @return / @RequestMapping(value = \"大众/user/{id}\"大众,method= RequestMethod.DELETE) public String delUserInfo(@PathVariable(\"大众id\"大众) String id) { loger.debug(\公众/根据用户id:{},删除实体类记录/\"大众, id); String []ids=id.split(Constant.DHAO); if(id.split(Constant.DHAO).length>DEFAULT_ROW){ return Result.getInstance(ResultCode.ERROR.toString(), ResultMsg.DEL_ERROR_IDS_TOO_MANY,\"大众\"大众,\"大众\"大众).getJson(); } Boolean flay=true; for(String did:ids){ if(!userInfoService.delete(did)){ flay=false; }; } if(flay){ return Result.getInstance(ResultCode.SUCCESS.toString(), ResultMsg.SUCCESS,\"大众\公众,\公众\"大众).getJson(); } return Result.getInstance(ResultCode.ERROR.toString(), ResultMsg.ERROR,\"大众\"大众,\"大众\"大众).getJson(); } / 更新实体类信息 @param domain @return / @RequestMapping(value = \公众/user\"大众,method= RequestMethod.PUT) public String updateUserInfo(UserInfo domain) { loger.debug(\公众/更新实体类信息/\公众); if(userInfoService.update(domain)){ return Result.getInstance(ResultCode.SUCCESS.toString(), ResultMsg.UPDATE_SUCCESS,\公众\"大众,\"大众\"大众).getJson(); } return Result.getInstance(ResultCode.ERROR.toString(), ResultMsg.UPDATE_ERROR,\"大众\"大众,\"大众\"大众).getJson(); } / 根据id获取实体类信息 @param model @param id 查询的id @return / @RequestMapping(value = \"大众/user/{id}\"大众,method= RequestMethod.GET) public String selectUserInfo(Model model, @PathVariable(\"大众id\"大众) String id) { loger.debug(\"大众/根据用户id{},获取实体类基本信息/\公众, id); UserInfo userInfo= userInfoService.get(id); return Result.getInstance(ResultCode.SUCCESS.toString(), ResultMsg.SUCCESS,userInfo,\"大众\"大众).getJson(); } / 查询实体类列表,分页方法 @param userInfo @return / @RequestMapping(value = \"大众/users\公众,method= RequestMethod.GET) public String selectUserInfoList(UserInfo userInfo,Pager pager) { loger.debug(\"大众/分页查询方法,返回实体类列表/\公众); pager = new Pager(pager.getPage(), StrUtils.isBlank(pager.getRows())||Constant.NUMBER_0==pager.getRows()?DEFAULT_ROW:pager.getRows()); Pager<UserInfo> userInfoPager= userInfoService.getPageList(userInfo, pager); return Result.getInstance(ResultCode.SUCCESS.toString(), ResultMsg.SUCCESS,userInfoPager,\公众\"大众).getJson(); } @InitBinder public void initBinder(WebDataBinder binder) { / 第一种办法:利用WebDataBinder注册一个自定义的编辑器,编辑器这天期类型 利用自定义的日期编辑器,日期格式:yyyy-MM-dd,第二个参数为是否为空 true代表可以为空 yyyy-MM-dd hh:mm:ss / binder.registerCustomEditor(Date.class, new CustomDateEditor( new SimpleDateFormat(\"大众yyyy-MM-dd\"大众), true)); }}

ServiceImpl层:参考DemoDomainServiceImpl类

​Mapper一样平常都有现成的工具,以是根据公司用的插件天生即可(如下)

SpringBoot继续mybatis相比拟较大略,

下载地址:https://github.com/shinians/limp-framework

最近整理资料这几天都整理到1、2点,大家点个关注支持一下呗 @架构师速成记

相关文章

Go语言,王垠眼中的高效编程利器

在当今快速发展的信息技术时代,编程语言层出不穷。在众多编程语言中,Go语言因其高效、简洁、并发能力强等特点,备受程序员喜爱。其中,...

网站建设 2024-12-26 阅读0 评论0

钩针IT马甲,时尚与功能的完美融合

随着科技的飞速发展,IT行业已成为我国最具活力的产业之一。在众多IT从业者中,如何展现自己的个性与品味,成为了他们关注的焦点。而一...

网站建设 2024-12-26 阅读0 评论0

银行IT运维,守护金融安全,赋能创新发展

随着金融科技的飞速发展,银行IT运维作为金融行业的重要支撑,其重要性日益凸显。银行IT运维不仅关乎金融安全,更是推动银行业务创新发...

网站建设 2024-12-26 阅读0 评论0