sh

本文介绍了一个基于Struts2和Hibernate框架整合的实战案例,涵盖了从环境搭建到具体功能实现的全过程,包括数据库连接配置、实体类映射、Action类设计等内容。
1 引入包struts包: antlr commons-collections commons-io commons-logging commons-lang  commons-fileupload  freemaker   javassist stuts2-core xwork-core ongl  11
hibernate    hibernate3  required包下antlr commons-collections dom4j javassist jta slf4j-api 及jpa包下hibernate-jpa  hibernate-commons-annotations hibernate-entitymanager jboss-logging jboss-transaction 8
还有mysql-connector-java junit4.10
2创建包,类,实体类对应的hibernate映射文件,Students类String sid,sname,gender,address,Date birthday构造方法无参和有参 ,封装和toString方法  
Users类int uid String username,password 无参和有参构造方法
 Students.hbm.xml   hibernate-mapping class节点(name、table属性) 下面包含id节点(name type属性(包含generator节点 class属性assigned native))property节点(name type length属性)
 Users.hbm.xml     hibernate-mapping class节点(name、table属性) 下面包含id节点(name type column length属性)property节点(name type属性)
?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
    
    <class name="entity.Students" table="STUDENTS">
    
    <id name="sid" type="java.lang.String" length="8">
    <generator class="assigned"/>
    </id>
     <property name="sname" type="java.lang.String"/>
      <property name="gender" type="java.lang.String"/>
      <property name="birthday" type="date"/>
      <property name="address" type="java.lang.String"/>
      
      
    </class>
    
    
    </hibernate-mapping>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
    
    <class name="entity.Users" table="USERS">
    
    <id name="uid" type="int" column="pid">
    <generator class="native"/>
    </id>
     <property name="username" type="java.lang.String"/>
      <property name="password" type="java.lang.String"/>
    </class>
    
    
    </hibernate-mapping>

 
3   hibernate配置文件 hibernate.cfg.xml 引入数据库连接属性 和自身 的属性
hibernate-cofiguration 节点 


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


<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">12345678</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect </property>
<property name="show_sql">true</property>
<property name="format_sql">true</property> 
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping resource="entity/Students.hbm.xml"/>
<mapping resource="entity/Users.hbm.xml"/>


</session-factory>

</hibernate-configuration>


4 web.xml struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>




<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">


<struts>


 
<package name="default" extends="struts-default" namespace="/">


</package>
<package name="users" namespace="/users" extends="default">
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="login_success">/users/Users_login_success.jsp</result>
<result name="login_failue">/uses/Users_login.jsp</result>
<result name="logout_success">/uses/Users_login.jsp</result>
</action>
</package>
<package name="students" namespace="/students" extends="default">
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="query_success">/students/Students_query_success.jsp</result>


<result name="modify_success" >/students/Students_modify.jsp</result>
<result name="save_success" >/students/Students_modify_success.jsp</result>
<result name="add_success">/students/Students_add_success.jsp</result>
<result name="delete_success" type="chain">Students_query</result>
</action>
</package>
</struts>


4 action类,权限验证,curd  dao接口及实现类 curd  db类获取sessionFactory对象目的是生产session对象  首先继承所有acton父类ActionSupport 实现三个接口,servlet原生api 自动装配servlet,访问web资源;


public class MyHibernateSessionFactory {
private static SessionFactory sessionFactory;
//构造方法私有化,保证单例模式
private MyHibernateSessionFactory(){
}
//公有的静态方法,获得会话工厂对象
public static SessionFactory getSessionFactory(){
if(sessionFactory==null){
Configuration config=new Configuration().configure();
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory=config.buildSessionFactory(serviceRegistry);
return sessionFactory;
}else{
return sessionFactory;
}
}
}





public class SuperAction extends ActionSupport implements ServletRequestAware, ServletResponseAware,ServletContextAware{


/**

*/
private static final long serialVersionUID = 1L;
protected HttpServletRequest request;
protected HttpServletResponse response;
protected HttpSession session;
protected ServletContext application;


@Override
public void setServletContext(ServletContext application) {
// TODO Auto-generated method stub
this.application=application;

}


@Override
public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response=response;

}


@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
this.session=this.request.getSession();

}


}




//实现模型驱动方式接受web传递的参数;


public class UsersAction extends SuperAction implements ModelDriven<Users> {



/**

*/
private static final long serialVersionUID = 1L;
private Users user=new Users();

public String login()
{

UsersDao udao=new UsersDaoImpl();
//查到用户名和密码返回登录成功页面
if(udao.usersLogin(user))
{
//session中保存登录成功的用户名
session.setAttribute("loginUserName", user.getUsername());
return "login_success";

}
else
{


return "login_failue";
}

}

@SkipValidation
//用户注销方法
public String logout()
{

if(session.getAttribute("loginUserName")!=null)
{
session.removeAttribute("loginUserName");


}
return "logout_success";

}


@Override
public void validate() {
// TODO Auto-generated method stub

//用户名不能为空
if("".equals(user.getUsername().trim()))
{


this.addFieldError("usernameError", "用户名不能为空!");
}
if(user.getPassword().length()<6)
{

this.addFieldError("passwordError", "密码长度不少于6位");

}
}
@Override
public Users getModel() {
// TODO Auto-generated method stub
return this.user;
}


}


public interface UsersDao {


public boolean usersLogin(Users u);
}


