Hibernate annotationlarını kullanarak pojo'larınızı oluşturduysanızve projenizde Spring frameworkten faydalanıyorsanız aşağıdaki class'ı kullanarak veritabanınızdaki tabloları kolaylıkla kaldırıp yeniden yaratabilirsiniz.
import java.lang.reflect.Field;
import javax.sql.DataSource;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
public class DropAndCreateTables {
public static void main(String [] args){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {
"classpath:context/annotationBasedContext.xml", "classpath:context/dao.xml" });
LocalSessionFactoryBean localSessionFactoryBean =(LocalSessionFactoryBean) context.getBean("&baseSessionFactory");
org.hibernate.cfg.Configuration configuration = localSessionFactoryBean.getConfiguration();
try {
Field declaredField =LocalSessionFactoryBean.class.getDeclaredField("configTimeDataSourceHolder");
declaredField.setAccessible(true);
ThreadLocal tl = (ThreadLocal) (declaredField.get(null));
tl.set((DataSource) context.getBean("dataSource"));
} catch (Throwable e) {
e.printStackTrace();
}
SchemaExport export = new SchemaExport(configuration);
export.setOutputFile("exportdb.ddl");
export.setDelimiter(";");
export.create(true, true);
}
}
Class'ın içinde kullanılan annotationBasedContext.xml projenizin spring konfigürasyon dosyası. dao.xml dosyası ise veritabanı bağlantı parametreleri ve ayarlarının tutulduğu xml doyasıdır.
*********************************dao.xml **********************************
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="baseSessionFactory" />
</property>
</bean>
<bean id="baseSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="configLocation" value="${hibernate.config.file}"/>
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@${database.url}"></property>
<property name="properties">
<props>
<prop key="c3p0.acquire_increment">1</prop>
<prop key="c3p0.idle_test_period">100</prop>
<prop key="c3p0.max_size">30</prop>
<prop key="c3p0.min_size">10</prop>
<prop key="c3p0.max_statements">100</prop>
<prop key="c3p0.timeout">180</prop>
<prop key="user">${database.user}</prop>
<prop key="password">${database.password}</prop>
</props>
</property>
<property name="maxPoolSize" value="100" />
<property name="initialPoolSize" value="2" />
<property name="minPoolSize" value="1" />
<property name="maxStatements" value="200" />
<property name="maxIdleTime" value="300" />
<property name="acquireIncrement" value="10" />
<property name="unreturnedConnectionTimeout" value="240" />
<property name="maxConnectionAge" value="240" />
</bean>
</beans>
**************************annotationBasedContext.xml *******************************
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
<context:annotation-config />
<context:component-scan base-package="com.akgun.akris" />
<context:property-placeholder location="classpath:/configuration/jdbc.properties" />
<aop:aspectj-autoproxy />
<bean id="contextApplicationContextProvider" class="com.akgun.akris.context.ApplicationContextProvider"></bean>
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
</beans>
Bu xml dosyaları sizin projenizin ayarlarına göre farklılık gösterebilir. Örnek olması açısından paylaşmak istedim.
Benim işlerimi çok kolaylaştırmıştır bu class umarım herkese faydalı olur...
Hiç yorum yok:
Yorum Gönder