一张表有uid,code,code_name,status根据uid修改属性要求同一个code下面的code_name不能相同,使用mybatis-plus实现
时间: 2023-05-20 10:03:58 浏览: 160
可以使用mybatis-plus的@SqlParser注解来实现这个需求。具体步骤如下:
1. 在实体类中添加@TableLogic注解,表示该字段为逻辑删除字段。
2. 在mapper接口中添加@SqlParser注解,表示该方法需要进行SQL解析。
3. 在mapper.xml文件中编写SQL语句,使用CASE WHEN语句来判断是否存在相同的code_name,如果存在则抛出异常。
示例代码如下:
实体类:
```java
@Data
@TableName("table_name")
public class TableEntity {
@TableId(type = IdType.AUTO)
private Long uid;
private String code;
private String codeName;
@TableLogic
private Integer status;
}
```
mapper接口:
```java
@Mapper
public interface TableMapper extends BaseMapper<TableEntity> {
@SqlParser(filter = true)
void updateByUid(TableEntity entity);
}
```
mapper.xml文件:
```xml
<update id="updateByUid" parameterType="com.example.TableEntity">
UPDATE table_name
SET code = #{code},
code_name = #{codeName},
status = #{status},
update_time = now()
WHERE uid = #{uid}
AND NOT EXISTS (
SELECT 1 FROM table_name
WHERE code = #{code}
AND code_name = #{codeName}
AND uid != #{uid}
AND status = 1
)
</update>
```
注意:以上代码仅供参考,具体实现需要根据实际情况进行调整。
阅读全文