public class UsersDaoImpl implements UsersDao{



public boolean usersLogin(Users u) {
// TODO Auto-generated method stub

Transaction tx=null;
String hql="";
try
{
    //获取session对象
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
//开启事务
tx=session.beginTransaction();
//sql 查询
hql="from Users where username=? and password=?";
//调用session对象方法,获取查询对象
Query query=session.createQuery(hql);
//查询用户名和密码;
query.setParameter(0, u.getUsername());
query.setParameter(1, u.getPassword());
@SuppressWarnings("rawtypes")
List list=query.list();
//事务提交
tx.commit();
if(list.size()>0)
{

return true;

}
else
{

return false;
}
}
catch(Exception ex)
{
ex.printStackTrace();
return false;

}
finally
{

if(tx!=null)
{
//tx.commit();
tx=null;

}

}

}








public class StudentsAction extends SuperAction {


/**

*/
private static final long serialVersionUID = 1L;
    public String query()
    {
    StudentsDao sdao=new StudentsDAOImpl();
List<Students> list=sdao.queryAllStudents();
if(list!=null&&list.size()>0)
{
session.setAttribute("students_list",list);

}
    return "query_success";
   
   
    }
    
    public String delete()
    {
    StudentsDao sdao=new StudentsDAOImpl();
    String sid=request.getParameter("sid");
    sdao.deleteStudents(sid);
   
    return "delete_success";
    }
    public String add() throws Exception{
   
    Students s=new Students();
    s.setSname(request.getParameter("sname"));
    s.setGender(request.getParameter("gender"));
    SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
    s.setBirthday(sf.parse(request.getParameter("birthday")));
    s.setAddress(request.getParameter("address"));
    StudentsDao sdao=new StudentsDAOImpl();
    sdao.addStudents(s);
    return "add_success";
    }
    public String modify()
    {
    String sid=request.getParameter("sid");
    StudentsDao sdao=new StudentsDAOImpl();
    Students s=sdao.queryStudentsBySid(sid);
    session.setAttribute("modify_students", s);
    return "modify_success";
   
   
    }
    
    public String save() throws Exception
    {
    Students s=new Students();
    s.setSname(request.getParameter("sid"));
    s.setSname(request.getParameter("sname"));
    s.setGender(request.getParameter("gender"));
    SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
    s.setBirthday(sf.parse(request.getParameter("birthday")));
    s.setAddress(request.getParameter("address"));
    StudentsDao sdao=new StudentsDAOImpl();
    sdao.updateStudents(s);
    return "save_success";
   
    }
}
public interface StudentsDao {
//查询学生资料
public List<Students> queryAllStudents();
//根据学生编号查询学生资料
public Students queryStudentsBySid(String sid);
//添加学生资料
public boolean addStudents(Students s);
//修改学生资料
public boolean updateStudents(Students s);
//删除学生资料
public boolean deleteStudents(String sid);
}


public class StudentsDAOImpl implements StudentsDao{
   


public List<Students> queryAllStudents() {
// TODO Auto-generated method stub

Transaction tx=null;
List<Students> list=null;
String hql="";

try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
hql="from Students ";
Query query=session.createQuery(hql);

list=query.list();
tx.commit();
return list;


}
catch(Exception ex)
{
ex.printStackTrace();
tx.commit();
return list;

}
finally
{

if(tx!=null)
{
//tx.commit();
tx=null;
}
}
}
public Students queryStudentsBySid(String sid) {
// TODO Auto-generated method stub
Transaction tx=null;
Students s=null;


try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();

s=(Students)session.get(Students.class, sid);
tx.commit();
return s;


}
catch(Exception ex)
{
ex.printStackTrace();
tx.commit();
return s;

}
finally
{

if(tx!=null)
{
//tx.commit();
tx=null;
}
}
}


public boolean addStudents(Students s) {

s.setSid(getNewSid());
        Transaction tx=null;

try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();

session.save(s);
tx.commit();
return true;
}
catch(Exception ex)
{
          ex.printStackTrace();
          tx.commit();
          return false;

}
finally
{
if(tx!=null)
{

tx=null;

}


}


// TODO Auto-generated method stub

}


public boolean updateStudents(Students s) {
// TODO Auto-generated method stub

        Transaction tx=null;

try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();

session.update(s);
tx.commit();
return true;
}
catch(Exception ex)
{
          ex.printStackTrace();
          tx.commit();
          return false;

}
finally
{
if(tx!=null)
{

tx=null;

}


}

}


public boolean deleteStudents(String sid) {
// TODO Auto-generated method stub


Transaction tx=null;

try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
tx=session.beginTransaction();
Students s=(Students)session.get(Students.class, sid);
session.delete(s);
tx.commit();

return true;


}
catch(Exception ex)
{
          ex.printStackTrace();
          tx.commit();
          return false;

}
finally
{
if(tx!=null)
{

tx=null;

}


}
}


String getNewSid()
{

Transaction tx=null;
String hql="";
String sid=null;
try
{
Session session=MyHibernateSessionFactory.getSessionFactory().getCurrentSession();
    tx=session.beginTransaction();
    hql="select max(sid) from Students";
    Query query=session.createQuery(hql);
    sid=(String)query.uniqueResult();
    if(sid==null||"".equals(sid))
    {
    sid="s0000001";
   
    }
    else{
    
    String temp=sid.substring(1);
    int i=Integer.parseInt(temp);
    i++;
    temp=String.valueOf(i);
    int len=temp.length();
    for(int j=0;j<7-len;j++)
    {
    temp="0"+temp;
   
    }
sid="s"+temp;
    }
    return sid;
}
    catch(Exception ex)
    {
    ex.printStackTrace();
   
    return null;
   
    }
finally
{

if(tx!=null)
{

tx=null;
}
}
}


}








https://www.cnblogs.com/jasonHome/p/5729671.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lozhyf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值