mybatis-plus修改,判断一个表下的同一个code,code_name不能相同
时间: 2023-05-20 11:03:55 浏览: 117
可以使用Mybatis-plus提供的Wrapper类来实现该功能,具体代码如下:
```java
UpdateWrapper<Entity> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("code", code)
.ne("id", id)
.eq("code_name", codeName);
int count = entityMapper.update(entity, updateWrapper);
```
其中,"code"为表中的code字段,"code_name"为表中的code_name字段,"id"为当前记录的id,"entity"为要更新的实体对象。使用eq方法表示相等,ne方法表示不相等。最后使用update方法进行更新操作。
相关问题
一张表有uid,code,code_name,status根据uid修改属性要求同一个code下面的code_name不能相同,使用mybatis-plus实现
可以使用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>
```
注意:以上代码仅供参考,具体实现需要根据实际情况进行调整。
一张表有uid,code,code_name等字段根据uid修改属性要求同一个code下面的code_name不能相同,使用mybatis-plus实现
可以使用Mybatis-plus提供的@SqlParser注解来实现这个需求。具体实现步骤如下:
1. 在实体类中添加@TableName注解,指定表名和主键字段。
2. 在Mapper接口中添加@Mapper注解,并继承BaseMapper接口。
3. 在Mapper接口中添加@SqlParser注解,指定要拦截的SQL语句类型和要执行的SQL解析器类。
4. 在SQL解析器类中实现修改属性的逻辑,包括查询同一个code下的所有code_name,判断是否有重复,如果有则抛出异常。
5. 在Service层中调用Mapper接口的方法,实现修改属性的功能。
下面是一个示例代码:
实体类:
@TableName("my_table")
public class MyEntity {
@TableId(type = IdType.AUTO)
private Long uid;
private String code;
private String codeName;
// getter和setter方法省略
}
Mapper接口:
@Mapper
@SqlParser(type = SqlParserType.UPDATE, parser = MyUpdateSqlParser.class)
public interface MyMapper extends BaseMapper<MyEntity> {
}
SQL解析器类:
public class MyUpdateSqlParser extends AbstractJsqlParser {
@Override
public void processMappedStatement(MappedStatement ms, Map<String, Object> paramMap, BoundSql boundSql) {
if (SqlCommandType.UPDATE.equals(ms.getSqlCommandType())) {
String sql = boundSql.getSql();
if (sql.contains("my_table")) {
String code = (String) paramMap.get("code");
String codeName = (String) paramMap.get("codeName");
List<MyEntity> entities = selectList(new QueryWrapper<MyEntity>().eq("code", code));
for (MyEntity entity : entities) {
if (!entity.getCodeName().equals(codeName)) {
throw new RuntimeException("同一个code下的code_name不能相同");
}
}
}
}
}
}
Service层:
@Service
public class MyService {
@Autowired
private MyMapper myMapper;
public void updateProperty(Long uid, String code, String codeName) {
MyEntity entity = new MyEntity();
entity.setUid(uid);
entity.setCode(code);
entity.setCodeName(codeName);
myMapper.updateById(entity);
}
}
阅读全文