這三天都在搞使用JPA註解替代Hibernate的對應檔,因為包缺少或衝突的問題,總是不成功,今天終於搞定了,特地寫下來分享一下(^-^)。
開發工具:myeclipse7.5
開發環境:JDK1.6,MySQL5.0
使用到架構:spring+Hibernate
(1)使用到的hibernate庫類:hibernate-distribution-3.3.1.GA-dist.zip(在解壓縮的hibernate-distribution-3.3.1.GA目錄中,把hibernate.jar,和librequired下的所用jar包引進到我們項目的lib目錄下)、slf4j- log4j12.jar、Hibernate3.2 Annotations& Entity Manager 以及 Hibernate3.2 Core Liabaries。
添加連結mysql資料庫所需要的包:commons-dbcp.jar、commons-pool.jar、mysql-connector5.1.6.jar
(2)添加對spring的支援。
(3)使用Mysql建立資料庫(我建立的資料庫名為xlob,其中一個表名為user_table(userId,userName))。
(4)建立一個bean(User)
package beans;</p><p>import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;</p><p>@Entity(name="user_table")<br />public class User {</p><p> @Id<br />@GeneratedValue(strategy=GenerationType.IDENTITY)<br />int userId=0;<br /> @Column(name="userName")<br /> String userName="";<br />/**<br /> * @return the userId<br /> */<br />public int getUserId() {<br />return userId;<br />}<br />/**<br /> * @return the userName<br /> */<br />public String getUserName() {<br />return userName;<br />}<br />/**<br /> * @param userId the userId to set<br /> */<br />public void setUserId(int userId) {<br />this.userId = userId;<br />}<br />/**<br /> * @param userName the userName to set<br /> */<br />public void setUserName(String userName) {<br />this.userName = userName;<br />}<br />}
(5)建立dao(UserDao)
import java.util.List;</p><p>import org.springframework.orm.hibernate3.support.HibernateDaoSupport;</p><p>import beans.User;</p><p>public class UserDao extends HibernateDaoSupport {</p><p>public UserDao() {<br />// TODO Auto-generated constructor stub<br />}<br />public User getUser(int id){<br />return (User)getHibernateTemplate().get(User.class, id);</p><p>}<br />public void saveUser(User user) {<br />getHibernateTemplate().save(user);</p><p>}<br />public List<User>getUserByName(String name){<br />return getHibernateTemplate().find("from beans.User where user_name=? ",name);<br />}<br />}
(6)編寫設定檔(為了可以重用,分成四個檔案)
- mysqlconfig.properties(外部屬性檔案,配置連結參數)
mysql.driverClassName=com.mysql.jdbc.Driver<br />mysql.url=jdbc:mysql://localhost:3306/xlob<br />mysql.username=root<br />mysql.password=root<br />mysql.mappingDirectoryLocations=conf/<br />mysql.dialect=org.hibernate.dialect.MySQLDialect
- mysql-config.xmll(配置資料來源、事物以)
<bean</p><p>class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><br /><property name="locations"><br /><list><br /><value>classpath:conf/mysqlconfig.properties<br /></value><br /></list><br /></property><br /><property name="fileEncoding" value="utf-8"></property><br /></bean></p><p><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><br /><property name="driverClassName" value="${mysql.driverClassName}"></property><br /><property name="url" value="${mysql.url}"></property><br /><property name="username" value="${mysql.username}"></property><br /><property name="password" value="${mysql.username}"></property><br /></bean></p><p><bean id="sessionFactory"<br />class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><br /><property name="dataSource" ref="dataSource"></property><br /><property name="annotatedClasses"><br /><list><br /><value>beans.User</value><br /></list><br /></property></p><p></bean></p><p><bean id="hibernatejdbcTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><br /><property name="sessionFactory" ref="sessionFactory"></property><br /></bean></p><p>
</p><p><bean id="transactionManager"<br />class="org.springframework.orm.hibernate3.HibernateTransactionManager"><br /><property name="sessionFactory" ref="sessionFactory" /><br /></bean><br /><bean id="txBase"<br />class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"<br />lazy-init="true" abstract="true"><br /><!-- 目標為類而不是介面 --><br /><property name="proxyTargetClass" value="true"></property><br /><!-- 配置交易管理員 --><br /><property name="transactionManager" ref="transactionManager" /><br /><!-- 配置事務屬性 --><br /><property name="transactionAttributes"><br /><props><br /><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><br /><prop key="load*">PROPAGATION_REQUIRED,readOnly</prop><br /><prop key="save*">PROPAGATION_REQUIRED</prop><br /></props><br /></property><br /></bean></p><p>
- beans-config.xml(beans的配置)
<bean id="userDao" class="dao.UserDao"><br /> <property name="hibernateTemplate" ref="hibernatejdbcTemplate"></property><br /> </bean>
(7)最後一步,檢驗正確性
package test;</p><p>import org.springframework.context.ApplicationContext;<br />import org.springframework.context.support.ClassPathXmlApplicationContext;</p><p>import dao.UserDao;</p><p>import beans.User;</p><p>import junit.framework.TestCase;</p><p>public class UserTest extends TestCase {<br />String[] conf={"conf/beans-config.xml","conf/mysql-config.xml","conf/tx-config.xml"};<br /> ApplicationContext tcx=new ClassPathXmlApplicationContext(conf);<br /> UserDao userDao=(UserDao)tcx.getBean("userDao");</p><p>public void testGetUser() {<br />User user=userDao.getUser(1);</p><p>assertEquals("gaoqicheng",user.getUserName());<br />}
其實,如果添加到hibernate支援包正確,相信剩下的就會比較容易,很快就可以建立成功,如果缺少了必須的包或添加了相衝突的包,後果就像本人,花費了幾天的精力去探索,希望可以幫到各位!