struts和hibernate简单整合

最近自己研究了下ssh框架,目前练习了struts+hibernate,特来记录下。

 首先去官网下载最新的包,我的都是最新的,当然最新的也有最新的坑.....

首先创建文件总目录

struts和hibernate简单整合_第1张图片struts和hibernate简单整合_第2张图片

先配置必须的xml文件

1.hibernate.fig.xml




	
	
		
		 
		com.mysql.jdbc.Driver
		 
	    jdbc:mysql://localhost:3306/shop
		 
		root
		 
		123456
		
		org.hibernate.dialect.MySQLDialect
		
		
		
		
		true
		
		true
		
		update
		
		
		
	

这是主配置文件,里面包括了数据库中的实体映射表

要 放在这struts和hibernate简单整合_第3张图片里面,比较清楚



   
   

	
	
		
		
			
			
		
		
		
		
		
		
		
	

hibernate的一大好处就是自己 根本就不需要建表,写sql语句,他已经封装好了,配置文件配置好后直接调用就好

2.struts.xml







   
   
	
	
	
	
	
	
    
		
		   /show.jsp 
		
	
	
	
	
    
		
		   /findAllUser.jsp 
	
		   /show.jsp 
		    check,index,findAllUser,saveUser,deleteUser,updateUser,findUser,getModel,findByIdUser
		    
		
	
	

最后那里,struts2.5的 新特性需要注意一下,里面要是没有写方法,则访问不到这个方法,在以前的版本是没有这个的,增加在这个提高了struts2.5的安全性,我也用到了通配符,*是什么,则method就调用什么方法

3.个人认为hibernate的一些必要的步骤需要记下来并且熟练掌握,并且 封装成工具类就更好了

package utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;



public class HibernateUtils {
  
	private static SessionFactory buildSessionFactory = null;
			
	static {   //一个web项目只能有一个SessionFactory,类加载器时执行,读取到的类放在类的缓存区里
		//1.读取配置文件
		Configuration configure = new Configuration().configure();
		//2.创建SessionFactory
         buildSessionFactory = configure.buildSessionFactory();
	}
  
	public static   Session openSession() {   //开启一个session
		 
        //3.创建session
		Session session = buildSessionFactory.openSession(); 		
	    return  session;
	
	}
	
	public static   Session getCurrentSession() {   //获得与当前线程绑定的session
		 
        //3.创建session
		Session session = buildSessionFactory.getCurrentSession(); 		
	    return  session;
	
	}
	
	
	public static   void Transaction(Session session) {
	 //5.开启事务
    Transaction beginTransaction = session.beginTransaction();
     //6.提交事务
    beginTransaction.commit();
    //7.关闭session,释放资源
    session.close();
	}
	
}

4.

package userdao;

import java.util.List;
import java.util.Scanner;

import org.hibernate.Session;
import org.hibernate.query.Query;

import entity.User;
import utils.HibernateUtils;

public class userDaoImpl implements userDao {
  
	
	//Session openSession = HibernateUtils.openSession();
	
	public void saveUser(User user) {
		// TODO Auto-generated method stub
		Session openSession = HibernateUtils.openSession();
		openSession.save(user);
		HibernateUtils.Transaction(openSession);
		
	}

	public void deleteUser(int userId) {
		// TODO Auto-generated method stub
		Session openSession = HibernateUtils.openSession();
		User user = openSession.get(User.class, userId);
		openSession.delete(user);
		HibernateUtils.Transaction(openSession);
	}

	public void updateUser(User user) {
		// TODO Auto-generated method stub
		Session openSession = HibernateUtils.openSession();
		openSession.update(user);
		HibernateUtils.Transaction(openSession);
	}

	public User findUser(int userId) {
		// TODO Auto-generated method stub
		Session openSession = HibernateUtils.openSession();
		User user = openSession.get(User.class, userId);
		HibernateUtils.Transaction(openSession);
		return user;
	}

	public List findAllUser() {
		// TODO Auto-generated method stub
		Session openSession = HibernateUtils.openSession();
		 List list = openSession.createQuery("from User").list();  //from  实体类表名
		 System.out.println("运行了");		 
		HibernateUtils.Transaction(openSession);
		return list;
	}
}

