实现自己的扫描hibernate 标签类
来源:互联网 发布:不需要交钱的网络兼职 编辑:程序博客网 时间:2024/06/05 08:52
import java.io.IOException;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.List;import javax.persistence.Entity;import org.hibernate.cfg.AnnotationConfiguration;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;/** * 自动扫描Entity * @author Administrator * */public class ScanAnnotationSessionFactoryBean extends org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean { public ScanAnnotationSessionFactoryBean() { } private List scanAnnotatedClasses = new ArrayList(); public void setAnnotatedScanPackages(String[] packages) { for (String packageName : packages) { scanAnnotatedClasses.addAll(getClasses(packageName)); } } @Override protected void postProcessAnnotationConfiguration( AnnotationConfiguration config) { for (int i = 0; i < this.scanAnnotatedClasses.size(); i++) { config.addAnnotatedClass((Class) scanAnnotatedClasses.get(i)); } } private List getClasses(String packageName) { ResourcePatternResolver rl = new PathMatchingResourcePatternResolver(); List result = new ArrayList(); try { String packagePart = packageName.replace('.', '/'); String classPattern = "classpath*:/" + packagePart + "/**/*.class"; Resource[] resources = rl.getResources(classPattern); for (int i = 0; i < resources.length; i++) { Resource resource = resources[i]; String fileName = resource.getURL().toString(); String className = fileName.substring( fileName.indexOf(packagePart.substring(0, packagePart .indexOf('*'))), fileName.length() - ".class".length()) .replace('/', '.'); Class type = Class.forName(className); if (isEntityClass(type)) result.add(type); } } catch (IOException e) { fatal(e); return null; } catch (ClassNotFoundException e) { fatal(e); return null; } return result; } private boolean isEntityClass(Class type) { if (type.isAnnotationPresent(Entity.class) && !type.isInterface() && !isAbstract(type) && !type.isAnonymousClass() && !type.isMemberClass()) { return true; } return false; } boolean isAbstract(Class type) { return (type.getModifiers() ^ Modifier.ABSTRACT) == 0; } private void fatal(Throwable e) { throw new IllegalStateException("scan hibernate annotation error", e); }
}
spring配置文件中如下配置:
<bean id="sessionFactory" class="com.ether.common.domain.ScanAnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <!-- annotatedScanPackages可以自动搜索某个package的全部标记@Entity class --> <property name="annotatedScanPackages"> <list> <value>com.ether.**.model</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=${hibernate.dialect} hibernate.query.substitutions=true 'Y', false 'N' hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=true hibernate.show_sql=${hibernate.format_sql} hibernate.format_sql=${hibernate.show_sql} hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto} hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider hibernate.jdbc.batch_size=50 </value> </property> </bean>
- 实现自己的扫描hibernate 标签类
- 利用Spring实现自己的类扫描机制
- hibernate对jpa的支持,自己实现AnnotationSessionFactoryBean,可以对jpa标签进行识别
- 自己实现spring的注解扫描处理功能
- 自己写的一个hibernate简单实现
- iOS自己实现二维码生成与扫描
- 扩展spring 的 xml schema,实现自己的标签
- hibernate 配置 扫描实体类
- Java类自动扫描功能的实现
- 目录扫描的实现
- 用自己的方式去实现Hibernate思想
- 扩展hibernate用自己的集合类
- [Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同
- Spring 对hibernate事务处理的实现过程(1) hibernate 自己是怎么做的
- 开发自己的xDoclet标签
- 定制自己的xDoclet标签
- 定制自己的xDoclet标签
- 定制自己的xDoclet标签
- 15.输入一颗二元查找树,将该树转换为它的镜像
- ZOJ 3656
- JavaScript 事件
- android的进度条使用
- oracle的TM锁、TX锁
- 实现自己的扫描hibernate 标签类
- vc链接静态库的时候要注意的问题
- 陕西大荔一名警察参与绑架勒索162万后仍撕票-绑架-撕票-民警
- windows 性能计数器
- UDID入门,了解Apple的数据外泄状况
- Caliburn第3部分 事件 参数
- frame,iframe和frameset简单介绍
- 【php】HTTP消息头中的“Cache-control”
- 关于QscrollArea的使用