spring和hibernate的一个整合

整合的这个小案例是采用贫血模式设计的。

com.huxin.patternenemia.domain

package com.huxin.patternenemia.domain;
import java.util.Set;
public class User {
	/*
	 *  user_id int(3) primary key,
        user_name varchar(10), 
        user_password varchar(20)
	 */
	private  int userId;
	private String userName;
	private String password;
	private Set News;
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Set getNews() {
		return News;
	}
	public void setNews(Set news) {
		News = news;
	}
}


 

<?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="com.huxin.patternenemia.domain.News" table="t_news">
		<id name="newsId">
			<generator class="native"/>
		</id>
		<property name="newsTitle"/>
		<property name="content"/>
		<property name="newsPostDate"/>
		<many-to-one name="user" column="user_id"/>
		<set name="reviews" inverse="true">
		    <key column="news_id" not-null="true"/>
		    <one-to-many class="com.huxin.patternenemia.domain.Review"/>
		</set>
	</class>
</hibernate-mapping>


 

package com.huxin.patternenemia.domain;
import java.util.Date;
import java.util.Set;
public class News {
	/*
	 * news_id int(3) not null primary key auto_increment,
      news_title varchar(20) not null,
      news_content varchar(50),
      news_postDate Date, 
      fk1_user_
	 */
	private  int newsId;
	private  String newsTitle;
	private  String content;
	private  Date  newsPostDate;
	private  User user;
	private Set reviews;
	public int getNewsId() {
		return newsId;
	}
	public void setNewsId(int newsId) {
		this.newsId = newsId;
	}
	public String getNewsTitle() {
		return newsTitle;
	}
	public void setNewsTitle(String newsTitle) {
		this.newsTitle = newsTitle;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Date getNewsPostDate() {
		return newsPostDate;
	}
	public void setNewsPostDate(Date newsPostDate) {
		this.newsPostDate = newsPostDate;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
//	@Override
//	public int hashCode() {
//		return this.getUser().hashCode()+ this.getNewsPostDate().hashCode() * 29;
//	}
//	public boolean equals(Object obj) {
//	    if(this == obj){
//	    	return true;
//	    }
//	    if(obj!= null && obj.getClass()==News.class){
//	    	News news = (News)obj;
//	    	return this.getUser().equals(news.getUser()) &&this.getNewsPostDate().equals(news.getNewsPostDate());
//	    }
//	    return false;
//	}
	public Set getReviews() {
		return reviews;
	}
	public void setReviews(Set reviews) {
		this.reviews = reviews;
	}
}


 

<?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="com.huxin.patternenemia.domain.News" table="t_news">
		<id name="newsId">
			<generator class="native"/>
		</id>
		<property name="newsTitle"/>
		<property name="content"/>
		<property name="newsPostDate"/>
		<many-to-one name="user" column="user_id"/>
		<set name="reviews" inverse="true">
		    <key column="news_id" not-null="true"/>
		    <one-to-many class="com.huxin.patternenemia.domain.Review"/>
		</set>
	</class>
</hibernate-mapping>


 

package com.huxin.patternenemia.domain;

import java.util.Date;

public class Review {
	/*
	 * review_id int(3) primary key,
       review_content varchar(10), 
       review_reDate Date,
       fk1_news_id int(3),
       
	 */
	private int reviewId;
	private String  reviewContent;
	private Date reviewReDate;
    private News news;
	public int getReviewId() {
		return reviewId;
	}
	public void setReviewId(int reviewId) {
		this.reviewId = reviewId;
	}
	public String getReviewContent() {
		return reviewContent;
	}
	public void setReviewContent(String reviewContent) {
		this.reviewContent = reviewContent;
	}
	public Date getReviewReDate() {
		return reviewReDate;
	}
	public void setReviewReDate(Date reviewReDate) {
		this.reviewReDate = reviewReDate;
	}
	public News getNews() {
		return news;
	}
	public void setNews(News news) {
		this.news = news;
	}
}


 

<?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="com.huxin.patternenemia.domain.Review" table="t_review">
		<id name="reviewId">
			<generator class="native"/>
		</id>
		<property name="reviewContent"/>
		<property name="reviewReDate"/>
		<many-to-one name="news" column="news_id" not-null="true"/>
	</class>
</hibernate-mapping>

 

-----------dao就不写了

com.huxin.patternenemia.dao.impl

package com.huxin.patternenemia.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.huxin.patternenemia.dao.UserDao;
import com.huxin.patternenemia.domain.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

	public void addUser(User user) {
		 this.getHibernateTemplate().save(user);
	}

	public void deleteUser(int id) {
		 this.getHibernateTemplate().delete(findUserById(id));
	}

	public void modifyUser(UserDao user) {
		this.getHibernateTemplate().update(user);
	}

	public User findUserById(int id) {	
		return (User)this.getHibernateTemplate().get(User.class, id);
	}

	public List findAllUser() {
		return this.getHibernateTemplate().find("from User");
	}
}


 

package com.huxin.patternenemia.dao.impl;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.huxin.patternenemia.dao.NewsDao;
import com.huxin.patternenemia.domain.News;

public class NewsDaoImpl extends HibernateDaoSupport implements NewsDao {

	public void addNews(News news) {
	  this.getHibernateTemplate().save(news);
	}

	@Override
	public void deleteNews(int id) {
	   this.getHibernateTemplate().delete(findNewsById(id));
	}

	@Override
	public void modifyNews(News news) {
		this.getHibernateTemplate().update(news);
	}

	@Override
	public News findNewsById(int id) {
		return (News)this.getHibernateTemplate().get(News.class,id);
	}