这是dao层代码,每个方法都要创建session和关闭 session如果只开启一次但是在 每个方法都关闭的话,那么你调用这个方法的时候系统会显示已关闭(由于上一个方法已经关闭session)

5.下面这个是action里面的代码。我用了模型驱动方式ModelDriven,这样的话,jsp 页面里的属性的name只要和T 

里面的属性 对应上即可,不必要user.name 这样

package userAction;

import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import entity.User;
import userService.userService;
import userService.userServiceImpl;

public class userActionImpl  extends  ActionSupport   implements  ModelDriven,  userAction  {

	//从jsp接受过来更改的对象或者其他数据   implements userAction    implements ModelDriven
	private userService us = new userServiceImpl();
	//准备个user对象
	private User user = new User();


	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("execute保存的user是"+user);
		return super.execute();
	}


	public String saveUser() {
		// TODO Auto-generated method stub
		System.out.println("保存的user是"+user);
		us.saveUser(user);
		return findAllUser();
		
	//	return  findAllUser(); //重定向到action
	}

	public String deleteUser() {
		// TODO Auto-generated method stub
		us.deleteUser(user.getUserId());
		return findAllUser();
	}

	public String updateUser() {
		// TODO Auto-generated method stub
		us.updateUser(user);
		return findAllUser();
	}

	public String findUser() {
		// TODO Auto-generated method stub
		User findUser = us.findUser(user.getUserId());
		System.out.println("findUser是"+findUser);
		ActionContext.getContext().put("findUser", findUser);
		return "tofindUser";
	}

	public String findAllUser() {
		// TODO Auto-generated method stub
		List findAllUser = us.findAllUser();
		ActionContext.getContext().put("findAllUser", findAllUser);
		System.out.println("findAllUser是"+findAllUser);
		return 	 "tofindAllUser";
	}

	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}


}

6.然后就是struts 前后交互jsp界面  注意到我用到了struts标签,与from标签不同的是他提交的时候可以指定要调用action中的哪一个方法,一个表单对应一个action,不同的按钮对应 action中的不同的 方法,如果用了模型驱动方式,则user里的属性与表单中的name对应的属性一样。就可以直接传进去


	
	
  

7.然后在前端在 显示出来    这是查找所有的jsp


        ${o}

这里面对应action里面的操作,action从jsp中获取到值之后,存进findAllUser中,然后通过struts标签取出来

要用到struts标签的的话需要加

    <%@ taglib prefix="s" uri="/struts-tags"%> 

这句话

   
        Id:${o.userId}
姓名: ${o.userName}
年龄: ${o.userAge}

这是查找 单个的jsp界面,其实都是用遍历集合的方法,应该还有更好的方法

8.然后是运行截图

struts和hibernate简单整合_第4张图片

struts和hibernate简单整合_第5张图片

 

struts和hibernate简单整合_第6张图片

struts和hibernate简单整合_第7张图片

struts和hibernate简单整合_第8张图片

struts和hibernate简单整合_第9张图片

struts和hibernate简单整合_第10张图片

struts和hibernate简单整合_第11张图片

struts和hibernate简单整合_第12张图片

9.前端用到了 bootstrap的一些框架

 在这简单的小例子中,我遇到了很多的问题,比如说当hibernate和struts的jar包 整合的时候,会有包冲突

还有如果报错index()什么没有定义啊之类的错误    

最后还要在struts.xml配置中写这么一句话

 regex:.*

还有方法白名单,前文中提到过,为了增加安全性

10.struts的拦截器配置在web.xml中,没有这个,一切白费,拦截器在action附近执行(过滤器的范围比拦截器广)





  Struts 2 Rest Example


    
        action2
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    


    
        action2
        /*
    


    
        index.jsp
    

  


还有一个修改struts常量配置,一共有三个方法,重点掌握第二个方法,在struts.xml中修改

修改常量配置

struts和hibernate简单整合_第13张图片

 

 

修改方式1

 

struts和hibernate简单整合_第14张图片

修改方式2在struts.xml文件里改

 

struts和hibernate简单整合_第15张图片

 

方式三在web.xml修改

 

 但是还有很多遗憾,比如说我的软件导入约束就是不行,xml配置文件里没有提示很伤,以及还有很多没有深挖的知识点

不过了解了这么多也是很开心,互相努力。

你可能感兴趣的:(struts,struts,hibernate,数据库连接,ssh整合,增删改查)