SQL模板支持默认值

This commit is contained in:
redkale
2024-06-29 19:18:45 +08:00
parent 8136345484
commit ff76c698f4
2 changed files with 29 additions and 16 deletions

View File

@@ -4,7 +4,7 @@
## SQL模板
  Redkale中的SQL模板与Mybatis里的SQL模板用法类似 最大区别在于不需要写很多```if/else```判断语句,也不用写xml文件 框架会根据参数存在与否动态生成sql语句 查询结果时下划线式sql字段名和驼峰式类字段名会自动匹配。
```sql
SELECT * FROM user WHERE user_id IN ${bean.userIds} OR user_name = ${bean.userName}
SELECT * FROM user WHERE user_id IN #{bean.userIds} OR user_name = #{bean.userName}
```
  当bean.userIds=nullbean.userName='hello'时sql语句转换成:
```sql
@@ -18,9 +18,20 @@
```sql
SELECT * FROM user WHERE 1=2 OR user_name = 'hello'
```
  有些场景要求参数是必需的,就需要使用$${}来校验参数是否必需。
  参数支持默认值,用逗号隔开,非String参数类型主要指定数据类型目前支持(int)、(long)、(short)、(float)、(double), 参数不存在会使用默认值aaa:
```sql
DELETE FROM user WHERE user_name = $${bean.userName}
DELETE FROM user WHERE user_name = #{bean.userName,aaa}
```
  IN参数也支持默认值:
```sql
DELETE FROM user WHERE type IN #{types,(1, 2, 3)}
DELETE FROM user WHERE type IN (1, 2, #{type, (int)3})
DELETE FROM user WHERE user_name IN #{name, ('aa','bb','cc')}
DELETE FROM user WHERE user_name ('aa', 'bb', #{type,cc})
```
  有些场景要求参数是必需的,就需要使用##{}来校验参数是否必需。
```sql
DELETE FROM user WHERE user_name = ##{bean.userName}
```
  当bean=null或者bean.userName=null时执行sql会报错 ```Missing parameter bean.userName```
@@ -32,15 +43,15 @@ public class ForumInfoService extends AbstractService {
private static final String findSql = "SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = ${bean.forumSectionid} AND "
+ "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}";
+ "s.forum_sectionid = #{bean.forumSectionid} AND "
+ "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}";
//查询列表记录的sql
private static final String querySql = "SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = ${bean.forumSectionid} AND "
+ "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}";
+ "s.forum_sectionid = #{bean.forumSectionid} AND "
+ "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}";
@Resource
private DataSqlSource source;
@@ -68,17 +79,17 @@ public interface ForumInfoMapper extends BaseMapper<ForumInfo> {
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ "WHERE f.forumid = s.forumid "
+ "AND s.forum_sectionid = ${bean.forumSectionid} "
+ "AND f.forumid = ${bean.forumid} "
+ "AND s.forum_section_color = ${bean.forumSectionColor}")
+ "AND s.forum_sectionid = #{bean.forumSectionid} "
+ "AND f.forumid = #{bean.forumid} "
+ "AND s.forum_section_color = #{bean.forumSectionColor}")
public ForumResult findForumResultOne(ForumBean bean);
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ "WHERE f.forumid = s.forumid AND "
+ "s.forum_sectionid = ${bean.forumSectionid} "
+ "AND f.forumid = ${bean.forumid} "
+ "AND s.forum_section_color = ${bean.forumSectionColor}")
+ "s.forum_sectionid = #{bean.forumSectionid} "
+ "AND f.forumid = #{bean.forumid} "
+ "AND s.forum_section_color = #{bean.forumSectionColor}")
public CompletableFuture<ForumResult> findForumResultOneAsync(ForumBean bean);
//翻页查询
@@ -91,7 +102,7 @@ public interface ForumInfoMapper extends BaseMapper<ForumInfo> {
@Sql("UPDATE forum_section s "
+ " SET s.forum_sectionid = '' "
+ " WHERE s.forum_section_color = $${bean.forumSectionColor}")
+ " WHERE s.forum_section_color = ##{bean.forumSectionColor}")
public int updateForumResult(@Param("bean") ForumBean bean0);
}
```