永久免费的网站,中国新农村建设网站,网页版wordpress教程,学校网站怎么做的好文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是 settings 配置下的属性#xff0c;该属性是指定发现自动映射目标未知列#xff08;或未知属性类型#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应… 文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是 settings 配置下的属性该属性是指定发现自动映射目标未知列或未知属性类型的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应属性的类型不匹配时会产生什么样的行为。 autoMappingUnknownColumnBehavior属性可以指定当映射失败时会产生三种行为默认情况配置的是NONE
NONE: 不做任何反应WARNING: 输出警告日志‘org.apache.ibatis.session.AutoMappingUnknownColumnBehavior’ 的日志等级必须设置为 WARNFAILING: 映射失败 (抛出 SqlSessionException)。
下面分别看下三种情况
1. NONE
假设java类User中只有id和name两个属性而对应数据库表user有三个字段分别为ID、NAME、AGE库表和java对象不能完全匹配看下会发生什么
public class User {private int id;private String name;} user表 在mybatis配置文件配置autoMappingUnknownColumnBehavior的值为NONE
settingssetting namelogImpl valueSTDOUT_LOGGING/setting nameautoMappingUnknownColumnBehavior valueNONE/
/settings下面为mapper文件中对应的SQL
select idselectOne parameterTypeint resultTypecom.lzj.bean.Userselect * from user where id#{id}
/select执行这个SQL输出结果如下所示输出的id2name‘xiaoli’库表中的AGE字段没有对应的映射属性丢弃掉了程序也不会报错。
Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 1713847712.Preparing: select * from user where id? Parameters: 2(Integer)Columns: id, name, ageRow: 2, xiaoli, 26Total: 1
输出结果User{id2, namexiaoli}2. WARNING
下面看下第二种情况当autoMappingUnknownColumnBehavior取值WARNING时修改mybatis的 settings 配置如下所示
settingssetting namelogImpl valueSTDOUT_LOGGING/setting nameautoMappingUnknownColumnBehavior valueWARNING/
/settings重新执行上面的SQL输出结果如下所示发现也能正常输出User{id2, name‘xiaoli’}库表user的AGE列没有找到对应的java对象user的属性丢弃掉了程序也没有报错但在自动映射后打印出了下面一条警告“Unknown column is detected on ‘com.lzj.dao.UserDao.selectOne’ auto-mapping. Mapping parameters are [columnNameage,propertyNameage,propertyTypenull]”。所以当autoMappingUnknownColumnBehavior取值WARNING时也不会报错但会打印出警告设置的日志级别一定要小于等于warn。
Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 2070438137.Preparing: select * from user where id? Parameters: 2(Integer)Columns: id, name, ageRow: 2, xiaoli, 26
Unknown column is detected on com.lzj.dao.UserDao.selectOne auto-mapping. Mapping parameters are [columnNameage,propertyNameage,propertyTypenull]Total: 1
输出结果User{id2, namexiaoli}3. FAILING
下面看下最后一种当autoMappingUnknownColumnBehavior取值FAILING时看下如果没有完全映射上会发生情况 修改mybatis配置文件如下所示
settingssetting namelogImpl valueSTDOUT_LOGGING/setting nameautoMappingUnknownColumnBehavior valueFAILING/
/settings然后重新执行上面的SQL输出结果如下所示程序直接抛异常了说明当库表中列不能映射到java对象中属性上程序抛异常处理。
Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Cache Hit Ratio [com.lzj.dao.UserDao]: 0.0
Opening JDBC Connection
Created connection 1617550648.Preparing: select * from user where id? Parameters: 2(Integer)Columns: id, name, ageRow: 2, xiaoli, 26
Exception in thread main org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.session.SqlSessionException: Unknown column is detected on com.lzj.dao.UserDao.selectOne auto-mapping. Mapping parameters are [columnNameage,propertyNameage,propertyTypenull]
### The error may exist in mapper/UserMapper.xml
### The error may involve com.lzj.dao.UserDao.selectOne
### The error occurred while handling results