spring和hibernate的一个整合

来源:互联网 发布:俄罗斯方舟 知乎 编辑:程序博客网 时间:2024/06/15 18:20

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

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);}@Overridepublic void deleteNews(int id) {   this.getHibernateTemplate().delete(findNewsById(id));}@Overridepublic void modifyNews(News news) {this.getHibernateTemplate().update(news);}@Overridepublic News findNewsById(int id) {return (News)this.getHibernateTemplate().get(News.class,id);}@Overridepublic 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));}@Overridepublic void modifyReview(Review review) {this.getHibernateTemplate().update(review);}@Overridepublic Review findReviewById(int id) {return (Review)this.getHibernateTemplate().get(Review.class, id);}@Overridepublic 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>