【Spring 数据访问终篇】Spring + Hibernate + Mysql
說來慚愧,數(shù)月沒有更新博客,今天帶來spring訪問數(shù)據(jù)的最終篇,spring + hibernate。
本篇文章將用maven創(chuàng)建一個簡答的java項目,并結(jié)合spring框架中的hibernate對數(shù)據(jù)進行增刪改查的操作,數(shù)據(jù)庫為mysql。
1.項目最終的目錄結(jié)構(gòu)
2.在數(shù)據(jù)庫中創(chuàng)建如下一個名為stock的表,sql語法如下:
CREATE TABLE stock ( STOCK_ID int(10) unsigned NOT NULL AUTO_INCREMENT, STOCK_NAME varchar(10) NOT NULL, STOCK_CODE varchar(10) NOT NULL, PRIMARY KEY(STOCK_ID) USING BTREE, UNIQUE KEY UNI_STOCK_NAME (STOCK_NAME), UNIQUE KEY UNI_STOCK_ID (STOCK_CODE) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
4.實體類 與 dao層
Stock 類與數(shù)據(jù)庫中stock表建立對應(yīng)關(guān)系
package org.thinkingingis.stock.model;import java.io.Serializable;public class Stock implements Serializable {public static final long serialVersionUID = 1L;private Long stockId;private String stockCode;private String stockName;public Long getStockId() {return stockId;}public void setStockId(Long stockId) {this.stockId = stockId;}public String getStockCode() {return stockCode;}public void setStockCode(String stockCode) {this.stockCode = stockCode;}public String getStockName() {return stockName;}public void setStockName(String stockName) {this.stockName = stockName;} }
package org.thinkingingis.stock.bo.impl;import org.thinkingingis.stock.bo.StockBo; import org.thinkingingis.stock.dao.StockDao; import org.thinkingingis.stock.model.Stock;public class StockBoImpl implements StockBo{StockDao stockDao;public void setStockDao(StockDao stockDao){this.stockDao = stockDao;}public void save(Stock stock) {stockDao.save(stock);}public void update(Stock stock) {stockDao.update(stock);}public void delete(Stock stock) {stockDao.delete(stock);}public Stock findByStockCode(String stockCode) {return stockDao.findByStockCode(stockCode);}}
DAO層是數(shù)據(jù)庫訪問層,在本類中完成對數(shù)據(jù)庫的訪問,該類繼承了HibernateDaoSupport,通過getHibernateTemplate()
package org.thinkingingis.stock.dao;import org.thinkingingis.stock.model.Stock;public interface StockDao {void save(Stock stock);void update(Stock stock);void delete(Stock stock);Stock findByStockCode(String stockCode);}
package org.thinkingingis.stock.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.thinkingingis.stock.dao.StockDao; import org.thinkingingis.stock.model.Stock;public class StockDaoImpl extends HibernateDaoSupport implements StockDao {public void save(Stock stock) {getHibernateTemplate().save(stock);}public void update(Stock stock) {getHibernateTemplate().update(stock);}public void delete(Stock stock) {getHibernateTemplate().delete(stock);}public Stock findByStockCode(String stockCode) {List list = getHibernateTemplate().find("from Stock where stockCode = ?", stockCode);return (Stock)list.get(0);}}
5.配置相應(yīng)的資源
首先配置Hibernate的 mapping 文件 Stock.hbm.xml?
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="org.thinkingingis.stock.model.Stock" table="stock"><id name="stockId" type="java.lang.Long"><column name="STOCK_ID" /><generator class="identity" /></id><property name="stockCode" type="string"><column name="STOCK_CODE" length="10" not-null="true" unique="true" /></property><property name="stockName" type="string"><column name="STOCK_NAME" length="10" not-null="true" unique="true" /></property></class> </hibernate-mapping>數(shù)據(jù)庫相關(guān)文件 database.properties jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/springmvcjdbc jdbc.username=root jdbc.password=123456
數(shù)據(jù)源文件DataSource.xml,本文件指定了database.properties中的內(nèi)容 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>properties/database.properties</value></property> </bean><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /> </bean></beans>
Hibernate 相關(guān)的配置文件 Hibernate.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- Hibernate session factory --> <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource"/></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property><property name="mappingResources"><list><value>/hibernate/Stock.hbm.xml</value></list></property></bean> </beans>
Spring bean的配置文件 Stock.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- Stock business object --><bean id="stockBo" class="org.thinkingingis.stock.bo.impl.StockBoImpl" ><property name="stockDao" ref="stockDao" /></bean><!-- Stock Data Access Object --><bean id="stockDao" class="org.thinkingingis.stock.dao.impl.StockDaoImpl" ><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>
接下來需要導(dǎo)入spring bean 的配置文件BeanLocations.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- Database Configuration --><import resource="../database/DataSource.xml"/><import resource="../database/Hibernate.xml"/><!-- Beans Declaration --><import resource="../beans/Stock.xml"/></beans>
(有沒有已經(jīng)被各種xml文件搞得迷糊了呢,哈哈,為以后spring boot 鋪墊一記)
6.運行
當(dāng)配置完上述步驟以后 就可以運行了
package org.thinkingingis.common;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.thinkingingis.stock.bo.StockBo; import org.thinkingingis.stock.model.Stock;public class App {public static void main(String[] args){ApplicationContext context = new ClassPathXmlApplicationContext("spring/config/BeanLocations.xml");StockBo stockBo = (StockBo)context.getBean("stockBo");/** insert **/Stock stock = new Stock();stock.setStockCode("011");stock.setStockName("GIS");stockBo.save(stock);/** select**/Stock stock2 = stockBo.findByStockCode("011");System.out.println(stock2);/**update**/stock2.setStockName("GIS-1");stockBo.update(stock2);/** delete **/stockBo.delete(stock2);System.out.println("all done!");}}7.運行結(jié)果如下:
源碼地址:?點擊打開鏈接?
https://github.com/ThinkingInGIS/SpringHibernateMysql.git
至此,spring與jdbc,jdbcTemplate,hibernate訪問數(shù)據(jù)的方式都以介紹完畢啦。
(如遇到問題,請留言給作者,以便共同探討gis知識。thinkingingis@qq.com)
Wechat公眾號:ThinkingInGIS歡迎大家關(guān)注:)
總結(jié)
以上是生活随笔為你收集整理的【Spring 数据访问终篇】Spring + Hibernate + Mysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 数据访问那些事儿(二)Sp
- 下一篇: inner join 和 exists