求大神帮帮忙。做了一半不会做了。一个题目
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应该怎么写啊 --------------------编程问答-------------------- 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);
}
}
--------------------编程问答-------------------- 你把数据库的基本操作,增删改查弄懂了自然就会写的。如果你是新手就不要那么快就struts什么的,先找韩顺平或者马士兵老师的视频看看jsp,servlet怎么写的。然后慢慢在过渡,没学到东西你问人怎么写也没用啊。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 应该是用MVC的方法来做吧 --------------------编程问答-------------------- 既然你不会的是其中dao和service,那么你先把action写出来好么?
这样一步一步的看需要什么,就写什么,service和dao就出来了。 --------------------编程问答-------------------- 应该用mvc方法来做,其实这个很好做。你先做个简单的增删改查练练,练熟了就自然会了。 --------------------编程问答-------------------- 错误提示
%%%% 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;--------------------编程问答-------------------- 麻烦看下7楼,是不是哪里不对。提示错误,谢谢了 --------------------编程问答-------------------- 麻烦看下7楼,是不是哪里不对。提示错误,谢谢了 --------------------编程问答--------------------
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());
}
}
%%%% Error Creating SessionFactory %%%%
org.hibernate.MappingException: Association references unmapped class: Book
这两句是什么意思呢?
你自己试着理解下试试。感觉说的挺明显的。
<mapping resource="com/haiersoft/pojos/Book.hbm.xml" />
我的book.hbm.xml --------------------编程问答-------------------- 不是说没有配置book.hbm.xml文件吗?可是我在hibernate.xml里已经配置了啊 --------------------编程问答-------------------- 麻烦看下7楼 --------------------编程问答--------------------
我晕,你注意大小写啊。我特意发了这两行不就是这个意思么。
<mapping resource="com/haiersoft/pojos/Book.hbm.xml" />大写的Book
我的book.hbm.xml
小写的。 --------------------编程问答-------------------- 我的工程里确实是大写的,上面的写错了 --------------------编程问答-------------------- book.hbm.xml这个配置文件的
的名字是大写还是小写? --------------------编程问答-------------------- 大写的 --------------------编程问答-------------------- 现在不先管我的配置了,您看看我写的代码什么的对吗?哪里有不足
补充:Java , Java EE