MetaObjectHandler 对mybatis xml SQL语句不支持填充 MetaObjectHandler 接口没有进入
时间: 2024-01-20 11:13:58 浏览: 192
根据提供的引用内容,可以看出 MetaObjectHandler 接口是用于填充插入和更新操作的公共字段的。如果在 MyBatis XML SQL 语句中没有使用到插入或更新操作,那么 MetaObjectHandler 接口就不会被调用。因此,如果你想要使用 MetaObjectHandler 接口来填充公共字段,需要在 MyBatis XML SQL 语句中使用插入或更新操作。
相关问题
MetaObjectHandler对xml中的insert方法生效吗
是的,MetaObjectHandler对XML中的insert方法是生效的。MetaObjectHandler是MyBatis提供的一个接口,用于处理实体类中的元数据。在使用XML方式进行SQL语句编写时,我们可以在insert语句中使用MetaObjectHandler提供的方法,来自动填充一些通用字段,比如创建时间、更新时间、创建人、更新人等等。
具体地,在XML中使用MetaObjectHandler,我们可以在insert语句中使用#{fieldName,jdbcType=xxx,javaType=xxx,metaObject=xxx}这样的语法,来指定需要填充的字段和对应的值。其中,metaObject属性可以指定一个实现了MetaObjectHandler接口的类,用来处理实体类中的元数据。
举个例子,假设我们有一个User实体类,其中包含createdTime、updatedTime、createdBy、updatedBy等字段,我们可以在insert语句中这样使用MetaObjectHandler:
```
<insert id="insertUser" parameterType="User">
insert into user (name, age, created_time, updated_time, created_by, updated_by)
values (
#{name, jdbcType=VARCHAR},
#{age, jdbcType=INTEGER},
#{createdTime, jdbcType=TIMESTAMP, javaType=java.util.Date, metaObject=xxx},
#{updatedTime, jdbcType=TIMESTAMP, javaType=java.util.Date, metaObject=xxx},
#{createdBy, jdbcType=VARCHAR, metaObject=xxx},
#{updatedBy, jdbcType=VARCHAR, metaObject=xxx}
)
</insert>
```
其中,xxx是一个实现了MetaObjectHandler接口的类的实例。这样,在执行insert操作时,就会自动填充createdTime、updatedTime、createdBy、updatedBy等字段的值,大大简化了代码的编写。因此,MetaObjectHandler对XML中的insert方法是生效的。
mybatisplus打印sql语句 填充参数
### 回答1:
Mybatis-plus是Mybatis的增强工具,它提供了许多方便的功能,方便开发人员进行Mybatis的使用。在实际开发过程中,我们经常需要打印SQL语句以及填充参数,以便于我们更好地调试和优化SQL语句。
在Mybatis-plus中,打印SQL语句以及填充参数非常简单。我们只需要在配置文件中添加一个配置,就可以实现打印SQL语句和填充参数的功能。具体步骤如下:
1.在配置文件中添加配置项
在Mybatis的配置文件中,添加如下配置项:
```xml
<!-- 打印SQL语句 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 显示SQL语句中的参数 -->
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="logLevel" value="DEBUG"/>
```
2.在类中使用注解
在我们需要打印SQL语句的Mapper中,使用注解@Mapper以及@Log4j2即可。
```java
@Mapper
@Log4j2
public interface UserMapper extends BaseMapper<User> {
@Select("select * from user WHERE name = #{name}")
User queryUserByName(String name);
}
```
这样,当我们使用queryUserByName方法的时候,就会在控制台上打印出SQL语句以及填充的参数。
Mybatis-plus是一个非常方便的工具,使用起来也非常简单,只需要简单的配置和使用注解即可实现打印SQL语句以及填充参数的功能,方便我们进行SQL优化和调试。
### 回答2:
Mybatisplus是一个基于Mybatis框架之上的底层扩展库,提供了很多便于开发的功能,如自动生成代码、分页插件、乐观锁、多租户插件等。同时,它也提供了打印SQL语句和填充参数的功能。下面就针对这两个功能进行讲解。
一、打印SQL语句
Mybatisplus提供了打印SQL语句的功能,可以在SQL执行前和执行后打印SQL语句,方便开发人员查看和排错。使用方式如下:
1.在配置文件中设置打印SQL语句的日志级别为DEBUG:
```
logging.level.com.baomidou.mybatisplus.core.executor=DEBUG
```
2.对于需要打印SQL语句的Mapper方法,可以在方法上加上注解@Interceptor(ExecuteSqlInterceptor.class):
```
@Interceptor(ExecuteSqlInterceptor.class)
List<User> selectUserList();
```
3.执行SQL语句后,在控制台中可以看到打印出来的SQL语句,例如:
```
DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : ==> Preparing: SELECT * FROM user WHERE age > ?
DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : ==> Parameters: 18(Integer)
DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : <== Total: 2
```
二、填充参数
Mybatisplus还提供了填充参数的功能,可以在执行SQL语句前和执行后对参数进行处理。使用方式如下:
1.创建一个继承了HandlerInterceptor接口的类:
```
public class MybatisParamHandlerInterceptor implements HandlerInterceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 获取参数
Object[] args = invocation.getArgs();
// 处理参数
// ...
// 执行方法
Object result = invocation.proceed();
// 处理返回值
// ...
return result;
}
}
```
2.在配置文件中配置自定义的参数处理器:
```
mybatis-plus:
configuration:
# 自定义参数拦截器
handler:
MybatisParamHandlerInterceptor: com.example.handler.MybatisParamHandlerInterceptor
```
3.对于需要自定义处理参数的Mapper方法,可以在方法上加上注解@Interceptor(MybatisParamHandlerInterceptor.class ):
```
@Interceptor(MybatisParamHandlerInterceptor.class )
List<User> selectUserList(int age, String name);
```
4.执行SQL语句前,Mybatisplus会调用参数处理器中的intercept方法,可以进行参数处理。例如:
```
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 获取参数
Object[] args = invocation.getArgs();
// 处理参数
args[0] = args[0] + 1;
// 执行方法
Object result = invocation.proceed();
// 处理返回值
// ...
return result;
}
```
通过以上方法,我们可以轻松地实现打印SQL语句和填充参数的功能,提高开发效率和调试效率。
### 回答3:
MybatisPlus 是一个基于 Mybatis 的增强工具包,为了在开发过程中更加方便的进行 SQL 语句的构建和执行,它提供了很多方便的功能。其中有一项非常实用的功能就是可以打印 SQL 语句并填充参数。下面我就来详细介绍一下如何使用 MybatisPlus 打印 SQL 语句并填充参数。
1. 配置 mybatis-plus 配置文件
在 mybatis-plus 配置文件中,我们需要打开 ShowSql 开关和 FormatSql 开关。如下:
```
# 显示sql
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
sql-injector: com.baomidou.mybatisplus.core.injector.LogicSqlInjector
tenant-handler: xxx.TenantHandler
db-config:
logic-delete-field: DELETED
query-strategy: # 查询全部(-1),单条(0),分页(1)
id-type: uuid
field-strategy: # 必须写,否则无法生效,开启下划线转驼峰命名
- com.baomidou.mybatisplus.generator.config.po.TableField
type-enums-package:
- com.xxx
block-attack-enable: false
table-prefix:
- xxx_
schema:
- cxdatabase
- aadatabase
- xxxdatabase
Capital-Mode: false
show-sql: true
format-sql: true
```
2. 查看打印日志
开启后直接查看控制台日志即可看到 SQL 语句和参数。
```
2021-03-29 19:42:06,144 INFO [http-nio-8080-exec-1] o.m.p.mapper.BaseMapper.selectList(BaseMapper.java:128) - ==> Preparing: SELECT id, name FROM user WHERE age > ? OR age < ? ORDER BY age DESC LIMIT ?
2021-03-29 19:42:06,149 INFO [http-nio-8080-exec-1] o.m.p.mapper.BaseMapper.selectList(BaseMapper.java:128) - ==> Parameters: 22(Integer), 35(Integer), 10(Integer)
```
这里就可以看到完整的 SQL 语句和填充的参数了。
总之,使用 MybatisPlus 打印 SQL 语句并填充参数是非常实用的功能,能够在开发过程中方便我们调试 SQL 语句,定位问题,提高开发效率。
阅读全文