当前位置: 代码迷 >> Eclipse >> MyEclipse hibernate 配备
  详细解决方案

MyEclipse hibernate 配备

热度:584   发布时间:2016-04-23 12:06:34.0
MyEclipse hibernate 配置
8.4  生成配置文件hibernate.cfg.xml

Hibernate 运行时需要获取一些底层实现的基本信息,包括数据库URL、数据库用户、数据库用户密码、数据库JDBC驱动类和数据库dialect等。 Hibernate同时支持xml格式的配置文件,以及传统的properties文件配置方式。本章采用基于xml格式文件的配置方式,这些信息都包含在默认名称为hibernate.cfg.xml的文件中。本节介绍如何在Eclipse中快速生成hibernate.cfg.xml文件。
跟我做

(1)创建名称为“Library”的Java工程。单击【文件】菜单,选择【新建】|【其他】命令,打开如图8-7所示的【新建】对话框。

(2)选择【Hibernate Configuration File】选项,单击【下一步】按钮,在图8-8的【输入或选择父文件夹】文本框中选择“Library”工程,单击【下一步】按钮,打开数据库配置对话框。

图8-7  【新建】对话框                          图8-8  选择工程名称

(3)在数据源配置对话框中输入如下数据库配置信息,如图8-9所示。

  ● Database dialect:SQLServer

  ● Driver class:com.microsoft.jdbc.sqlserver.SQLServerDriver

  ● Connection URL:jdbc:microsoft:sqlserver://localhost:1433;databaseName=demo

  ● Username:sa(根据实际配置)


图8-9  数据库配置窗对话框

(4)单击【完成】按钮,在Library工程的根目录下生成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 >

<!--数据库JDBC驱动类-->

        <property name="hibernate.connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>

<!--数据库密码-->

        <property name="hibernate.connection.password"></property>

     <!--数据库的URL-->

        <property name="hibernate.connection.url">jdbc:microsoft:sqlserver://localhost:1433;databaseName=demo</property>

     <!--数据库的用户名-->

        <property name="hibernate.connection.username">sa</property>

     <!--每个数据库都有其对应的Dialet以匹配其平台特性-->

        <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

    </session-factory>

</hibernate-configuration>

hibernate.cfg.xml 文件可以包含构建SessionFactory实例的所有配置信息。当使用如下
代码

SessionFactory sessions=new Configuration().configure().buildSessionFactory();

初始化 Hibernate时,Hibernate会在classpath中寻找文件名为hibernate.cfg.xml的文件。

%注意:如果运行时出现如图8-10所示的错误信息,这是因为在配置文件中设置了session- factory的name属性,这样hibernate会试图把这个sessionfactory注册到jndi中去,从而报告错误。去掉name属性即可,所以在hibernate.cfg.xml中不要设置session-factory的name属性。
图8-10  配置session-factory name属性后的出错信息
8.5  创建持久化对象

Hibernate 从本质上来讲是一种“对象-关系型数据映射”(Object Relational Mapping 简称ORM)。POJO在这里体现的就是ORM中Object层的语义,而映射(Mapping)文件则是将对象(Object)与关系型数据(Relational)相关联的纽带,在Hibernate中,映射文件通常以“.hbm.xml”作为后缀。
8.5.1  生成映射文件和持久化对象

本小节介绍如何在Eclipse中根据数据库中的表结构生成映射文件和持久化对象。通过Hibernate Synchronizer插件可以方便地生成映射文件和持久化对象,方便Hibernate应用的开发。
文本框: 图8-11 【选择透视图】对话框跟我做

(1)单击Eclipse的【窗口】菜单,选择【打开透视图】|【其他】命令,打开【选择透视图】对话框,如图8-11所示。选择【Hibernate Console】选项,单击【确定】按钮,打开Hibernate Console透视图。

Hibernate Console透视图包括Hibernate Configuration、Hibernate Dynamic Query Translator、Hibernate Entity Model和Hibernate Query Result等几个视图。

(2)右击Hibernate Configuration视图的空白区域,在快捷菜单中选择【Add configuration】命令,打开【Create Hibernate Console Configuration】对话框,如图8-12所示。

(3)单击【Configuration file】文本框右侧的按钮并选择“\Library\hibernate. cfg.xml”;单击“Classpath”组中的按钮将SQL Server数据库的JDBC驱动类msbase.jar、mssqlserver.jar等加入到classpath中;在【Name】文本框中输入 “Library”,单击【完成】按钮,创建名称为“Library”的配置,如图8-13所示。

          

图8-12  生成hibernate Console Configuration           图8-13  Hibernate Configuration视图

文本框: 图8-14 【Hibernate Code Generation】对话框(4)单击工具栏中的按钮右边的下拉箭头,在下拉菜单中选择【Hibernate Code Generation】命令,打开如图8-14所示的【Hibernate Code Generation】对话框。

(5)在【Hibernate Code Generation】对话框中的【Main】选项卡中输入如下配置信息:

  ● 名称:codegeneration

  ● Console configuration:Library

  ● Output directory:\Library\src

  ● Package:library.hibernate

创建名称为“codegeneration”的Hibernate Code Generation配置,生成的目标代码存放在“\library\src”目录下,其包名为“library.hibernate”。

(6)单击【Exporters】选项卡选中如下各项,如图8-15所示。

  ● Generate domain code(.java)

  ● JDK1.5 Constructs(generics,etc.)

  ● Generate DAO code(.java)

  ● Generate mappings(hbm.xml)

(7)单击【运行】按钮,在Library工程的“library.hibernate”包中生成如图8-16所示的文件。

       

图8-15  Exporters配置                图8-16  生成的映射文件和持久化对象
8.5.2  对持久化对象的分析

BookBrowse.java、 Books.java和UserTable.java 3个生成的类是标准的JavaBean,Hibernate插件根据数据库的表结构自动生成了3个持久化对象,对于每个属性都有其对应的 getter/setter方法。