	@Override
	public List findAllNews() {		
		return this.getHibernateTemplate().find("from News");
	}

}


 

package com.huxin.patternenemia.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.huxin.patternenemia.dao.ReviewDao;
import com.huxin.patternenemia.domain.News;
import com.huxin.patternenemia.domain.Review;

public class ReviewDaoImpl extends HibernateDaoSupport implements ReviewDao {

	public void addReview(Review review) {
         this.getHibernateTemplate().save(review);
	}
	public void deleteReview(int id) {
		this.getHibernateTemplate().delete(findReviewById(id));
	}
	@Override
	public void modifyReview(Review review) {
		this.getHibernateTemplate().update(review);
	}
	@Override
	public Review findReviewById(int id) {
		return (Review)this.getHibernateTemplate().get(Review.class, id);
	}

	@Override
	public List findAllReview() {
		return this.getHibernateTemplate().find("from Review");
	}
}

 

com.huxin.patternenemia.service.impl

package com.huxin.patternenemia.service.impl;

import java.util.Date;

import com.huxin.patternenemia.dao.NewsDao;
import com.huxin.patternenemia.dao.ReviewDao;
import com.huxin.patternenemia.dao.UserDao;
import com.huxin.patternenemia.domain.News;
import com.huxin.patternenemia.domain.Review;
import com.huxin.patternenemia.service.Manager;

public class ManagerImpl implements Manager {
	private NewsDao newsDao;
	private ReviewDao reviewDao;
	private UserDao userDao;

	public void setNewsDao(NewsDao newsDao) {
		this.newsDao = newsDao;
	}

	public void setReviewDao(ReviewDao reviewDao) {
		this.reviewDao = reviewDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void addReview(int id, String content) {
		
		News news = newsDao.findNewsById(id);
		Review review = new Review();
		review.setNews(news);
		review.setReviewContent(content);
		review.setReviewReDate(new Date());
		reviewDao.addReview(review);
		System.out.println("添加成功");
	}
}


test-------------------------

package com.huxin.patternenemia.test;

import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.huxin.patternenemia.dao.NewsDao;
import com.huxin.patternenemia.dao.ReviewDao;
import com.huxin.patternenemia.dao.UserDao;
import com.huxin.patternenemia.domain.News;
import com.huxin.patternenemia.domain.User;
import com.huxin.patternenemia.service.Manager;
public class Test extends TestCase {
    public void addNewsTest(){
    	ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-*.xml");
    	
    	UserDao userDao =  ac.getBean("userDao", UserDao.class);
    	
    	User user = new User();
    	user.setUserName("胡鑫");
    	user.setPassword("123");
    	userDao.addUser(user);
    	
    	NewsDao newsDao = ac.getBean("newsDao", NewsDao.class);
    	News news1 = new News();
    	news1.setNewsTitle("主题一");
    	news1.setUser(user);
    	news1.setNewsPostDate(new Date());
    	news1.setContent("内容一");
    	newsDao.addNews(news1);
    	
      	News news2 = new News();
    	news2.setNewsTitle("主题二");
    	news2.setUser(user);
    	news2.setNewsPostDate(new Date());
    	news2.setContent("内容二");
    	newsDao.addNews(news2);
    	
//		Manager manager = ac.getBean("Manager", Manager.class);
//		manager.addReview(1, "我回复了第一条");
//        System.out.println("插入成功");
    }
    public void loadTest(){
	    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-*.xml");
    	UserDao userDao =  ac.getBean("userDao", UserDao.class);
    	User user = (User)userDao.findUserById(1);
        System.out.println(user.getUserName());  
        for(Iterator i = user.getNews().iterator();i.hasNext();){
        	News news = (News)i.next();
        	System.out.println(news.getContent());
        }
    }  
    
    public void addReviewTest(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-*.xml");
        Manager manager =  ac.getBean("manager", Manager.class);
        manager.addReview(4,"我是主题四的内容");
    }
}

 

spring的配置

<?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-3.0.xsd">
              
     <bean id="newsDao"  class="com.huxin.patternenemia.dao.impl.NewsDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
     </bean>
     
     <bean id="reviewDao"  class="com.huxin.patternenemia.dao.impl.ReviewDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
     </bean>
     
     <bean id="userDao"  class="com.huxin.patternenemia.dao.impl.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
     </bean>
    
     <bean id="manager"  class="com.huxin.patternenemia.service.impl.ManagerImpl">
        <property name="userDao" ref="userDao"/>
        <property name="newsDao" ref="newsDao"/>
        <property name="reviewDao" ref="reviewDao"/>
     </bean>
</beans>


 

<?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:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
           
	<!-- 配置SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
	</bean>
	
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory"/>			
		</property>
	</bean>
	
	<!-- 那些类那些方法使用事务 -->
	<aop:config>
		<aop:pointcut id="allManagerMethod" expression="execution(* com.huxin.patternenemia.dao.impl.*.*(..))"/>
		<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
	</aop:config>
	
	<!-- 事务的传播特性 -->	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="del*" propagation="REQUIRED"/>
			<tx:method name="modify*" propagation="REQUIRED"/>
			<tx:method name="*" propagation="REQUIRED" read-only="true"/>
		</tx:attributes>
	</tx:advice>
</beans>


 

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_enemia3</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">system</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 
		     这句话已经没有什么用了,在集成的时候.
		     主要是使用一个session的变量,防止开启多个session
		    <property name="hibernate.current_session_context_class">thread</property>
		-->
		<mapping resource="com/huxin/patternenemia/domain/News.hbm.xml"/>
		<mapping resource="com/huxin/patternenemia/domain/Review.hbm.xml"/>
		<mapping resource="com/huxin/patternenemia/domain/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>




 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值