mybatis 取消实体类boolean类型查询时自动赋值
时间: 2023-07-13 12:06:44 浏览: 160
在 MyBatis 中,如果我们的实体类中包含了 boolean 类型的属性,那么在进行查询时,MyBatis 会自动为这个属性赋一个默认值。如果我们不希望 MyBatis 自动赋值,可以在对应的 `<select>` 标签中添加 `useCache="false"` 属性,如下所示:
```xml
<select id="selectUser" parameterType="int" resultMap="userResultMap" useCache="false">
select * from user where id = #{id}
</select>
```
这样,在查询时,MyBatis 就不会自动为 boolean 类型的属性赋默认值了。
相关问题
springboot mybatis 取消实体类boolean类型查询时自动赋值
在使用 Spring Boot 和 MyBatis 进行数据库操作时,如果使用实体类进行查询,那么在查询 boolean 类型字段时,MyBatis 会自动为其赋值,并将其转换为 int 类型进行查询。
如果不希望 MyBatis 自动为 boolean 类型字段赋值,可以通过在查询方法中使用 `@Param` 注解,并将参数类型设置为 Map 来实现。具体操作如下:
1. 修改 Mapper 接口中的查询方法,使用 `@Param` 注解,并将参数类型设置为 Map。
```java
@Mapper
public interface UserMapper {
List<User> findByCondition(@Param("condition") Map<String, Object> condition);
}
```
2. 修改对应的 XML 文件,将原本的实体类参数替换为 Map 类型的参数,然后在 SQL 语句中使用 map 中的键值对进行查询。
```xml
<select id="findByCondition" resultType="com.example.demo.entity.User">
SELECT * FROM user
WHERE 1 = 1
<if test="condition.name != null">
AND name = #{condition.name}
</if>
<if test="condition.age != null">
AND age = #{condition.age}
</if>
</select>
```
3. 在调用查询方法时,将查询条件放入一个 Map 对象中,并将该对象作为参数传入,即可完成查询。
```java
Map<String, Object> condition = new HashMap<>();
condition.put("name", "张三");
condition.put("age", 20);
List<User> userList = userMapper.findByCondition(condition);
```
这样就可以取消实体类 boolean 类型查询时的自动赋值了。
springboot+mybatis-plus实现:当name属性不为空时,为age属性赋值为turn,代码如何编写?
假设你有一个实体类`User`,其中包含`name`和`age`属性,可以按照以下步骤实现:
1. 在`User`类中添加一个`setAgeIfNameIsNotEmpty`方法,用于判断`name`属性是否为空,如果不为空则将`age`属性赋值为`true`。
```java
public class User {
private String name;
private Integer age;
// getter 和 setter 方法省略
public void setAgeIfNameIsNotEmpty() {
if (StringUtils.isNotEmpty(this.name)) {
this.age = 18;
}
}
}
```
2. 在`Mapper`中调用`setAgeIfNameIsNotEmpty`方法。
```java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public boolean save(User entity) {
entity.setAgeIfNameIsNotEmpty();
return super.save(entity);
}
@Override
public boolean updateById(User entity) {
entity.setAgeIfNameIsNotEmpty();
return super.updateById(entity);
}
}
```
上述代码中,我们在`save`和`updateById`方法中调用`setAgeIfNameIsNotEmpty`方法,这样每当我们保存或更新实体时,`age`属性都会被自动赋值。
注意:这里使用了`StringUtils.isNotEmpty`方法判断`name`属性是否为空,需要在项目中引入`org.apache.commons.lang3.StringUtils`类库。
阅读全文