原先以Hibernate建立好Java專案,
因為有導入Spring的需求,所以要改成Spring框架,怎麼做呢?
- 建立 Maven Web Project DataSource SQLServer 連線
# 檔案位置: webapp > META-INF > context.xml <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/servdb" type="javax.sql.DataSource" //name自己取名 auth="Container" username="sa" password="passw0rd" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=servdb"> </Resource> </Context>
- 建立 Maven Web Project
web.xml
resource-ref# 檔案位置: webapp > WEB-INF > web.xml <resource-ref> <description>JNDI DataSource </description> <res-ref-name>jdbc/servdb</res-ref-name> //要跟name一樣 <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
- Maven
pom.xml
需要加入 spring-webmvc/spring-tx/spring-jdbc/spring-orm 四個dependency# 檔案位置: pom.xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> //使用網頁一定要引入spring-webmvc <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> //為了能使用<tx:annotation-driven/> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> //為了連動資料庫 <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> //為了能使<property name="packagesToScan">取代既有的hibernate.cfg.xml <version>5.2.0.RELEASE</version> </dependency>
- 建立 Maven Web Project
web.xml
ContextLoaderListener# 檔案位置: webapp > WEB-INF > web.xml <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> # Bean 元件組態檔如設檔名為 applicationContext.xml (預設)則可以省略 <context-parm></context-parm> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>
- 建立 Spring 所支援的 DataSource
# 檔案位置: webapp > WEB-INF > applicationContext.xml# 此為需掃瞄的 Annotation 設定 <context:component-scan base-package="model"/> //有@Repository標籤的檔案位在哪裡 # Spring 提供 JndiObjectFactoryBean 工廠建立 dataSource 物件供開發者建立連線 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:/comp/env/jdbc/servdb"/> //jdbc/servdb </bean>
- 建立 hibernate.cfg.xml 基本設定
# 檔案位置: src > main > java > Hibernate.cfg.xml <property name="hibernate.show_sql">true</property> //console顯示sql語法 <property name="hibernate.format_sql">true</property> //console顯示排列後之sql語法
- 建立 Spring 所支援的 SessionFactory
# 檔案位置: webapp > WEB-INF > applicationContext.xml# 此為需掃瞄的 Annotation 設定 <context:component-scan base-package="model"/> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:/comp/env/jdbc/servdb"/> </bean> //此行以上在步驟5講過 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan" value="model"/> //spring-orm <property name="configLocation" value="classpath:applicationContext.xml"/></bean> <bean id="transactionManager" //可透過@Transactional將方法交給Spring控管,成功自動commit,失敗自動rollback class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven/> //spring-tx,@Transactional必搭配才生效
以上,感謝大神陳嘉仁提供教學(原檔在github),整理後發佈。
沒有留言:
張貼留言