mybatis-plus实体类添加了一个int对象为什么会直接放到sql查询条件里
时间: 2023-12-27 13:03:09 浏览: 35
MyBatis-Plus是一个基于MyBatis的优化增强工具,它提供了一些便捷的方法和功能来简化数据库操作。当你在实类中添加了一个int对象,并且使用该对象作为查询条件时,MyBatis-Plus会将该字段默认作为查询条件的一部分。
这是因为MyBatis-Plus根据对象的属性来生成SQL语句,如果你在实体类中定义了一个int类型的属性,并且在查询时将该属性赋值,MyBatis-Plus会将该属性自动添加到生成的SQL语句的WHERE条件中。
如果你不想将该属性作为查询条件,可以使用MyBatis-Plus提供的注解来进行设置。比如,使用`@TableField(exist = false)`注解来告诉MyBatis-Plus该字段不是数据库表中的列,不需要作为查询条件。
示例代码如下:
```java
public class User {
private Long id;
private String name;
@TableField(exist = false)
private int age;
// getter and setter
}
```
这样配置后,MyBatis-Plus在生成SQL语句时会忽略age字段,并且不将其作为查询条件。
相关问题
mybatis-plus 自定义插入sql为什么没有自动填充id
Mybatis-Plus 自定义插入 SQL 时,如果需要自动填充 ID,需要注意以下几点:
1. 实体类中的 ID 字段必须使用 `@TableId` 注解标注,例如:
```java
@TableId(type = IdType.AUTO)
private Long id;
```
2. 在自定义 SQL 中,必须使用 Mybatis-Plus 提供的 `com.baomidou.mybatisplus.core.mapper.BaseMapper.insert()` 方法来执行插入操作,例如:
```xml
<insert id="customInsert" parameterType="com.example.demo.entity.User">
insert into user (name, age) values (#{name}, #{age})
</insert>
```
```java
public interface UserMapper extends BaseMapper<User> {
@Insert("${sql}")
int customInsert(@Param("sql") String sql);
}
```
```java
User user = new User();
user.setName("张三");
user.setAge(20);
String sql = "insert into user (name, age) values ('" + user.getName() + "', " + user.getAge() + ")";
userMapper.customInsert(sql); // 自定义插入 SQL
```
3. 如果还是无法自动填充 ID,可以检查一下 Mybatis-Plus 的全局配置,确保开启了自动填充功能,例如:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
globalConfig.setSqlInjector(new MyLogicSqlInjector());
globalConfig.setDbConfig(new GlobalConfig.DbConfig().setDbType(DbType.MYSQL));
return globalConfig;
}
}
```
其中,`MyMetaObjectHandler` 是自定义的元对象处理器,用于填充自动填充字段的值,例如:
```java
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 自动填充 ID
if (metaObject.hasGetter("id") && metaObject.getValue("id") == null) {
this.strictInsertFill(metaObject, "id", Long.class, IdWorker.getId());
}
// 自动填充创建时间和更新时间
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
// 自动填充更新时间
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
```
java分页查询sql语句_MyBatis-Plus 分页查询以及自定义sql分页的实现
MyBatis-Plus提供了非常方便的分页查询功能,可以直接使用Page类来进行分页查询。
使用MyBatis-Plus的分页查询,需要进行以下步骤:
1. 引入MyBatis-Plus的依赖:在pom.xml中添加以下依赖:
```
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
```
2. 定义实体类:定义需要进行分页查询的实体类,并使用注解@TableField进行字段映射。
3. 定义Mapper接口:定义Mapper接口,并继承BaseMapper类,继承BaseMapper类后,MyBatis-Plus会自动提供一些基本的CRUD操作。
```
public interface UserMapper extends BaseMapper<User> {}
```
4. 分页查询:在Service层中调用分页查询方法,使用Page对象设置分页参数,然后调用selectPage方法进行分页查询。
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public Page<User> getUserList(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
return userMapper.selectPage(page, null);
}
}
```
如果需要自定义sql分页,可以在xml中使用MyBatis的分页插件进行分页查询。
1. 引入分页插件:在pom.xml中添加以下依赖:
```
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
```
2. 配置分页插件:在MyBatis的配置文件中配置分页插件。
```
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
```
3. 自定义sql分页查询:在xml中使用分页插件的PageHelper.startPage方法进行分页查询。
```
<select id="getUserList" resultMap="userMap">
select * from user
<where>
<if test="name != null">
and name like concat('%',#{name},'%')
</if>
</where>
order by id desc
</select>
```
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public PageInfo<User> getUserList(int pageNum, int pageSize, String name) {
PageHelper.startPage(pageNum, pageSize);
List<User> userList = userMapper.getUserList(name);
return new PageInfo<>(userList);
}
}
```