# dbrest-spring-boot-starter **Repository Path**: zzhtop/dbrest-spring-boot-starter ## Basic Information - **Project Name**: dbrest-spring-boot-starter - **Description**: 极简的crud及api接口开发框架;思路来源于mybatis,在controller基于声明式接口和注解,动态代理生成实现类,实现api接口开发。 @DbCrud:一个注解实现单表crud接口开发; @DbQuery、@DbUpdate、@DbQueryPage等:用法类似mybatis @Select、@Update注解,在controller层实现基于注解式接口开发 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/zzhtop/dbrest-spring-boot-starter - **GVP Project**: No ## Statistics - **Stars**: 23 - **Forks**: 3 - **Created**: 2022-03-18 - **Last Updated**: 2025-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, API, annotation, MyBatis ## README # 简介 ## dbrest-spring-boot-starter > 极简的crud接口开发、sql接口开发框架,与spring boot无缝集成。 > > 思路来源于mybatis,在controller基于声明式接口和注解,动态代理生成实现类,实现api接口开发。 > > @DbCrud:一个注解实现单表crud接口开发 > > @DbQuery、@DbUpdate、@DbQueryPage等:用法类似mybatis @Select、@Update注解,在controller层实现基于注解式接口开发 # 特点 - 通过注解声明式,实现controller接口开发 - 与spring boot无缝集成 - 支持mysql、oracle - 安全性,防止sql注入 - 轻量级、可与mybatisPlus、hibernate框架等共用 ##### 如果您觉的有用的话,点个star收藏支持一下,万分感谢! ----- # 使用方法 ## 快速开始 ### 依赖包引入 在项目的pom.xml的dependencies中加入以下内容: ``` xyz.zeozheng dbrest-spring-boot-starter 0.98 ``` ### 数据库配置(可选,已集成mybatis、jpa等数据库dao框架可跳过,会自动识别数据源) 添加db.setting配置文件(本项目使用hutool db模块操作数据库),样例如下: ``` ## 基本配置信息 # JDBC URL,根据不同的数据库,使用相应的JDBC连接字符串 url = jdbc:mysql://:/ # 用户名,此处也可以使用 user 代替 username = 用户名 # 密码,此处也可以使用 pass 代替 password = 密码 # JDBC驱动名,可选(Hutool会自动识别) driver = com.mysql.jdbc.Driver ## 可选配置 # 是否在日志中显示执行的SQL showSql = true # 是否格式化显示的SQL formatSql = false # 是否显示SQL参数 showParams = true # 打印SQL的日志等级,默认debug sqlLevel = debug ``` - 如需集成数据库连接池等其他配置,参考[Hutool](https://www.hutool.cn/docs/#/db/%E6%95%B0%E6%8D%AE%E6%BA%90%E9%85%8D%E7%BD%AEdb.setting%E6%A0%B7%E4%BE%8B) ### 开始使用 - spring boot启动类添加 @EnableDbRest - Controller层添加以下接口( book表名需修改为自己的表名 ) ```java @DbRestController //@DbRestController注解 public interface BookController { /** * 生成crud接口:/book/save、/book/findList、/book/findPage、 * /book/getById、/book/delete */ @DbCrud(tableName = "book", keyField = "id",idtype = IdType.AUTO) public Object book(); /** * 根据name查询,请求路径 /book/findByName */ @RequestMapping(value = "/book/findByName", method = RequestMethod.GET) @DbQuery(value = "select * from book where 1=1 {name? and name = [name]}") public Object findByName(@RequestParam(value = "name", required = false) String name); } ``` - 试试请求 接口: - /book/getById?id=xx - /book/findList、/book/findPage - /book/findByName?name=xxx ----- ## 详细用法 ### 注解说明 | 注解 | 目标对象 | 作用 | | :---------------: | :---------------------------------: | :----------------------------------------------------------: | | @EnableDbRest | spring boot 启动类 | 启用dbrest-spring-boot-starter | | @DbRestController | controller层接口 | 继承于Spring的@Controller注解,用于标记dbrest类接口 | | @DbCrud | 添加@DbRestController接口的对象方法 | 通过注解声明,自动生成对应表的增删改查方法 | | @DbQuery | 同@DbCrud | 列表查询:注解value为sql语句,可通过@RequestParam,@RequestBody等传入sql参数变量,同时支持条件判断 | | @DbQuerySingle | 同@DbCrud | 单条查询:其他同@DbQuery | | @DbQueryPage | 同@DbCrud | 分页查询:参数添加Page对象或Map,传入page、size分页参数,实现分页,其他同@DbQuery | | @DbUpdate | 同@DbCrud | 更新接口:用法同@DbQuery,返回更新条数 | | @DbInsert | 同@DbCrud | 插入接口:value为sql,如id为自增,可设置IdType = IdType.AUTO返回自增的key | ### @DbCrud注解接口 ​ 通过声明@DbCrud注解,dbrest会自动生成 save、getById、findList、findPage、delete接口;接口请求路径为:/{tableName}/{接口名},如 /book/save。 ​ 注1:@DbCrud的tableName取数据库表实际大小写,接口请求路径tableName默认小写 ​ 注2:接口类支持@RequestMapping("xxx"),接口路径前缀需添加相应路径(@DbCrud方法上不支持@RequestMapping注解) #### save - 请求方式:get、普通post、post (application/json) * 请求参数:对应数据库字段名(区分大小写) * 说明:传入主键时为update,无主键时为insert,为空的字段不修改和新增 #### getById - 请求方式:get、普通post * 请求参数:{ "id": "xxxxxx" } #### findList - 请求方式:get、普通post、post (application/json) * 请求参数: * { 字段名1_条件:"xx", 字段名2_条件:"xx"},如: { "id_eq": 3, "name_like": "aaa" } * 条件支持:_eq、_neq、_like、_in、_gt、_gte、_lt、_lte、_bet(同between) * 特殊字段:orderby, 可传入 { orderby: '字段名 desc/asc'} 进行排序 #### findPage * 用法同findList接口,可传入 page、size字段分页,如 { page:1, size:10} #### delete - 请求方式:get、普通post、delete * 请求参数:{ "id": "xxxxxx" } ### Sql特殊语法 - Sql中获取参数: ``` 使用[key](同mybatis #{key}),如:@DbQuery(value = "Select * from [key]") 使用 $[key] (同mybatis ${key}),如:@DbQuery(value = "Select * from $[key]") 如无权限验证机制,谨慎使用 $[key],存在sql注入风险 可获取map、entity、@RequestParam、@RequestBody字段 ``` - Sql条件判断 - 语法如:select * from book where 1 = 1 { name? name = [name] },大括号包含为条件代码块,当问号前面成立时,则拼接问号后面的sql - 参照mybatis写法: ```xml AND name = '' dbrest写法: { name != null and name != ''? AND name = ''} 可简写为:{ name? AND name = ''} ``` - 同时和mybatis类似,test语句及获取参数表达式支持ognl语法: - 如执行方法 ``` Select * from book where 1=1 { @zzh.dbrest.demo.dbrestdemo.DbrestDemoApplication@check(name) ? and name = [@zzh.dbrest.demo.dbrestdemo.DbrestDemoApplication@getName(name)] } ``` ### 使用demo ​ [dbrest-demo-mysql](https://gitee.com/zzhtop/dbrest-demo-mysql/tree/master) ----- ## 推荐用法 - dbrest + mybatis plus - 使用dbrest生成crud,简易查询,统计等无业务逻辑的api接口 - mybatis plus处理service层,及复杂业务数据库逻辑处理 - 简易项目可直接使用 dbrest + Hutool db模块 ## 常见问题 - @DbCrud数据库表名区分大小写 # 感谢 - Mybatis:思路和源码参考 - Hutool:数据库查询基于Hutool Db模块 - Ognl:Sql条件及参数使用Ognl - Spring boot:基于Spring 框架体系