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应该怎么写啊
字段 类型 说明
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应该怎么写啊
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); } }
这样一步一步的看需要什么,就写什么,service和dao就出来了。
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());
}
}
org.hibernate.MappingException: Association references unmapped class: Book
这两句是什么意思呢?
你自己试着理解下试试。感觉说的挺明显的。
<mapping resource="com/haiersoft/pojos/Book.hbm.xml" />
我的book.hbm.xml
<mapping resource="com/haiersoft/pojos/Book.hbm.xml" />大写的Book
我的book.hbm.xml
小写的。
的名字是大写还是小写?