背景: SpringBoot + Azure SQL Server 实现CRUD
遇到的问题:
- 动态查询使用 “?” 出错
@Query(value ="select * from user c where c.Category=?1")
Play GetCellsByCategory(String category);
报错误given 1 parameters but expected 0
解决方法 :将占位符修改成 “:” 成功
@Query(value ="select * from user c where c.Category=:category")
Play GetCellsByCategory(@Param("category") String category);
- 模糊查询 使用"like" 出错
@Query(value ="select * from user c where c.Category LIKE %:category%")
Play GetCellsByCategoryLike(@Param("category") String category);
报错误:com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.
解决方法: 使用 LIKE + CONCAT(字符串连接函数) 成功!!
@Query(value ="select * from user c where c.Category LIKE CONCAT('%',:category,'%')")
Play GetCellsByCategoryLike(@Param("category") String category);
- 添加、删除、更新数据 出错
解决方法: 使用 @Modifying @Transactional 实现数据库 update、delete、insert操作
当我们要通过自已写的更新、插入、删除SQL语句来实现更新、插入、删除操作时,至少需要用两个步骤:
1)@Query来注入我们自定义的sql;
2)使用@Modifying来标注是一个更新类的自定义语句。
@Transactional
@Modifying
@Query(value ="DELETE FROM dbo.call WHERE call.id = :id")
int DeleteCall(long id);
总结:
- SQL 语句中占位符 ‘?’ 在SQL Server 中需要使用 ‘:’
- SQL 语句中模糊查询 LIKE 在SQL Server中需要使用 CONCAT(字符串拼接函数)
- SQL 语句中对于执行update和delete语句需要添加@Modifying注解
SQL与SQL Server的区别
- SQL是数据库查询语言,是一种用于数据库操作的语言,被作为关系型数据库的标准语言。可以查询、定义、操作控制数据库中的全部工作。
- SQL Server是微软开发的小型关系数据库管理系统。
- ORACLE则是大型关系数据库系统,是目前世界上最流行的关系数据库管理系统