码迷,mamicode.com
首页 > Web开发 > 详细

01.Struts2与hibernate整合

时间:2016-01-16 19:01:49      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

创建struts2和hibernate用户类库
struts2核心jar包的查看方法
D:\Java Package\struts-2.3.24.1\apps将
技术分享技术分享【这是一个空例子,内中有核心jar包和struts.xml】文件后缀名改为.rar可以解压缩。
解压缩后的文件夹,依次打开:
struts- WEB-INF -lib 内中为核心jar包。
 
hibernate核心jar包的整理方法
D:\Java Package\hibernate-release-4.2.4.Final\lib\required内中为核心jar包。
========================================================
 
eclipse中创建项目shtest
在Window-preferences -Java - BuildPath -User Libraries 创建用户类库
创建Struts-core:
将整理好的核心jar包添加到内中,hibernate-core、mysql-jdbc相同操作。
技术分享
导入struts2和hibernate的jar包
项目右键最下Properties ,
Java Build Path -Libraries -Add Library -User Library ,点击next,全选 ,Finish
技术分享
 
配置web.xml,加入struts的过滤器
<!-- struts2的过滤器支持 -->
    <filter>
        <filter-name>struts2</filter-name>
        <!-- 表示用了struts2的过滤器 -->
        <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>
创建struts.xml配置文档
在找核心jar包而解压的文件中找到struts.xml,将其拷贝到当前项目的src中,修改后的完整代码:
<?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" namespace="/" extends="struts-default">
    </package>
</struts>

配置hibernate.cfg.xml配置文档

在hibernate文件夹中,找到hibernate.cfg.xml配置文档,拷贝到当前项目中。修改后完整代码:
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始 -->
<hibernate-configuration>
    <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作 -->
    <session-factory>
        <!-- hibernate数据库方言 -->
        <!-- 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.classname.of.Dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql服务器名称,此处为本机,hibernate是数据库名 
            此处为【lyyp_db】 -->
        <!-- 【?useUnicode=true&amp;characterEncoding=utf-8】 数据库插入中文乱码,其中【将&进行转码 = &amp; 】-->
        <property name="connection.url">jdbc:mysql://localhost:3306/lyyp_db?useUnicode=true&amp;characterEncoding=utf-8</property>
        <!--连接数据库是用户名 -->
        <property name="connection.username">root</property>
        <!--连接数据库是密码 -->
        <property name="connection.password">******</property>
        <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于查错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率 -->
        <property name="show_sql">true</property>
        <!-- 在log和console中打印出更漂亮的SQL。 取值 true | false -->
        <property name="format_sql">true</property>
        <!-- 在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库. 使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema. 
            取值 validate | update | create | create-drop -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 使用getCurrentSession方式打开会话 -->
        <!-- Enable Hibernate‘s automatic session context management -->
        <property name="current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>
Java Resources -src创建实体类的包【model】
Users.java:【用户表实体类】
package model;
/**
 * 用户表的实体类
 * 
 * @author Buddha
 *
 */
public class Users {
    private int uid;
    private String username;
    private String password;
    // 不带参数的构造方法
    public Users() {
    }
    // 创建一个带参数的构造方法
    public Users(int uid, String username, String password) {
      //  super();
        this.uid = uid;
        this.username = username;
        this.password = password;
    }
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    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;
    }
}

Students.java【学生表实体类】

package model;
import java.util.Date;
/**
 * 学生表实体类
 * 
 * @author Buddha
 *
 */