%注意:这3个类中的英文注释是Hibernate插件自动生成的,为了便于读者的理解,这里加上了部分中文注释。

(1)BookBrowse.java文件是标准的 JavaBean对应于demo数据库中的bookbrowse表,包括学生姓名、书名、归还日期、借阅日期、备注和是否归还等信息。其代码如下所示:

package library.hibernate;

// Generated 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3

import java.util.Date;

/**

* BookBrowse generated by hbm2java

*/

public class BookBrowse  implements java.io.Serializable {

    // Fields  

     //学生名字

     private String studentName;

     //书名

     private String bookName;

     //归还日期

     private Date returnDate;

     //借阅日期

     private Date borrowDate;

     //备注,评论信息

     private String com;

     //是否归还

     private String isReturned;

    // Constructors

    /** 默认构造函数 */

    public BookBrowse() {

    }

         /** minimal constructor */

    public BookBrowse(String studentName) {

        this.studentName = studentName;

    }

  

    /** full constructor */

    public BookBrowse(String studentName, String bookName, Date returnDate, Date borrowDate, String com, String isReturned) {

        this.studentName = studentName;

        this.bookName = bookName;

        this.returnDate = returnDate;

        this.borrowDate = borrowDate;

        this.com = com;

        this.isReturned = isReturned;

    }

  

    // Property accessors 取得学生姓名

    public String getStudentName() {

        return this.studentName;

    }

    //设置学生姓名

    public void setStudentName(String studentName) {

        this.studentName = studentName;

    }

    //取得书名字段的值

    public String getBookName() {

        return this.bookName;

    }

    //设置书名字段

    public void setBookName(String bookName) {

        this.bookName = bookName;

    }

    //取得归还日期字段

    public Date getReturnDate() {

        return this.returnDate;

    }

    //设置归还日期字段

    public void setReturnDate(Date returnDate) {

        this.returnDate = returnDate;

    }

    //取得借阅日期

    public Date getBorrowDate() {

        return this.borrowDate;

    }

    //设置借阅日期

    public void setBorrowDate(Date borrowDate) {

        this.borrowDate = borrowDate;

    }

    //取得备注信息

    public String getCom() {

        return this.com;

    }

    //设置备注信息

    public void setCom(String com) {

        this.com = com;

    }

    //取得是否归还状态

    public String getIsReturned() {

        return this.isReturned;

    }

    //设置是否归还状态

    public void setIsReturned(String isReturned) {

        this.isReturned = isReturned;

    }

}

(2)Books.java类对应于demo数据库中的books表,是标准的JavaBean,包括书名、出版社、作者、地址、出版日期和价格等相关信息。其代码如下所示:

package library.hibernate;

// Generated 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3

import java.util.Date;

/**

* Books generated by hbm2java

*/

public class Books  implements java.io.Serializable {

    // Fields  

     //书名

     private String bookName;

     //出版社

     private String press;

     //作者

     private String author;

     //地址

     private String address;

     //出版日期

     private Date pressDate;

     //价格

     private Double price;

     //备注

     private String com;

     //图书数量

     private Integer booksCount;

     //已借阅数量

     private Integer borrowedCount;

    // Constructors

    /** default constructor */

    public Books() {

    }

         /** minimal constructor */

    public Books(String bookName) {

        this.bookName = bookName;

    }

  

    /** full constructor */

    public Books(String bookName, String press, String author, String address, Date pressDate, Double price, String com, Integer booksCount, Integer borrowedCount) {

        this.bookName = bookName;

        this.press = press;

        this.author = author;

        this.address = address;

        this.pressDate = pressDate;

        this.price = price;

        this.com = com;

        this.booksCount = booksCount;

        this.borrowedCount = borrowedCount;

    }

  

 

    // Property accessors

    //取得书名属性的值

    public String getBookName() {

        return this.bookName;

    }

    //设置书名属性

    public void setBookName(String bookName) {

        this.bookName = bookName;

    }

    //取得出版社字段的值

    public String getPress() {

        return this.press;

    }

    //设置出版社字段

    public void setPress(String press) {

        this.press = press;

    }

    //取得作者信息

    public String getAuthor() {

        return this.author;

    }

    //设置作者信息

    public void setAuthor(String author) {

        this.author = author;

    }

    //取得地址信息

    public String getAddress() {

        return this.address;

    }

    //设置地址信息

    public void setAddress(String address) {

        this.address = address;

    }

    //取得出版日期

    public Date getPressDate() {

        return this.pressDate;

    }

    //设置出版日期

    public void setPressDate(Date pressDate) {

        this.pressDate = pressDate;

    }

    //取得价格信息

    public Double getPrice() {

        return this.price;

    }

    //设置价格信息

    public void setPrice(Double price) {

        this.price = price;

    }

    //取得备注信息

    public String getCom() {

        return this.com;

    }

    //设置备注信息

    public void setCom(String com) {

        this.com = com;

    }

    //取得图书数量

    public Integer getBooksCount() {

        return this.booksCount;

    }

    //设置图书数量

    public void setBooksCount(Integer booksCount) {

        this.booksCount = booksCount;

    }

    //取得已借阅图书数量

    public Integer getBorrowedCount() {

        return this.borrowedCount;

    }

    //设置已借阅图书数量

    public void setBorrowedCount(Integer borrowedCount) {

        this.borrowedCount = borrowedCount;

    }

}

(3)UserTable.java类对应于 demo数据库中的usertable表,包括用户名、密码和用户权限3个属性,是标准的JavaBean。其代码如下所示:

package library.hibernate;

// Generated 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3

/**

* UserTable generated by hbm2java

*/

public class UserTable  implements java.io.Serializable {

    // Fields  

     //用户名

     private String userName;

     //密码

     private String password;

     //用户权限

     private String power;

    // Constructors

    /** default constructor */

    public UserTable() {

    }

