1,创建图书库存表用来存储图书库存信息,表结构如下
字段 类型 说明
id Varchar(5) 图书id
bookName Varchar(100) 图书名称
price int 价格
publishTime datetime 出版时间
publisher Varchar(50) 出版社
quantity int 库存数量
相应的数据 如下
Id bookName Price publishTime Publisher quantity
b 0001 Java面向对象 45 2008-08-10 商务 20
B0002 Web设计基础 40 2010-08-12 机械 15
B0003 Javaweb设计 50 2011-10-11 人民 40
B0004 Javaee框架 45 2012-12-20 电子 20
2,创建图书销售记录表book_order,结构如下
字段 类型 说明
Id int 销售主键
Book_id int 图书ID
saleDate datetime 销售日期
quantity int 销售数量
3,针对book表和book_order表编写实体类book和bookOrder,配置hibernate映射文件,需要配置book和bookOrder之间的双向一对多(多对一)关系。
4,编写数据访问类bookDao和bookOrderDao,分别完成查看所有库存图书情况,图书销售,查看图书销售详情等方法。
5,编写业务类bookService和bookOrderService,分别完成查看所有库存图书情况,图书销售,查看图书销售详情等方法。
6,编写struts2的action类bookAction和bookOrderAction,分别完成查看所有库存图书情况,图书销售,查看图书销售详情等方法。
7,编写图书困村列表页面books.jsp,以表格形式显示所有的图书,需要显示的内容包括图书的ID,图书名称,出版时间,出版社,价格,库存数量,并按照出版时间倒序排列。点击图书名称时进入图书销售列表页,点击销售,进入对应的图书销售页面。
图书列表页面books.jsp效果类似下面
ID 图书名称 出版时间 出版社 价格 数量 销售
B0005 嵌入式开发 2013-03-15 商务 40 10 销售
B0003 Javaweb 设计 2012-02-03 人民 50 40 销售
B0004 Javaee 框架 2011-05-07 电子 45 20 销售
b0002 Web设计基础 2010-03-16 机械 40 15 销售
B0001 Java面向对象 2008-08-10 商务 45 20 销售
B0002 Web设计基础 2010-03-16 机械 40 15 销售
B0001 Java面向对象 2008-08-10 商务 45 20 销售
点击销售,进入对应图书的销售页面saleBook.jsp,销售数量需要填写,其他信息是只读的,点击销售进行图书的销售。销售完毕后,返回图书库存列表页面。图书销售页面saleBook.jsp效果如下
图书销售
图书名称 Java web设计
出版社 人民
出版日期 2012-02-03
库存数量 40
销售数量
销售          取消
在图书列表页面点击图书名称,则显示对应图书的销售列表页。图书销售列表页saleBookList.jsp效果如下图
图书名称 出版社 价格 销售日期 数量
Java web设计  人民 50 2012-04-01 2
Java web设计 人民 50 2012-06-01 5
Java web设计 人民 50 2012-047-06 15
Java web设计 人民 50 201210-01 10
其中dao和service应该怎么写啊

