zoukankan      html  css  js  c++  java
  • Struts2.3.4+Hibernate4.2.4+Mysql6.0整合

    1.项目搭建过程:

    (1). 创建一个Web Project.导入Struts2和Hibernate的jar包。(如果不知道Struts2的jar包,可以在下载的struts的jar包中,找到apps文件夹下包含的示例程序,其中有一个是struts2-blank.war,解压缩,拷贝其中的lib包下的jar包即可。而Hibernate程序所需要的jar包,则从Hibernate的jar包中,有一个文件夹,叫做lib equired,里面的包即为必须的包)

    (2).在web.xml中为struts配置过滤器。

    <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>

    (3).在src路径下创建hibernate的核心配置文件hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!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.username">root</property> <property name="hibernate.connection.password">password1!</property>
         <!--mysql数据库驱动--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- url,并且设置编码格式,其中&amp;是html中对&的转义 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&amp;characterEncoding=UTF-8</property>
    <!--设置方言为mysql -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 执行操作时,打印sql语句 --> <property name="show_sql">true</property>
    <!-- 格式化输出的sql语句 --> <property name="format_sql">true</property>
    <!-- 表的生成策略 --> <property name="hbm2ddl.auto">update</property>
         <!-- 采用getCurrentSession的方式获取session对象时,此处需要加上这句话 --> <property name="hibernate.current_session_context_class">thread</property> </session-factory> </hibernate-configuration>

    (4).创建struts.xml配置文件,加上壳子。为后续配置action和result做准备。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    <!-- 开发者模式打开,便于调试--> <constant name="struts.devMode" value="true"></constant> <package name="default" namespace="/" extends="struts-default"> </struts>

    (5).根据业务需求,创建实体类(JavaBean写法)。并为这些实体类创建对应的映射文件。

    (实体类略)Student.cfg.xml映射文件如下:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2016-7-23 10:35:39 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <!-- class的name属性值一定要从包名开始引用 -->
        <class name="com.imooc.entity.Student" table="student">
            <id type="java.lang.String" name="sid" column="SID" length="8">
           <!--主键增长策略,assigned表示以自定义的方式增加主键,而不是由数据库自动生成-->
    <generator class="assigned"></generator> </id>

    <property name="sname" type="java.lang.String"> <column name="SNAME" /> </property> <property name="sgender" type="java.lang.String"> <column name="SGENDER" /> </property>   <!-- type类型,可以写hibernate映射类型date(只显示年月日) time(只显示时间) timestamp(年月日时分秒),也可以写Java对应的类型:java.util.Date --> <property name="sbirthday" type="date"> <column name="SBIRTHDAY" /> </property> <property name="saddress" type="java.lang.String"> <column name="SADDRESS" /> </property> </class> </hibernate-mapping>

    将映射文件添加到Hibernate的核心配置文件中:hibernate.cfg.xml

    <session-factory>
    ...
    <mapping resource="com/imooc/entity/Student.hbm.xml"/>
    <mapping resource="com/imooc/entity/User.hbm.xml"/>
    ...
    </session-factory>

    (6).根据业务需求,分层,创建dao接口,dao的实现类。在此之前,先创建一个工具类,提供SessionFactory对象实例。(单例模式)

    public class SessionFactoryUtil {
    
        private static SessionFactory sessionFactory;
        // 单例模式
        private SessionFactoryUtil() {
        }
    
        public static SessionFactory getSessionFactory() {
            if (sessionFactory == null) {
                // 获取配置信息
                Configuration configuration = new Configuration().configure();
                // 获取服务注册对象
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                        .applySettings(configuration.getProperties())
                        .buildServiceRegistry();
                sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            }
            return sessionFactory;
        }
    }

    在具体的dao的实现类中,对实体类进行增删改查时,总结如下:

    session对象在进行增删改查时,要开启事务。

    通过get/load方法得到某一个对象,save,delete,update分别进行增删改的操作。

    如果用进行查询,我们借助hql:hql默认的语法是: from 实体类 where 属性...

    如果要查询具体的某列内容,语法为:select 属性1,属性2,属性3... from 实体类 where ...,默认返回类型为List<Object[]>

    Session session = SessionFactoryUtil.getSessionFactory()
                        .getCurrentSession();
    transaction = session.beginTransaction();
    
    //这种方式的前提是,在实体类student中必须存在包含选项列的构造函数才可以
    String hql = "SELECT new Student(sid, sname, sgender, sbirthday, saddress) FROM Student";
    List<Student> s = query.list();
    
    //String hql = "SELECT new List(sid, sname, sgender, sbirthday, saddress) FROM Student";
    //List<List> lists = query.list();
    
    //String hql = "SELECT new Map(sid, sname, sgender, sbirthday, saddress) FROM Student";
    //List<Map> maps= query.list();
    
    //默认
    //String hql = "SELECT sid, sname, sgender, sbirthday, saddress FROM Student";
    //List<Object[]> lists = query.list();

    (7).前台,由jsp页面跳转到action中。

    <form name="loginForm" action="<%=path%>/user/User_login.action" method="post">
    解释一下<%=path%>后面的user是什么?User_login又是什么?
    首先,user代表namespace。后面的User_login采用通配符的方式匹配action

    <package name="student" namespace="/student" extends="struts-default">
            <action name="*_*" class="com.imooc.action.{1}Action" method="{2}">
                <result name="list_success">/student/Students_query_success.jsp</result>
                <result name="list_failer">/student/Students_query_success.jsp</result>
                <result name="add_success">/student/Students_add_success.jsp</result>
                <result name="modify_middle">/student/Students_modify.jsp</result>
                <result name="save_success">/student/Students_modify_success.jsp</result>
                <result name="delete_success" type="chain">Student_query</result><!-- 注意路径。type中chain代表页面跳转到其他的请求。不可以跳转到某一个页面 -->
            </action>
    </package>
    这里想说,在result中跳转到其他的action,type="chain". 如果由result中跳转到其他的jsp页面,默认type="dispatcher"

    暂且说这些,欢迎大家指正!

  • 相关阅读:
    python os.path
    ant的基本说明
    gcc的基本使用方法
    java逻辑运算符小节
    awk 简单教程
    推荐:恢复Ext3下被删除的文件
    python读取excel
    ant的简明教程,后面运行写的不错
    WinForm中快捷键与组合按键的设置
    InstallShield 2010集成.net Framework 4的安装包制作
  • 原文地址:https://www.cnblogs.com/qusongsong/p/5798386.html
Copyright © 2011-2022 走看看