         /** minimal constructor */

    public UserTable(String userName) {

        this.userName = userName;

    }

  

    /** full constructor */

    public UserTable(String userName, String password, String power) {

        this.userName = userName;

        this.password = password;

        this.power = power;

    }

  

 

    // Property accessors

    //取得用户名字段

    public String getUserName() {

        return this.userName;

    }

    //设置用户名字段

    public void setUserName(String userName) {

        this.userName = userName;

    }

    //取得密码字段

    public String getPassword() {

        return this.password;

    }

    //设置密码字段

    public void setPassword(String password) {

        this.password = password;

    }

    //取得用户权限

    public String getPower() {

        return this.power;

    }

    //设置用户权限

    public void setPower(String power) {

        this.power = power;

    }

 

}
8.6  创建映射文件

Hibernate之所以能够判断实体类和数据表之间的对应关系,是因为有XML映射文件。通过Hibernate Code Generation既可以生成持久化对象也可以生成映射文件。本节介绍在8.5节中生成的BookBrowse.hbm.xml、 Books.hbm.xml、UserTable.hbm.xml 3个映射文件。

BookBrowse.hbm.xml描述了 BookBrowse类和bookbrowse表之间的映射关系,其内容如下所示:

<?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 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3 -->

<hibernate-mapping>

<!--library.hibernate.BookBrowse 类和bookbrowse表对应关系描述-->

<classname="library.hibernate.BookBrowse"table="bookBrowse"schema="dbo"catalog=

"demo">

        <!--studentName属性对应StudentName字段-->

<id name="studentName" type="string">

            <column name="StudentName" length="40" />

            <generator class="assigned" />

        </id>

<!--bookName属性对应BookName字段 -->

        <property name="bookName" type="string">

            <column name="BookName" length="40" />

        </property>

<!--returnDate属性对应ReturnDate 字段-->

        <property name="returnDate" type="timestamp">

            <column name="ReturnDate" length="23" />

        </property>

         <!-- borrowDate属性对应BorrowDate字段-->

        <property name="borrowDate" type="timestamp">

            <column name="BorrowDate" length="23" />

        </property>

<!-- com属性对应Com字段-->

        <property name="com" type="string">

            <column name="Com" length="40" />

        </property>

<!-- isReturned属性对应Is_Returned字段-->

        <property name="isReturned" type="string">

            <column name="Is_Returned" length="2" />

        </property>

    </class>

</hibernate-mapping>

Books.hbm.xml描述了Books类和 books表之间的映射关系,其内容如下所示:

<?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 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3 -->

<hibernate-mapping>

<!--library.hibernate.Books类和books表对应关系描述-->

<class name="library.hibernate.Books" table="books" schema="dbo" catalog="demo">

<!-- bookName属性对应BookName字段-->

        <id name="bookName" type="string">

            <column name="BookName" length="20" />

            <generator class="assigned" />

        </id>

<!-- press属性对应Press字段-->

<property name="press" type="string">

            <column name="Press" length="20" />

        </property>

        <!-- author属性对应Author字段-->

        <property name="author" type="string">

            <column name="Author" length="20" />

        </property>

        <!-- address属性对应address字段-->

        <property name="address" type="string">

            <column name="address" length="50" />

        </property>

        <!-- pressDate属性对应PressDate字段-->

        <property name="pressDate" type="timestamp">

            <column name="PressDate" length="23" />

        </property>

<!-- price属性对应Price字段-->

        <property name="price" type="java.lang.Double">

            <column name="Price" precision="53" scale="0" />

        </property>

        <!-- com属性对应Com字段-->

        <property name="com" type="string">

            <column name="Com" length="20" />

        </property>

        <!-- booksCount属性对应books_count字段-->

        <property name="booksCount" type="java.lang.Integer">

            <column name="books_count" />

        </property>

        <!-- borrowedCount属性对应borrowed_count字段-->

        <property name="borrowedCount" type="java.lang.Integer">

            <column name="borrowed_count" />

        </property>

    </class>

</hibernate-mapping>

UserTable.hbm.xml描述了 UserTable类和usertable表之间的对应关系,其内容如下
所示:

<?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 2006-8-5 16:17:23 by Hibernate Tools 3.1.0 beta3 -->

<hibernate-mapping>

<!--library.hibernate.UserTable 类和usertable表对应关系描述-->

<class name="library.hibernate.UserTable" table="UserTable" schema="dbo"catalog="demo">

<!-- userName属性对应UserName字段-->

        <id name="userName" type="string">

            <column name="UserName" length="40" />

            <generator class="assigned" />

        </id>

        <!-- password属性对应Password字段-->

        <property name="password" type="string">

            <column name="Password" length="40" />

        </property>

        <!-- power属性对应Power字段-->

        <property name="power" type="string">

            <column name="Power" length="40" />

        </property>

    </class>

</hibernate-mapping>

</class>定义实体类和数据表之间的关系,name属性library.hibernate.UserTable是实体类(用类全名)的名字,UserTable是对应的数据表。</id>定义了主键id字段所用的键值生成方法。</property>定义了实体类和表字段的关联,name属性定义了类的字段,column属

性定义了数据库表字段名。Hibernate通过这里的设置建立起实体类和数据库表之间的对应关系。
8.7  Hibernate操作数据库的方法

通过Hibernate可以简化对数据库的操作,本节首先创建一个HibernateUtil类,用于管理session,然后介绍如何通过Hibernate实现数据库的查询、插入、删除和更新操作。

SessionFactory用来创建 Session实例,通过Configuration实例构建SessionFactory。Configuration实例根据当前的配置信息,构造 SessionFactory实例并返回。一旦SessionFactory构造完毕,即被赋予特定的配置信息。

Session是持久层操作的基础,相当于JDBC 的Connection。通过SessionFactory实例构建。Session实例提供的saveOrUpdate、delete和 createQuery方法分别实现了数据库的插入更新、删除和查询操作,简化了数据库的基本操作。
跟我做