解决方案 »

  1.   

    DBHelper代码
     package com.hebut.util;  import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet ; import java.sql.SQLException; import java.sql.Statement;  public final class DBHelper {      // 此方法为获取数据库连接     public static Connection getConnection() {         Connection conn = null ;          try {             String driver = "com.mysql.jdbc.Driver"; // 数据库驱动             String url = "jdbc:MySQL://127.0.0.1:3306/school";// 数据库             String user = "root"; // 用户名             String password = "hadoop"; // 密码             Class.forName (driver); // 加载数据库驱动             if (null == conn) {                 conn = DriverManager.getConnection (url, user, password);             }         } catch (ClassNotFoundException e) {             System.out .println("Sorry,can't find the Driver!");             e.printStackTrace();         } catch (SQLException e) {             e.printStackTrace();         } catch (Exception e) {             e.printStackTrace();         }         return conn;     }      /**      * 增删改【 Add 、 Del 、 Update 】      *      * @param sql      * @return int      */     public static int executeNonQuery(String sql) {         int result = 0;         Connection conn = null ;         Statement stmt = null ;          try {             conn = getConnection ();             stmt = conn.createStatement();             result = stmt.executeUpdate(sql);         } catch (SQLException err) {             err.printStackTrace();             free (null , stmt, conn);         } finally {             free (null , stmt, conn);         }          return result;     }      /**      * 增删改【 Add 、 Delete 、 Update 】      *      * @param sql      * @param obj      * @return int      */     public static int executeNonQuery(String sql, Object... obj) {         int result = 0;         Connection conn = null ;         PreparedStatement pstmt = null ;          try {             conn = getConnection ();             pstmt = conn.prepareStatement(sql);              for (int i = 0; i < obj.length; i++) {                 pstmt.setObject(i + 1, obj[i]);             }              result = pstmt.executeUpdate();         } catch (SQLException err) {             err.printStackTrace();             free (null , pstmt, conn);         } finally {             free (null , pstmt, conn);         }         return result;     }      /**      * 查【 Query 】      *      * @param sql      * @return ResultSet      */     public static ResultSet executeQuery(String sql) {         Connection conn = null ;         Statement stmt = null ;         ResultSet rs = null ;          try {             conn = getConnection ();             stmt = conn.createStatement();             rs = stmt.executeQuery(sql);         } catch (SQLException err) {             err.printStackTrace();             free (rs, stmt, conn);         }          return rs;     }      /**      * 查【 Query 】      *      * @param sql      * @param obj      * @return ResultSet      */     public static ResultSet executeQuery(String sql, Object... obj) {         Connection conn = null ;         PreparedStatement pstmt = null ;         ResultSet rs = null ;          try {             conn = getConnection ();             pstmt = conn.prepareStatement(sql);                         for (int i = 0; i < obj.length; i++) {                 pstmt.setObject(i + 1, obj[i]);             }                         rs = pstmt.executeQuery();         } catch (SQLException err) {             err.printStackTrace();             free (rs, pstmt, conn);         }          return rs;     }      /**      * 判断记录是否存在      *      * @param sql      * @return Boolean      */     public static Boolean isExist(String sql) {         ResultSet rs = null ;          try {             rs = executeQuery (sql);             rs.last();             int count = rs.getRow();             if (count > 0) {                 return true ;             } else {                 return false ;             }         } catch (SQLException err) {             err.printStackTrace();             free (rs);             return false ;         } finally {             free (rs);         }     }      /**      * 判断记录是否存在      *      * @param sql      * @return Boolean      */     public static Boolean isExist(String sql, Object... obj) {         ResultSet rs = null ;          try {             rs = executeQuery (sql, obj);             rs.last();             int count = rs.getRow();             if (count > 0) {                 return true ;             } else {                 return false ;             }         } catch (SQLException err) {             err.printStackTrace();             free (rs);             return false ;         } finally {             free (rs);         }     }      /**      * 获取查询记录的总行数      *      * @param sql      * @return int      */     public static int getCount(String sql) {         int result = 0;         ResultSet rs = null ;          try {             rs = executeQuery (sql);             rs.last();             result = rs.getRow();         } catch (SQLException err) {             free (rs);             err.printStackTrace();         } finally {             free (rs);         }          return result;     }      /**      * 获取查询记录的总行数      *      * @param sql      * @param obj      * @return int      */     public static int getCount(String sql, Object... obj) {         int result = 0;         ResultSet rs = null ;          try {             rs = executeQuery (sql, obj);             rs.last();             result = rs.getRow();         } catch (SQLException err) {             err.printStackTrace();         } finally {             free (rs);         }          return result;     }      /**      * 释放【 ResultSet 】资源      *      * @param rs      */     public static void free(ResultSet rs) {         try {             if (rs != null ) {                 rs.close();             }         } catch (SQLException err) {             err.printStackTrace();         }     }      /**      * 释放【 Statement 】资源      *      * @param st      */     public static void free(Statement st) {         try {             if (st != null ) {                 st.close();             }         } catch (SQLException err) {             err.printStackTrace();         }     }      /**      * 释放【 Connection 】资源      *      * @param conn      */     public static void free(Connection conn) {         try {             if (conn != null ) {                 conn.close();             }         } catch (SQLException err) {             err.printStackTrace();         }     }      /**      * 释放所有数据资源      *      * @param rs      * @param st      * @param conn      */     public static void free(ResultSet rs, Statement st, Connection conn) {         free (rs);         free (st);         free (conn);     } } 
      

  2.   

    你把数据库的基本操作,增删改查弄懂了自然就会写的。如果你是新手就不要那么快就struts什么的,先找韩顺平或者马士兵老师的视频看看jsp,servlet怎么写的。然后慢慢在过渡,没学到东西你问人怎么写也没用啊。
      

  3.   

    应该是用MVC的方法来做吧
      

  4.   

    既然你不会的是其中dao和service,那么你先把action写出来好么?
    这样一步一步的看需要什么,就写什么,service和dao就出来了。
      

  5.   

    应该用mvc方法来做,其实这个很好做。你先做个简单的增删改查练练,练熟了就自然会了。
      

  6.   

    错误提示%%%% Error Creating SessionFactory %%%%
    org.hibernate.MappingException: Association references unmapped class: Book
    at org.hibernate.cfg.HbmBinder.bindCollectionSecondPass(HbmBinder.java:2473)
    at org.hibernate.cfg.HbmBinder$CollectionSecondPass.secondPass(HbmBinder.java:2752)
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1221)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
    at com.haiersoft.util.HibernateUtils.<clinit>(HibernateUtils.java:18)
    at com.haiersoft.dao.BookDao.getBook(BookDao.java:15)
    at com.haiersoft.service.BookService.getBookInformation(BookService.java:12)
    at test.main(test.java:12)
    %%%% Error Creating SessionFactory %%%%
    org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/haiersoft/pojos/Book.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:671)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1679)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1647)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1626)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1600)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1520)
    at com.haiersoft.util.HibernateUtils.rebuildSessionFactory(HibernateUtils.java:55)
    at com.haiersoft.util.HibernateUtils.getSession(HibernateUtils.java:39)
    at com.haiersoft.dao.BookDao.getBook(BookDao.java:15)
    at com.haiersoft.service.BookService.getBookInformation(BookService.java:12)
    at test.main(test.java:12)
    Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.haiersoft.pojos.Book
    at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2407)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:173)
    at org.hibernate.cfg.Configuration.add(Configuration.java:771)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:606)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:668)
    ... 10 more
    Exception in thread "main" java.lang.NullPointerException
    at com.haiersoft.dao.BookDao.getBook(BookDao.java:17)
    at com.haiersoft.service.BookService.getBookInformation(BookService.java:12)
    at test.main(test.java:12)
    我的book.java
    package com.haiersoft.pojos;import java.io.Serializable;
    import java.util.Date;public class Book implements Serializable{
    private String id;
    private String bookName;
    private int price;
    private Date publishTime;
    private String publisher;
    private int quantity;
    private BookOrder bookOrder;

    public String getId() {
    return id;
    }
    public void setId(String id) {
    this.id = id;
    }
    public String getBookName() {
    return bookName;
    }
    public void setBookName(String bookName) {
    this.bookName = bookName;
    }
    public int getPrice() {
    return price;
    }
    public void setPrice(int price) {
    this.price = price;
    }
    public Date getPublishTime() {
    return publishTime;
    }
    public void setPublishTime(Date publishTime) {
    this.publishTime = publishTime;
    }
    public String getPublisher() {
    return publisher;
    }
    public void setPublisher(String publisher) {
    this.publisher = publisher;
    }
    public int getQuantity() {
    return quantity;
    }
    public void setQuantity(int quantity) {
    this.quantity = quantity;
    }
    public BookOrder getBookOrder() {
    return bookOrder;
    }
    public void setBookOrder(BookOrder bookOrder) {
    this.bookOrder = bookOrder;
    }
    public Book(String id,String bookName,int price, Date publishTime, String publisher, int quantity){
    this.id = id;
    this.bookName = bookName;
    this.price = price;
    this.publishTime = publishTime;
    this.publisher = publisher;
    this.quantity = quantity;
    }
    public Book(){}
    }
    我的bookdao。java
    package com.haiersoft.dao;import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;import com.haiersoft.pojos.Book;
    import com.haiersoft.util.HibernateUtils;public class BookDao {
    //根据id获得图书的信息
    public Book getBook(String id){
    Session s = HibernateUtils.getSession();
    String hql = "from Book where id = ?";
    Book book = (Book)s.get(Book.class, id);
    s.close();
    return book;
    }
    //获得所有库存图书的信息
    public List<Book> getAllBook(){
    Session s = HibernateUtils.getSession();
    String hql = "from Book";
    Query query = s.createQuery(hql);
    List list = query.list();
    return list;
    }
    //根据id减少库存的图书
    public void deleteBook(Integer id){
    Session s = HibernateUtils.getSession();
    Transaction trans = s.beginTransaction();
    String hql = "delete Book where id = ?";
    Query query = s.createQuery(hql);
    query.setInteger(0, id);
    query.executeUpdate();
    trans.commit();
    s.close();
    }
    }我的book.hbm.xml
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="com.haiersoft.pojos.Book" table="book">
    <id name="id" type="java.lang.String">
    <column name="id" />
    <generator class="native" />
    </id>
    <property name="bookName" type="java.lang.String" column="bookName" />
    <property name="price" type="java.lang.Integer" column="price" />
    <property name="publishTime" type="java.sql.Timestamp" column="publishTime" />
    <property name="publisher" type="java.lang.String" column="publisher" />
    <property name="quantity" type="java.lang.Integer" column="quantity" />
    <many-to-one name="bookOrder" column="BookOrder_id" class="BookOrder"/>
    </class>
    </hibernate-mapping>我的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>
    <!-- 配置MySQL连接属性 -->
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    <property name="connection.url">
    jdbc:mysql://localhost:3306/jxc
    </property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <!-- 在控制台显示SQL语句 -->
    <property name="show_sql">true</property>
    <!--根据需要自动生成、更新数据表 -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 注册所有ORM映射文件 -->
    <mapping resource="com/haiersoft/pojos/Book.hbm.xml" />
    <mapping resource="com/haiersoft/pojos/BookOrder.hbm.xml" />
    </session-factory>
    </hibernate-configuration>
    我的测试类test
    import com.haiersoft.service.BookService;
    public class test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    BookService bs = new BookService();
    System.out.println(bs.getBookInformation("b0001").getBookName()+bs.getBookInformation("b0001").getPrice());
    }
    }
      

  7.   

    %%%% Error Creating SessionFactory %%%%
    org.hibernate.MappingException: Association references unmapped class: Book
    这两句是什么意思呢?
    你自己试着理解下试试。感觉说的挺明显的。
     <mapping resource="com/haiersoft/pojos/Book.hbm.xml" />
    我的book.hbm.xml
      

  8.   

    不是说没有配置book.hbm.xml文件吗?可是我在hibernate.xml里已经配置了啊
      

  9.   

    我晕,你注意大小写啊。我特意发了这两行不就是这个意思么。
    <mapping resource="com/haiersoft/pojos/Book.hbm.xml" />大写的Book
    我的book.hbm.xml
    小写的。
      

  10.   

    book.hbm.xml这个配置文件的
    的名字是大写还是小写?