主要思想:1.自定义注解,标识实体和字段,填写字段类型、备注等信息 2.实现切面,动态拼接sql,执行更新数据库(Mybatis/Hibernat/Jdbc)操作。3.添加启动器,只在项目启动时执行一次。
功能上 类似于SpringData JPA的自动更新、校验数据库
javax.servlet.ServletContextListener
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
logger.info("hibernate.hbm2ddl.auto:"+systemService.getHibernate_hbm2ddl_auto());
if (!"none".equals(systemService.getHibernate_hbm2ddl_auto())) {
long a= DateUtils.getMillis();
SessionFactory sessionFactory = (SessionFactory) webApplicationContext.getBean("sessionFactory");
JdbcTemplate jdbcTemplate = (JdbcTemplate) webApplicationContext.getBean("jdbcTemplate");
Map<String, ClassMetadata> map= sessionFactory.getAllClassMetadata();
logger.info("处理数据库字段类型长度备注开始,预计耗时 "+map.size()*5236+"ms");
for (int i = 0; i < map.size(); i++) {
System.out.print("-");
}
System.out.println();
for(Entry<String, ClassMetadata> entry:map.entrySet()){
ArrayList<String> arrayList=new ArrayList<String>();
ClassMetadata classMetadata=entry.getValue();
String[] propertyNames= classMetadata.getPropertyNames();
Map<String, String> propertyNameMap=new HashMap