Get the App
SLTechnology News&Howtos  ›  Internet Technology  › 

The case of the key value when mybatis returns Map in springboot

Shulou Source: shulou.com Published: 2022-06-03 03:40:12 10月04日 Update

In order to unify the case inconsistency of key values returned by different databases, we customize ObjectWrapperFactory to handle it uniformly.

1, first customize the MapWrapper

/ * convert all key of Map to lowercase * * / public class MapKeyLowerWrapper extends MapWrapper {public MapKeyLowerWrapper (MetaObject metaObject, Map map) {super (metaObject, map);} @ Override public String findProperty (String name, boolean useCamelCaseMapping) {return name==null? ": name.toLowerCase ();}}

2, Custom ObjectWrapperFactory

Default ObjectWrapperFactory for mybatis

Public class DefaultObjectWrapperFactory implements ObjectWrapperFactory {public boolean hasWrapperFor (Object object) {return false;} public ObjectWrapper getWrapperFor (MetaObject metaObject, Object object) {throw new ReflectionException ("The DefaultObjectWrapperFactory should never be called to provide an ObjectWrapper.");}}

Our customization is as follows:

Public class MapWrapperFactory implements ObjectWrapperFactory {@ Override public boolean hasWrapperFor (Object object) {return object! = null & & object instanceof Map;} @ Override public ObjectWrapper getWrapperFor (MetaObject metaObject, Object object) {return new MapKeyLowerWrapper (metaObject, (Map) object);}

3. Add the configuration of MapWrapperFactory to the configuration of mybatis

@ Bean (name = "sqlSessionFactory") @ ConditionalOnBean (name = "dataSource") public SqlSessionFactory sqlSessionFactoryBean (@ Qualifier ("dataSource") DataSource dataSource) {SqlSessionFactoryBean bean = new SqlSessionFactoryBean (); bean.setObjectWrapperFactory (new MapWrapperFactory ()); bean.setDataSource (dataSource); / / add XML directory ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver () Try {bean.setMapperLocations (resolver.getResources ("classpath*:com/ultrapower/ioss/**/mapper/**/*.xml")); return bean.getObject ();} catch (Exception e) {e.printStackTrace (); throw new RuntimeException (e) } @ Bean ("sqlSessionTemplate") @ ConditionalOnBean (name = "sqlSessionFactory") public SqlSessionTemplate sqlSessionTemplate (@ Qualifier ("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate (sqlSessionFactory);} @ ConditionalOnBean (name = "dataSource") @ Bean (name = "transactionManager") public PlatformTransactionManager transactionManager (@ Qualifier ("dataSource") DataSource dataSource) {DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager (dataSource); return dataSourceTransactionManager;}

Tags: Unify configure size handle different consistent lowercase data database directory problem Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Linux Shulou Technology MariaDB vpn Shulou Tech Info