开发工具采用MYECLIPS3.6,首先是建立项目,导入STRUTS+HIBERNATE包,然后配置SRC跟目录下的hibernate.cfg.xml.我采用的是MYSQL数据库,所以配置如下:
<hibernate-configuration>
<session-factory>
<!-- properties -->
<property name="connection.username">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/tonnyblog</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="connection.password"></property>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<!-- mapping files -->
<mapping resource="com/tonny/blog/bean/User.hbm.xml"/>
<mapping resource="com/tonny/blog/bean/Item.hbm.xml"/>
<mapping resource="com/tonny/blog/bean/Review.hbm.xml"/>
</session-factory>
</hibernate-configuration>
mapping为JAVABEAN所对应的映射。
下面我们继续HIBERNATE程序的下步编写
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
/**
* Description of the Class
*
* @author tonny
* @created 2004年2月6日
*/
public class HibernateUtil {
private final static SessionFactory sessionFactory;
static {
try {
sessionFactory =
new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Exception building SessionFactory: " + ex.getMessage(),ex);
}
}
private HibernateUtil(){
}
/**
* Description of the Field
*/
private final static ThreadLocal session = new ThreadLocal();
/**
* Description of the Method
*
* @return Description of the Return Value
* @exception HibernateException Description of the Exception
*/
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
/**
* Description of the Method
*
* @exception HibernateException Description of the Exception
*/
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null) {
s.close();
}
}
public static void init(){
}
}
创建sessionFactory
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import com.tonny.blog.dao.hibernate.HibernateUtil;
public class HibernatePlugin implements org.apache.struts.action.PlugIn{
public void init(ActionServlet servlet, ModuleConfig config){
HibernateUtil.init();
}
public void destroy(){
try{
HibernateUtil.closeSession();
}
catch(HibernateException hex){
hex.printStackTrace();
}
}
}
以上为HIBERNATE基本配置,对数据库操作采用DAO模式,增加配置如下:
import com.tonny.blog.dao.hibernate.*;
public class DAOFactory {
private static DAOFactory instance;
public synchronized static DAOFactory getInstance() {
if (instance == null) {
instance = new DAOFactory();
}
return instance;
}
private DAOFactory() {
}
public ItemDAO getItemDAO(){
return new ItemDAOHibernate();
}
public ReviewDAO getReviewDAO(){
return new ReviewDAOHibernate();
}
public UserDAO getUserDAO(){
return new UserDAOHibernate();
}
}
struts.xml增加配置
<controller contentType="text/html" debug="3" locale="true" nocache="true"
processorClass="com.tonny.blog.struts.controller.IndexRequestProcessor"/>
<message-resources parameter="com.tonny.resource"/>
<plug-in className="com.tonny.blog.struts.plugin.HibernatePlugin"/>
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="moduleAware" value="true"/>
<set-property property="definitions-debug" value="0"/>
<set-property property="definitions-parser-details" value="0"/>
<set-property property="definitions-parser-validate" value="false"/>
<set-property property="definitions-config" value="/WEB-INF/title-def.xml"/>
</plug-in>
下面我们定义服务层:
public class ServiceFactory{
private static ServiceFactory instance;
public synchronized static ServiceFactory getInstance() {
if (instance == null) {
instance = new ServiceFactory();
}
return instance;
}
private ServiceFactory(){
}
public IService getService(){
return new ServiceImp();
}
}
import com.tonny.blog.struts.form.*;
import com.tonny.blog.view.*;
import com.tonny.blog.bean.*;
import java.util.*;
import javax.servlet.http.*;
public interface IService{
public UserContainer login(UserForm userForm);
public boolean logout(UserContainer userContainer);
public boolean addBlog(BlogForm blogForm,String filePath);
public boolean removeBlog(Long id);
public boolean addReview(Long topicId,ReviewForm reviewForm);
public boolean updateBlog(Long id,String conten,String topic);
public boolean removeReview(Long id);
public List getItems();
public ItemView getItem(Long id);
public ItemView getEditItem(Long id);
public List search(SearchForm searchForm);
/**
* @param id
* @param userForm
*/
public boolean addUser(UserForm userForm);
}
import com.tonny.blog.struts.form.*;
import com.tonny.blog.view.*;
import com.tonny.blog.dao.*;
import com.tonny.blog.bean.*;
import java.util.*;
import javax.servlet.http.*;
import com.tonny.blog.struts.util.FileUpload;
public class ServiceImp implements IService{
public UserContainer login(UserForm userForm){
UserDAO userDAO=DAOFactory.getInstance().getUserDAO();
User user=userDAO.loadUser(userForm.getName());
if(user==null)return new UserContainer("",false);
if(!user.getPassword().equals(userForm.getPassword()))return new UserContainer("",false);
return new UserContainer(userForm.getName(),true);
}
public boolean logout(UserContainer userContainer){
userContainer.setLogin(false);
userContainer.setName("");
return true;
}
public boolean addBlog(BlogForm blogForm,String path) {
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
Item item=new Item(blogForm.getTopic(),blogForm.getContent(),
FileUpload.upload(blogForm.getFile(),path),new Date());
itemDAO.addItem(item);
return true;
}
public boolean removeBlog(Long id) {
ReviewDAO reviewDAO=DAOFactory.getInstance().getReviewDAO();
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
itemDAO.removeItem(id);
return reviewDAO.removeReviews(id);
}
public boolean addReview(Long topicId,ReviewForm reviewForm){
ReviewDAO reviewDAO=DAOFactory.getInstance().getReviewDAO();
Review review=new Review(reviewForm.getName(),reviewForm.getContent(),
topicId,new Date());
return reviewDAO.addReview(review);
}
public boolean updateBlog(Long id,String content,String topic){
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
Item item=new Item();
item.setId(id);
item.setContent(content);
item.setTopic(topic);
return itemDAO.updatItem(item);
}
public boolean addUser(UserForm userForm){
UserDAO userDAO=(UserDAO) DAOFactory.getInstance().getUserDAO();
User user=new User(userForm.getName(),userForm.getPassword());
return userDAO.addUser(user);
}
public boolean removeReview(Long id){
ReviewDAO reviewDAO=DAOFactory.getInstance().getReviewDAO();
return reviewDAO.removeReview(id);
}
public List getItems(){
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
List items=itemDAO.loadItems();
List itemViews=new ArrayList();
for(Iterator it=items.iterator();it.hasNext();){
Item item=(Item)it.next();
ItemView itemView=new ItemView();
itemView.setContent(item.getContent());
itemView.setDate(item.getDate());
itemView.setFile(item.getFile());
itemView.setId(item.getId());
itemView.setTopic(item.getTopic());
itemViews.add(itemView);
}
return itemViews;
}
public ItemView getEditItem(Long id){
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
Item item=itemDAO.loadItem(id);
ItemView itemView=new ItemView();
itemView.setContent(item.getContent());
itemView.setDate(item.getDate());
itemView.setFile(item.getFile());
itemView.setId(item.getId());
itemView.setTopic(item.getTopic());
return itemView;
}
public List search(SearchForm searchForm) {
ItemDAO itemDAO=DAOFactory.getInstance().getItemDAO();
List items=itemDAO.loadItems(searchForm.getKeyword());
List itemViews=new ArrayList();
for(Iterator it=items.iterator();it.hasNext();){
Item item=(Item)it.next();
ItemView itemView=new ItemView();
itemView.setContent(item.getContent());
itemView.setDate(item.getDate());
itemView.setFile(item.getFile());
itemView.setId(item.getId());
itemView.setTopic(item.getTopic());
itemViews.add(itemView);
}
return itemViews;
}
}
下面是ACTION如何调用以上个服务:
import java.io.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.MessageResources;
import com.tonny.blog.struts.form.*;
public class AddBlog extends BlogBaseAction{
//------------------------------------------------------------ Local Forwards
static final private String FORWARD_success = "success";
static final private String FORWARD_failure = "failure";
//------------------------------------------------------------ Action Methods
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
if(!isLogin(request))return mapping.findForward(FORWARD_failure);
service.addBlog((BlogForm)form,((BlogForm)form).getFile().getFileName());
return mapping.findForward(FORWARD_success);
}
}
下一步为DAO层来操作数据库:
import com.tonny.blog.bean.*;
import java.util.List;
public interface ItemDAO {
public boolean addItem(Item item);
public boolean removeItem(Long id);
public List loadItems();
public List loadItems(String topic);
public Item loadItem(Long id);
public boolean updatItem(Item item);
}
DAOFACTORY调用实力化方法:
import com.tonny.blog.dao.*;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.*;
import java.util.*;
import com.tonny.blog.bean.*;
public class ItemDAOHibernate extends DAOHibernate implements ItemDAO {
public ItemDAOHibernate(){
}
public boolean addItem(Item item){
try{
beginTransaction();
session.save(item);
commit();
return true;
}
catch(HibernateException e){
rollback();
return false;
}
}
public boolean updatItem(Item item){
try{
beginTransaction();
Item it=item;
it=(Item)session.load(Item.class,(item.getId()));
it.setTopic(item.getTopic());
System.out.println("item.getTopic()"+item.getTopic());
it.setContent(item.getContent());
System.out.println("item.getContent()"+item.getContent());
session.flush();
commit();
return true;
}
catch(HibernateException e){
System.err.println("========>hibernate exception"+e);
rollback();
return false;
}
}
public boolean removeItem(Long id){
try{
beginTransaction();
session.delete("from com.tonny.blog.bean.Item as item where item.id="+id);
commit();
return true;
}
catch(HibernateException e){
rollback();
return false;
}
}
public List loadItems(){
List list=null;
try{
beginTransaction();
list=session.find("from com.tonny.blog.bean.Item as item");
commit();
}
catch(HibernateException e){
System.out.println("load Blog failed");
rollback();
}
return list;
}
public List loadItems(String topic){
List list=null;
try{
beginTransaction();
Query query=session.createQuery("from com.tonny.blog.bean.Item as item where item.topic like '%"+topic+"%'");
list=query.list();
commit();
return list;
}
catch(HibernateException e){
System.out.println("load blog failed");
rollback();
}
return list;
}
public Item loadItem(Long id){
Item item=null;
try{
beginTransaction();
Query query=session.createQuery("from com.tonny.blog.bean.Item as item where item.id=:id");
query.setLong("id",id.longValue());
Iterator it=query.iterate();
if(it.hasNext()) return item=(Item)it.next();
commit();
}
catch(HibernateException e){
System.out.println("load blog failed");
rollback();
}
return item;
}
}
这里实现了对数据库查询,修改,删除操作,没有MANY-TO-MANY操作。
|