(1)在“Library”工程的“src”文件夹中创建“library.main”包,在“library.main”包中创建HibernateUtil.java文件,并输入如下内容:

package library.main;

import java.io.File;

import org.hibernate.*;

import org.hibernate.cfg.*;

public class HibernateUtil {

        private static final SessionFactory sessionFactory;

         static {

                   try {

              //hibernate.cfg.xml文件

                            File file = new File(

                                               "E:\\Eclipsebook\\eclipse\\workspace\\Library\\src\\hibernate.cfg.xml");

                            //根据hibernate.cfg.xml中的配置信息创建SessionFactory

                            sessionFactory = new Configuration().configure(file)

                                               .buildSessionFactory();

                   } catch (Throwable ex) {

                            //创建SessionFactory失败信息

                            System.err.println("Initial SessionFactory creation failed." + ex);

                            throw new ExceptionInInitializerError(ex);

                   }

         }

     //得到SessionFactory的静态方法

         public static SessionFactory getSessionFactory() {

                   return sessionFactory;

         }

}

(2)在“Library”工程的“src”文件夹中创建“library.test”包,创建Test.java文件,在该Test.java文件中测试数据库的插入、更新、删除和查询操作。

(3)插入和更新数据库的基本操作。

//取得 SessionFactory实例

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

//打开一个Session实例

                   Session session = sessionFactory.openSession();

         //开始事务

                   Transaction tx = session.beginTransaction();

                   //创建UserTable类实例

                    UserTable userTable=new UserTable();

         //设置userName属性

                    userTable.setUserName("张三");

         //设置password属性

                    userTable.setPassword("123456");

         //设置power属性

                    userTable.setPower("图书管理员");

         //插入和更新数据库

                    session.saveOrUpdate(userTable);

         //提交事务

                   tx.commit();

         //关闭会话

                   session.close();

(4)从数据库中删除记录的基本操作。

//取得 SessionFactory实例

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

//打开一个Session实例

                   Session session = sessionFactory.openSession();

//开始事务

                   Transaction tx = session.beginTransaction();

         //创建UserTable类实例

                   UserTable userTable=new UserTable();

         //设置userName属性

                   userTable.setUserName("张三");

         //设置password属性

                   userTable.setPassword("123456");

         //设置power属性

                   userTable.setPower("图书管理员");

                   // 删除操作

                   // session.delete(userTable);

         //提交事务

                   tx.commit();

                   //关闭会话

session.close();

(5)查询数据库的基本操作。

//取得 SessionFactory实例

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

//打开一个Session实例

                   Session session = sessionFactory.openSession();

//开始事务

                   Transaction tx = session.beginTransaction();

                   // 查询hql语句

                   String hql = "from UserTable where UserName='张三' and Password='123456'";

         //执行查询,查询结果为Query实例

                   Query userList = session.createQuery(hql);

         //将查询结果放到一个list中

                   List list = userList.list();

         //提交事务

                   tx.commit();

         //关闭session

                   session.close();
8.8  系统主界面

系统主界面是整个系统的入口,所有系统功能都是通过主界面来实现的。主界面的运行效果图如图8-2所示,本节实现该主界面。
8.8.1  主界面窗体的创建

本小节将利用Swing中的图形控件生成主界面的窗体、菜单等内容,并且为每个菜单项添加了事件监听者。关于Swing的相关知识超出了本书介绍的范围,读者可以查看相关资料,本小节假设读者对Swing 有一定的了解。
跟我做

(1)在“Library”工程的“src”文件夹中创建“library.main”包,创建LibraryWindow.java文件,继承Jframe类,并实现ActionListener接口。该文件是整个图书管理系统的入口,完成界面菜单的生成和菜单动作的响应等功能。

