中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~mybatis統一處(chu)理(li)公有(you)字段

對于實體中包含有公共字段,像create_at,create_time,update_at,update_time來說,我們沒有必要在每個實體的crud操作中復制同樣的代碼,這樣代碼的味道很壞,我們應該使用mybatis的攔截器機制,將公共字段統一處理;當然mybatis-puls在實現上更加優雅,它幫我們封裝了MetaObjectHandler接口,我們可以重寫insertFillupdateFill來完成公共字段的統一填充,詳細可看我這篇文章《springboot~MyBatisPlus中使用@TableField完成字段自動填充》。

mybatis中的實現

  • 需(xu)要實(shi)現org.apache.ibatis.plugin.Interceptor接口(kou)

  • 在intercept方法中實現(xian)業(ye)務核心邏輯

  • 在SqlSessionFactory中注冊(ce)你的intercept類

  • 攔截器代碼

@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
public class FillCreateAndUpdateFieldInterceptor implements Interceptor {

	static final Logger logger = LoggerFactory.getLogger(FillCreateAndUpdateFieldInterceptor.class);

	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		Object[] args = invocation.getArgs();
		MappedStatement ms = (MappedStatement) args[0];
		Object parameter = args[1];
		if (ms.getId().contains("insert") || ms.getId().contains("update")) {
			if (SecurityUtils.getAuthentication() != null) {

				if (parameter instanceof BaseEntity) {
					BaseEntity entity = (BaseEntity) parameter;
					if (ms.getId().contains("insert")) {
						entity.setCreateBy(SecurityUtils.getAuthentication().getName());
						entity.setCreateTime(new Date());
					}
					entity.setUpdateBy(SecurityUtils.getAuthentication().getName());
					entity.setUpdateTime(new Date());

				}
		 }
	}
}
  • 自定義SqlSessionFactory的bean
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
	String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
	String mapperLocations = env.getProperty("mybatis.mapperLocations");
	String configLocation = env.getProperty("mybatis.configLocation");
	typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
	VFS.addImplClass(SpringBootVFS.class);

	final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
	sessionFactory.setDataSource(dataSource);
	sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
	sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
	sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
	SqlSessionFactory result = sessionFactory.getObject();

	// 注冊自定義攔截器
	result.getConfiguration().addInterceptor(new FillCreateAndUpdateFieldInterceptor());
	return result;
}

通(tong)過上(shang)面的(de)代碼,我(wo)們(men)就完成了公共字段的(de)統一處理。

posted @ 2024-04-08 13:06  張占嶺  閱讀(449)  評論(0)    收藏  舉報