整合的这个小案例是采用贫血模式设计的。
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>