(2)编辑LibraryWindow.java文件,在其构造函数中输入如下代码:

         public LibraryWindow() {

                   super("图书管理系统");

                   // --系统管理菜单--

                   menuBar = new JMenuBar();

                   systemMenu = new JMenu("系统管理");

                   // --用户管理菜单--

userMGRMenu = new JMenu("用户管理");

// --用户登录菜单--

                   userLoginMenuItem = new JMenuItem("用户登录");

         // --添加用户菜单--

                   userAddMenuItem = new JMenuItem("添加用户");

// --修改用户菜单--

                   userModifyMenuItem = new JMenuItem("修改用户");

         //删除用户菜单

                   userDeleteMenuItem = new JMenuItem("删除用户");

         //退出菜单

                   exitMenuItem = new JMenuItem("退出");

         // --将“用户登录”子菜单项加入到“系统菜单”中--

                   systemMenu.add(userLoginMenuItem);

         // --将“添加用户”子菜单项加入到“用户管理”菜单中--

                   userMGRMenu.add(userAddMenuItem);

         // --将“修改用户”子菜单项加入到“用户管理”菜单中--

                   userMGRMenu.add(userModifyMenuItem);

          // --将“删除用户”子菜单项加入到“用户管理”菜单中--

                   userMGRMenu.add(userDeleteMenuItem);

          // --将“用户管理”子菜单项加入到“系统管理”菜单中--

                   systemMenu.add(userMGRMenu);

          // --将“退出”子菜单项加入到“系统管理”菜单中--

                   systemMenu.add(exitMenuItem);

          // --为“用户登录”菜单项添加动作监听者--

                   userLoginMenuItem.addActionListener(this);

          // --为“添加用户”菜单项添加动作监听者--

                   userAddMenuItem.addActionListener(this);

          // --为“修改用户”菜单项添加动作监听者--

                   userModifyMenuItem.addActionListener(this);

          // --为“删除用户”菜单项添加动作监听者--

                   userDeleteMenuItem.addActionListener(this);

          // --为“退出”菜单项添加动作监听者--

                   exitMenuItem.addActionListener(this);

          // --将“系统管理”菜单项加入到菜单栏上--

                   menuBar.add(systemMenu);

                   // ---书籍管理菜单--

                   bookMGRMenu = new JMenu("书籍管理");

          // --“添加书籍”菜单--

                   bookAddMenuItem = new JMenuItem("添加书籍");

         // --“修改书籍”菜单--

                   bookModifyMenuItem = new JMenuItem("修改书籍");

         // --“删除书籍”菜单--

                   bookDeleteMenuItem = new JMenuItem("删除书籍");

         // --将“添加书籍”菜单加入到“书籍管理”菜单项中--

                   bookMGRMenu.add(bookAddMenuItem);

         // --将“修改书籍”菜单加入到“书籍管理”菜单项中--

                   bookMGRMenu.add(bookModifyMenuItem);

         // --将“删除书籍”菜单加入到“书籍管理”菜单项中--

                   bookMGRMenu.add(bookDeleteMenuItem);

                   // --将“添加书籍”菜单添加事件监听者--

bookAddMenuItem.addActionListener(this);

// --将“修改书籍”菜单添加事件监听者--

                   bookModifyMenuItem.addActionListener(this);

         // --将“删除书籍”菜单添加事件监听者--

                   bookDeleteMenuItem.addActionListener(this);

         //将“书籍管理”菜单添加到菜单栏中

                   menuBar.add(bookMGRMenu);

                   // --借书管理菜单--

                   borrowBookMenu = new JMenu("借书管理");

         //“书籍出借”菜单

                   borrowBookMenuItem = new JMenuItem("书籍出借");

         //“出借信息修改“菜单

                   borrowInfoMenuItem = new JMenuItem("出借信息修改");

         //将“书籍出借”菜单加入到“书籍管理”菜单中

                   borrowBookMenu.add(borrowBookMenuItem);

         //将“出借信息修改”菜单加入到“书籍管理”菜单中

                   borrowBookMenu.add(borrowInfoMenuItem);

         //为“书籍出借”菜单添加事件监听者

                   borrowBookMenuItem.addActionListener(this);

         //为“出借信息修改”菜单添加事件监听者

                   borrowInfoMenuItem.addActionListener(this);

         //将“借书管理”菜单加入到菜单栏中

                   menuBar.add(borrowBookMenu);

                   // --还书管理菜单--

                   returnBookMenu = new JMenu("还书管理");

         //“书籍还入”菜单

                   returnBookMenuItem = new JMenuItem("书籍还入");

         //“书籍还入信息修改”菜单

                   returnInfoMenuItem = new JMenuItem("书籍还入信息修改");

         //将“书籍还入”菜单加入到“还书管理”菜单中

                   returnBookMenu.add(returnBookMenuItem);

         //将“书籍还入信息修改”菜单加入到“还书管理”菜单中

                   returnBookMenu.add(returnInfoMenuItem);

         //为“书籍还入”菜单添加事件监听者

                   returnBookMenuItem.addActionListener(this);

         //为“书籍还入信息修改”菜单添加事件监听者

                   returnInfoMenuItem.addActionListener(this);

         //将“还书管理”菜单加入到菜单栏中

                   menuBar.add(returnBookMenu);

                   // --信息一览菜单--

                   infoBrowseMenu = new JMenu("信息查询");

         //”书籍列表”菜单

                   bookListMenuItem = new JMenuItem("书籍列表");

         //“借阅情况表”菜单

                   borrowBookListMenuItem = new JMenuItem("借阅情况表");

         //“用户列表”菜单

                   userListMenuItem = new JMenuItem("用户列表");

         //将“书籍列表”菜单添加到“信息一览”菜单中

                   infoBrowseMenu.add(bookListMenuItem);

                   //将“出借书籍列表”菜单添加到“信息一览”菜单中

infoBrowseMenu.add(borrowBookListMenuItem);

//将“用户列表”菜单添加到“信息一览”菜单中

                   infoBrowseMenu.add(userListMenuItem);

         //为“书籍列表”菜单添加事件监听者

                   bookListMenuItem.addActionListener(this);

         //为“出借图书列表”菜单添加事件监听者

                   borrowBookListMenuItem.addActionListener(this);

         //为“用户列表”菜单添加事件监听者

                   userListMenuItem.addActionListener(this);

         //将“信息一览”菜单加入到菜单栏中

                   menuBar.add(infoBrowseMenu);

                   //为Window添加菜单栏

                   setJMenuBar(menuBar);

         //图片Label

                   titleLabel = new JLabel(new ImageIcon(".\\pic.jpg"));

                   container = getContentPane();

                   container.setLayout(new BorderLayout());

                   panel1 = new JPanel();

                   panel1.setLayout(new BorderLayout());

                   panel1.add(titleLabel, BorderLayout.CENTER);

                   container.add(panel1, BorderLayout.CENTER);

                   setBounds(100, 50, 400, 300);

                   show();

                   // --设置初始功能:--

                   userMGRMenu.setEnabled(false);

                   bookMGRMenu.setEnabled(false);

                   borrowBookMenu.setEnabled(false);

                   returnBookMenu.setEnabled(false);

                   infoBrowseMenu.setEnabled(false);

         }

生成了系统管理、书籍管理、借书管理、还书管理和信息一览5个菜单项,并且为其子菜单项添加了事件监听者。
8.8.2  为每个菜单项添加响应事件

本小节将在8.8.1节的基础上,为主界面的每个菜单项添加事件响应函数,并且控制每个新创建窗口的显示位置。在actionPerformed(ActionEvent)方法中通过参数 ActionEvent对象的getActionCommand()方法可以得到用户点击的菜单项,然后进行不同的处理。
跟我做

(1)右击LibraryWindow类的任意空白区域,在快捷菜单中选择【源代码】|【覆盖/实现方法】命令,打开【覆盖/实现方法】对话框,选择 “actionPerformed(ActionEvent)”,单击【确定】按钮,生成actionPerformed方法。