public class Students {
    private String sid;// 学号
    private String sname;// 学生姓名
    private String gender;// 性别
    private Date birthday;// 生日
    private String address;// 地址
    // 不带参数的构造函数
    public Students() {
    }
    // 创建一个带参数的构造函数
    public Students(String sid, String sname, String gender, Date birthday, String address) {
        //super();
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.birthday = birthday;
        this.address = address;
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

// 生成一个同String()方法
    @Override
    public String toString() {
        return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday
                + ", address=" + address + "]";
    }
    
}
生成实体映射文件:
Users.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 此处类名要写完整,也就是实体类下的用户类 talbe为指定的表名 -->
    <class name="model.Users" table="USERS">
        <!-- 主键 此处为用户表的主键 也就是uid 指定类型为整型 -->
        <id name="uid" type="int">
            <!-- 自动增长 -->
            <generator class="native" />
        </id>
        <!-- 用户名 ,字符串类型, 长度=16 -->
        <property name="username" type="java.lang.String" length="16" />
        <!-- 密码 ,字符串类型, 长度=20 -->
        <property name="password" type="java.lang.String" length="20" />
    </class>
</hibernate-mapping>

Students.hbm.xml代码:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 此处类名要写完整,也就是实体类下的用户类 talbe为指定的表名 -->
    <class name="model.Students" table="STUDENTS">
        <!-- 主键 此处为学生表的主键 也就是sid 指定类型为字符串 指定字段的名字column="SID"可以不写 【length="8"】指定字符长度 -->
        <id name="sid" type="java.lang.String" length="8">
            <!-- 手动输出 -->
            <generator class="assigned" />
        </id>
        <!-- 学生姓名 ,字符串类型, 长度=16 -->
        <property name="sname" type="java.lang.String" length="16" />
        <!-- 性别, 字符串类型 ,长度=2 -->
        <property name="gender" type="java.lang.String" length="2" />
        <!-- 生日, 时间类型,只保留年月日,无时分秒 -->
        <property name="birthday" type="date" />
        <!-- 地址, 字符串类型, 长度=20 -->
        <property name="address" type="java.lang.String" length="20" />
    </class>
</hibernate-mapping>

将映射文件Users.hbm.xml和Students.hbm.xml添加到hibernate.cfg.xml配置文档中

<!--将映射文件Users.hbm.xml和Students.hbm.xml添加到hibernate.cfg.xml配置文档中-->
        <mapping resource="model/Students.hbm.xml" />
        <mapping resource="model/Users.hbm.xml" />
Java Resources 创建test【测试】文件夹
创建测试的实体类包【model】
创建一个测试生成表结构的类
TestStudents.java代码:
package model;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
/**
 * 测试生成表结构
 * 
 * @author Buddha
 *
 */
public class TestStudents {
    @Test
    public void testSchemaExport() {
        // 创建配置对象 【默认读取的是hibernate.cfg.xml文件】
        Configuration config = new Configuration().configure();
        // 创建服务注册对象
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties())
                .buildServiceRegistry();
        // 创建sessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
        // 创建session对象
        Session session = sessionFactory.getCurrentSession();
        // 创建SchemaExport对象
        SchemaExport export = new SchemaExport(config);
        // 生成表结构  输出sql语句
        export.create(true, true);
    }
}

控制台输出结果图:

技术分享

Navicat for MySQL数据库效果截图

技术分享

====================================

出现的异常整合:
 
程序跑起无误,但没有sql语句,使用navicat 也查询不到表
原因:未将映射文件添加到hibernate.cfg.xml中。
解决方法:
将用户表和学生表的映射文件添加到hibernate.cfg.xml中
<!--将映射文件Users.hbm.xml和Students.hbm.xml添加到hibernate.cfg.xml配置文档中-->
        <mapping resource="model/Students.hbm.xml" />
        <mapping resource="model/Users.hbm.xml" />

在使用Hibernate向Mysql数据库中插入数据时,出现如下异常:

技术分享

解决方法:
TestStudents.java类中的
// 创建配置对象
Configuration config = new Configuration();
<!--更改为:-->
Configuration config = new Configuration().configure();
数据库中插入中文乱码,
解决方法:
hibernate.cfg.xml中
<!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost表示mysql服务器名称,此处为本机,hibernate是数据库名 此处为【lyyp_db】 -->
<!-- 【?useUnicode=true&amp;characterEncoding=utf-8】 数据库插入中文乱码,其中【将&进行转码 为 &amp; 】-->
    <property name="connection.url">jdbc:mysql://localhost:3306/lyyp_db?useUnicode=true&amp;characterEncoding=utf-8</property>

 

 

01.Struts2与hibernate整合

标签:

原文地址:http://www.cnblogs.com/shakyamuni/p/5135807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!