(2)编辑LibraryWindow.java文件,在actionPerformed方法中输入如下代码:

         // --设置每个菜单点击后出现的窗口和窗口显示的位置--

         public void actionPerformed(ActionEvent e) {

         //“用户登录”菜单的响应函数

                   if (e.getActionCommand() == "用户登录") {

              //创建用户登录窗口

                            UserLogin userLoginFrame = new UserLogin(this);

                            Dimension frameSize = userLoginFrame.getPreferredSize();

                            Dimension mainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的位置和大小

                            userLoginFrame.setLocation((mainFrameSize.width - frameSize.width)

                                               / 2 + loc.x, (mainFrameSize.height - frameSize.height) / 2

                                               + loc.y);

                            userLoginFrame.pack();

                            userLoginFrame.show();

                   } else if (e.getActionCommand() == "添加用户") {

              //“添加用户”菜单的响应函数

                            UserAdd UserAddFrame = new UserAdd();

                            Dimension FrameSize = UserAddFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            UserAddFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            UserAddFrame.pack();

                            UserAddFrame.show();

                   } else if (e.getActionCommand() == "修改用户") {

              //“修改用户”菜单的响应函数

                            UserModify UserModifyFrame = new UserModify();

                            Dimension FrameSize = UserModifyFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            UserModifyFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            UserModifyFrame.pack();

                            UserModifyFrame.show();

                   } else if (e.getActionCommand() == "删除用户") {

              //初始化“删除用户“窗口

                            UserDelete UserDeleteFrame = new UserDelete();

                            Dimension FrameSize = UserDeleteFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            UserDeleteFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            UserDeleteFrame.pack();

              //显示窗口

                            UserDeleteFrame.show();

                   } else if (e.getActionCommand() == "添加书籍") {

              //“添加书籍”窗口

                            BookAdd BookAddFrame = new BookAdd();

                            Dimension FrameSize = BookAddFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

             //设置窗口的大小和位置

                            BookAddFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BookAddFrame.pack();

              //显示添加书籍窗口

                            BookAddFrame.show();

                  } else if (e.getActionCommand() == "修改书籍") {

              //初始化“修改书籍”窗口

                            BookModify BookModifyFrame = new BookModify();

                            Dimension FrameSize = BookModifyFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BookModifyFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BookModifyFrame.pack();

              //显示“修改书籍”窗口

                            BookModifyFrame.show();

                   } else if (e.getActionCommand() == "删除书籍") {

              //初始化“删除书籍”窗口

                            BookDelete BookDeleteFrame = new BookDelete();

                            Dimension FrameSize = BookDeleteFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BookDeleteFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BookDeleteFrame.pack();

              //显示窗口

                            BookDeleteFrame.show();

                   } else if (e.getActionCommand() == "书籍出借") {

              //初始化“书籍出借”窗口

                            BorrowBook BorrowBookFrame = new BorrowBook();

                            Dimension FrameSize = BorrowBookFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BorrowBookFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BorrowBookFrame.pack();

              //显示窗口

                            BorrowBookFrame.show();

                   } else if (e.getActionCommand() == "出借信息修改") {

              //初始化“出借信息修改”窗口

                            BorrowInfo BorrowInfoFrame = new BorrowInfo();

                            Dimension FrameSize = BorrowInfoFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BorrowInfoFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BorrowInfoFrame.pack();

              //显示窗口

                            BorrowInfoFrame.show();

                   } else if (e.getActionCommand() == "书籍还入") {

              //初始化“书籍还入”窗口

                            ReturnBook returnBookFrame = new ReturnBook();

                            Dimension FrameSize = returnBookFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            returnBookFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            returnBookFrame.pack();

              //显示窗口

                            returnBookFrame.show();

                   } else if (e.getActionCommand() == "书籍还入信息修改") {

              //初始化“书籍还入信息修改”窗口

                            ReturnInfo returnInfoFrame = new ReturnInfo();

                            Dimension FrameSize = returnInfoFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            returnInfoFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            returnInfoFrame.pack();

              //显示窗口

                            returnInfoFrame.show();

                   } else if (e.getActionCommand() == "书籍列表") {

              //初始化“书籍列表”窗口

                            BookList BookListFrame = new BookList();

                            Dimension FrameSize = BookListFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BookListFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            BookListFrame.pack();

              //显示窗口

                            BookListFrame.show();

                   } else if (e.getActionCommand() == "借阅情况表") {

              //初始化“借阅情况表”窗口

                            BorrowBookList BorrowBookListFrame = new BorrowBookList();

                            Dimension FrameSize = BorrowBookListFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            BorrowBookListFrame.setLocation(

                                               (MainFrameSize.width - FrameSize.width) / 2 + loc.x,

                                               (MainFrameSize.height - FrameSize.height) / 2 + loc.y);

                            BorrowBookListFrame.pack();

              //显示窗口

                            BorrowBookListFrame.show();

                   } else if (e.getActionCommand() == "用户列表") {

              //显示“用户列表”窗口

                            UserList UserListFrame = new UserList();

                            Dimension FrameSize = UserListFrame.getPreferredSize();

                            Dimension MainFrameSize = getSize();

                            Point loc = getLocation();

              //设置窗口的大小和位置

                            UserListFrame.setLocation((MainFrameSize.width - FrameSize.width)

                                               / 2 + loc.x, (MainFrameSize.height - FrameSize.height) / 2

                                               + loc.y);

                            UserListFrame.pack();

              //显示窗口

                            UserListFrame.show();

                   } else if (e.getActionCommand() == "退出") {

                            this.dispose();

              //系统退出

                            System.exit(0);

                   }

         }

该方法为书籍管理系统的各个菜单项添加了事件响应函数,并设置了窗口的大小和
位置。
8.8.3  为系统增加权限控制

本小节为系统增加权限控制,从而保证系统的安全性,共分为系统管理员、书籍管理员和借阅管理员3个角色。通过Menu对象的setEnabled(true)方法,根据不同角色的权限分配设置各个菜单项的显示与否。其中的系统管理员具有全部的权限。
跟我做

在“LibraryWindow.java”中创建 “setEnable”方法,编辑该方法,输入如下代码:

         public void setEnable(String powerType) {

                   if (powerType.trim().equals("系统管理员")) {

            //系统管理员具有全部的权限

                            userMGRMenu.setEnabled(true);

                            bookMGRMenu.setEnabled(true);

                            borrowBookMenu.setEnabled(true);

                            returnBookMenu.setEnabled(true);

                            infoBrowseMenu.setEnabled(true);

                            userListMenuItem.setEnabled(true);

                   } else if (powerType.trim().equals("书籍管理员")) {

                            //书籍管理员拥有书籍管理和信息查询权限

                            userMGRMenu.setEnabled(false);

                            bookMGRMenu.setEnabled(true);

                            borrowBookMenu.setEnabled(false);

                            returnBookMenu.setEnabled(false);

                            infoBrowseMenu.setEnabled(true);

                            userListMenuItem.setEnabled(false);

                   } else if (powerType.trim().equals("借阅管理员")) {

                            //借阅管理员拥有借书管理、还书管理和信息查询权限

                            userMGRMenu.setEnabled(false);

                            bookMGRMenu.setEnabled(false);

                            borrowBookMenu.setEnabled(true);

                            returnBookMenu.setEnabled(true);

                            infoBrowseMenu.setEnabled(true);

                            userListMenuItem.setEnabled(false);

                   } else if (powerType.trim().equals("else")) {

                            //其他角色没有任何权限

                            userMGRMenu.setEnabled(false);

                            bookMGRMenu.setEnabled(false);

                            borrowBookMenu.setEnabled(false);

                            returnBookMenu.setEnabled(false);

                            infoBrowseMenu.setEnabled(false);

                   }

         }
8.9  用户管理

用户管理包括用户登录和用户登录信息维护两大部分,用户管理又包括添加用户、删除用户和修改用户3部分功能。本节实现用户管理功能。用户管理功能是典型的数据库操作,包括记录的添加、删除和修改等操作。经过本节的学习可以熟练掌握通过Hibernate实现对数据库的操作。
8.9.1  用户登录功能的实现

根据实现了图书管理系统的用户登录类,根据用户名和密码查询用户相应的权限。根据查询的权限结果,设置相应菜单项的显示与否。取得用户名和用户密码之后,通过如下代码段从数据库中查询相应的用户信息,如果查询的结果为空,说明该用户没有注册,将提示用户为非法用户。

String hql = "from UserTable where UserName='"

                                               + userNameText.getText().trim() + "' and Password='"

                                               + passwordStr + "'";

// 执行查询

Query userList = session.createQuery(hql);
跟我做

在“Library”工程的“src”文件夹中创建 “library.user”包,并在其中创建“UserLogin.java”文件,在该文件中输入如下代码:

package library.user;

/**

* 用户登录类,根据用户名和密码查询用户相应的权限

*

* @author lianhw

*

*/

public class UserLogin extends JFrame implements ActionListener {

         LibraryWindow libraryWindow;

         JPanel panel1, panel2;

         JLabel userNameLabel, passwordLabel;

         JTextField userNameText;

         JPasswordField passwordText;

         JButton yesButton, cancelButton;

         Container container;

         ResultSet rs;

         public UserLogin(LibraryWindow mainFrame) {

                   super("用户登录");

                   this.libraryWindow = mainFrame;

                   // “用户名”标签

                   userNameLabel = new JLabel("用户名", JLabel.CENTER);

                   // “密码”标签

                   passwordLabel = new JLabel("密码", JLabel.CENTER);

                   // 用户名输入框

                   userNameText = new JTextField(10);

                   // 密码输入框

                   passwordText = new JPasswordField(10);

                   // “确定”按钮

                   yesButton = new JButton("确定");

                   // “取消”按钮

                   cancelButton = new JButton("取消");

                   // 为“确定”按钮增加事件监听者

                   yesButton.addActionListener(this);

                   // 为“取消”按钮增加事件监听者

                   cancelButton.addActionListener(this);

                   panel1 = new JPanel();

                   panel1.setLayout(new GridLayout(2, 2));

                   panel2 = new JPanel();

                   container = getContentPane();

                   container.setLayout(new BorderLayout());

                   panel1.add(userNameLabel);

                   panel1.add(userNameText);

                   panel1.add(passwordLabel);

                   panel1.add(passwordText);

                   container.add(panel1, BorderLayout.CENTER);

                   panel2.add(yesButton);

                   panel2.add(cancelButton);

                   container.add(panel2, BorderLayout.SOUTH);

                   // 设置窗口大小

                   setSize(300, 300);

         }

         /**

          * 动作响应方法,完成数据库的查询和权限的设置功能

          *

          * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)

          */

         public void actionPerformed(ActionEvent action) {

                   if (action.getSource() == cancelButton) {

                            // 如果单击“取消”按钮后执行的动作

                            libraryWindow.setEnable("else");

                            this.dispose();

                   } else {

                            // 如果单击“确定”按钮后执行的动作

                            char[] password = passwordText.getPassword();

                            // 将用户输入的密码由字符数组转换成字符串

                            String passwordStr = new String(password);

                            // 判断用户输入的用户名是否为空

                            if (userNameText.getText().trim().equals("")) {

                                     JOptionPane.showMessageDialog(null, "用户名不可为空!");

                                     return;

                            }

                            // 判断用户输入的密码是否为空

                            if (passwordStr.equals("")) {

                                     JOptionPane.showMessageDialog(null, "密码不可为空!");

                                     return;

                            }

                            // 取得SessionFactory

                            SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

                            // 打开session

                            Session session = sessionFactory.openSession();

                            // 创建一个事务

                            Transaction tx = session.beginTransaction();

                            // hsql执行语句

                            String hql = "from UserTable where UserName='"

                                               + userNameText.getText().trim() + "' and Password='"

                                               + passwordStr + "'";

                            // 执行查询

                            Query userList = session.createQuery(hql);

                            // 将查询结果放置到一个list链表中

                            List list = userList.list();

                            // 标记该用户是否存在

                            boolean isExist = false;

                            // 如果list的长度为0,表示该用户不存在

                            if (list.size() > 0)

                                     isExist = true;

                            if (!isExist) {

                                     // 提示用户名和密码不正确

                                     JOptionPane.showMessageDialog(null, "用户名不存在或者密码不正确!");

                                     libraryWindow.setEnable("else");

                            } else {

                                     // 取得该用户的权限级别

                                     UserTable user = (UserTable) list.get(0);

                                     // 设置权限

                                     libraryWindow.setEnable(user.getPower().trim());

                                     // 事务提交

                                     tx.commit();

                                     // 关闭session

                                     session.close();

                                     this.dispose();

                            }

                   }

         }

}

文本框: 图8-17 用户登录窗口该类实现了用户登录功能,其运行效果如图8-17所示。根据用户输入的用户名和密码查询数据库中的UserTable表验证该用户是否是注册用户。

该类使用Hibernate从数据库中查询需要的信息,通过验证后根据用户不同的权限设置其相应权限。
文本框: 图8-18 新增用户效果图8.9.2  添加用户类的实现

本小节实现增加用户类,将新用户信息保存到数据库中,从而完成用户的注册。其运行效果如图8-18所示。将新用户的用户名、密码和登录权限等信息提交到数据库中保存。

该类使用Hibernate实现了数据库的插入或更新操作,通过本类可以看出Hibernate操作数据库完全以面向对象的方式来实现。
跟我做

在 “Library”工程的“library.user”包中创建“UserAdd.java”文件,在该文件中输入如下代码:

package library.user;

/**

* 增加用户类,将用户信息保存到数据库中

*

* @author lianhw

*

*/

public class UserAdd extends JFrame implements ActionListener {

       

       

         Container container;

         JPanel panel1, panel2;

         JLabel userNameLabel, passwordLabel, passwordConfirmLabel, loginPrivelegeLabel;

         JTextField userNameText;

         JPasswordField passwordText, passwordConfirmText;

         JComboBox loginPrivelegeComboBox;

         JButton addButton, cancelButton;

         public UserAdd() {

                   super("添加用户");

                   container = getContentPane();

                   container.setLayout(new BorderLayout());

                   //“用户名”标签

                   userNameLabel = new JLabel("用户名", JLabel.CENTER);

                   //“密码”标签

                   passwordLabel = new JLabel("密码", JLabel.CENTER);

                   //“确认密码”标签

                   passwordConfirmLabel = new JLabel("确认密码", JLabel.CENTER);

                   //“登录权限”标签

                   loginPrivelegeLabel = new JLabel("登录权限", JLabel.CENTER);

                   //输入用户名的文本框

                   userNameText = new JTextField(10);

                   //输入密码的文本框

                   passwordText = new JPasswordField(10);

                   //密码确认文本框

                   passwordConfirmText = new JPasswordField(10);

                   //选择用户权限

                   loginPrivelegeComboBox = new JComboBox();

                   loginPrivelegeComboBox.addItem("系统管理员");

                   loginPrivelegeComboBox.addItem("书籍管理员");

                   loginPrivelegeComboBox.addItem("借阅管理员");

                   //“添加”按钮

                   addButton = new JButton("添加");

                   //“取消”按钮

                   cancelButton = new JButton("取消");

                   //为“添加”按钮加入事件监听者

                   addButton.addActionListener(this);

                   //为“取消”按钮加入事件监听者

                   cancelButton.addActionListener(this);

                   panel1 = new JPanel();

                   panel1.setLayout(new GridLayout(4, 2));

                   panel1.add(userNameLabel);

                   panel1.add(userNameText);

                   panel1.add(passwordLabel);

                   panel1.add(passwordText);

                   panel1.add(passwordConfirmLabel);

                   panel1.add(passwordConfirmText);

                   panel1.add(loginPrivelegeLabel);

                   panel1.add(loginPrivelegeComboBox);

                   container.add(panel1, BorderLayout.CENTER);

                   panel2 = new JPanel();

                   panel2.add(addButton);

                   panel2.add(cancelButton);

                   container.add(panel2, BorderLayout.SOUTH);

                   //设置窗口的大小

                   setSize(300, 300);

         }

         /**

          * 动作响应方法,将新增的用户信息提交到数据库中

          *

          * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)

          */

         public void actionPerformed(ActionEvent action) {

                   if (action.getSource() == cancelButton) {

                            // 单击“取消”按钮不作任何事情

                            this.dispose();

                   } else if (action.getSource() == addButton) {

                            // 单击“添加”按钮后将用户信息提交到数据库中

                            if (userNameText.getText().trim().equals("")) {

                                     // 判断用户名是否为空

                                     JOptionPane.showMessageDialog(null, "用户名不能为空!");

                            } else if (passwordText.getText().trim().equals("")) {

                                     // 判断密码是否为空

                                     JOptionPane.showMessageDialog(null, "密码不能为空!");

                            } else if (!passwordText.getText().trim().equals(

                                               passwordConfirmText.getText().trim())) {

                                     // 判断两次输入的密码是否一致

                                     JOptionPane.showMessageDialog(null, "两次输入的密码不一致!");

                            } else {

                                     // 取得SessionFactory

                                     SessionFactory sessionFactory = HibernateUtil

                                                        .getSessionFactory();

                                     // 打开session

                                     Session session = sessionFactory.openSession();

                                     // 创建一个事务

                                     Transaction tx = session.beginTransaction();

  
  相关解决方案