DAO层接口
package app.bookstore.model.dao;
import app.bookstore.model.entity.Book;
public class BookDaoHibernateImpl extends EntityDaoHibernateSupport<Book> {
public BookDaoHibernateImpl() {
super();
}
}
package app.bookstore.model.dao;
import app.bookstore.model.entity.Category;
public class CategoryDaoHibernateImpl extends
EntityDaoHibernateSupport<Category> {
public CategoryDaoHibernateImpl(){
super();
}
}
package app.bookstore.model.dao;
import java.util.List;
public interface EntityDao<TEntity> {
/**
* @param id The primary Id of the entity
* @return the entity identified by the Id
*/
TEntity get(long id);
/**
* get single entity by specified property
* @param propertyName The name of the property
* @param propertyValue The value of the property
* @return the entity specialized by the property
*/
TEntity getSingle(String propertyName, Object propertyValue);
/**
* save the entity
* @param entity The entity to be saved.
*/
void save(TEntity entity);
/**
* delete an entity with the primary key id
* @param id The primary key id of the entity to be deleted.
*/
void delete(long id);
/**
* delete the entity
* @param entity the entity to be deleted.
*/
void delete(TEntity entity);
/**
* find all the entity from DAO
* @return the List of entities found
*/
List<TEntity> findAll();
/**
* find entities with the specified property
* @param propertyName The name of the property
* @param propertyValue The value of the property
* @return the List of entities specialized by the property
*/
List<TEntity> findBy(String propertyName, Object propertyValue);
}
package app.bookstore.model.dao;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public abstract class EntityDaoHibernateSupport<TEntity> implements EntityDao<TEntity> {
private SessionFactory sf;
private Class<TEntity> entityClass;
public void setSessionFactory(SessionFactory sf) {
this.sf = sf;
}
protected Session getSession() {
return sf.openSession();
}
@SuppressWarnings("unchecked")
public EntityDaoHibernateSupport() {
Class<?> c = this.getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType) {
Type[] types = ((ParameterizedType)t).getActualTypeArguments();
entityClass = (Class<TEntity>)types[0];
}
}
@SuppressWarnings("unchecked")
@Override
public TEntity get(long id) {
Session session = this.getSession();
session.beginTransaction();
TEntity entity = (TEntity)session.get(entityClass, id);
session.getTransaction().commit();
session.close();
return entity;
}
@Override
public TEntity getSingle(String propertyName, Object propertyValue) {
List<TEntity> entities = findBy(propertyName, propertyValue);
if (entities != null && entities.size() > 0) {
return entities.get(0);
}
return null;
}
@Override
public void save(TEntity entity) {
Session session = this.getSession();
session.beginTransaction();
session.saveOrUpdate(entity);
session.getTransaction().commit();
session.close();
}
@Override
public void delete(long id) {
TEntity entity = get(id);
delete(entity);
}
@Override
public void delete(TEntity entity) {
Session session = this.getSession();
session.beginTransaction();
session.delete(entity);
session.getTransaction().commit();
session.close();
}
@SuppressWarnings("unchecked")
@Override
public List<TEntity> findAll() {
List<TEntity> entities = this.getSession().createQuery("from " + entityClass.getSimpleName()).list();
return entities;
}
@SuppressWarnings("unchecked")
@Override
public List<TEntity> findBy(String propertyName, Object propertyValue) {
String queryString = "from " + entityClass.getSimpleName() + " e ";
queryString += "where e." + propertyName + "=:propertyValue";
Query query = this.getSession().createQuery(queryString);
List<TEntity> entities = query.setParameter("propertyValue", propertyValue).list();
return entities;
}
}
package app.bookstore.model.dao;
import app.bookstore.model.entity.Order;
public class OrderDaoHibernateImpl extends EntityDaoHibernateSupport<Order> {
public OrderDaoHibernateImpl() {
super();
}
}
package app.bookstore.model.dao;
import app.bookstore.model.entity.User;
public class UserDaoHibernateImpl extends EntityDaoHibernateSupport<User> {
public UserDaoHibernateImpl() {
super();
}
}
接口实现
package app.bookstore.model.service;
import java.util.List;
import app.bookstore.model.entity.Category;
public class CategoryServiceImpl extends ServiceSupport<Category> implements
CategoryService {
@Override
public List<Category> getAllCategories() {
return this.getDao().findAll();
}
}
package app.bookstore.model.service;
import app.bookstore.model.entity.Order;
public class OrderServiceImpl extends ServiceSupport<Order> implements
OrderService {
@Override
public void saveOrder(Order order) {
this.getDao().save(order);
}
}
package app.bookstore.model.service;
import app.bookstore.model.dao.EntityDao;
import app.bookstore.model.entity.Book;
import app.bookstore.model.entity.Category;
import app.bookstore.model.entity.Order;
import app.bookstore.model.entity.User;
import app.bookstore.util.DateTimeHelper;
public class SystemServiceImpl extends ServiceSupport<User> implements
SystemService {
private EntityDao<Book> bookDao;
private EntityDao<Category> categoryDao;
private EntityDao<Order> orderDao;
private String feedCode;
public void setFeedCode(String code){
this.feedCode = code;
}
public EntityDao<Book> getBookDao() {
return bookDao;
}
public void setBookDao(EntityDao<Book> bookDao) {
this.bookDao = bookDao;
}
public EntityDao<Category> getCategoryDao() {
return categoryDao;
}
public void setCategoryDao(EntityDao<Category> categoryDao) {
this.categoryDao = categoryDao;
}
public EntityDao<Order> getOrderDao() {
return orderDao;
}
public void setOrderDao(EntityDao<Order> orderDao) {
this.orderDao = orderDao;
}
@Override
public void feedSampleData(String feedCode) throws Exception{
System.out.println(this.feedCode);
if (feedCode.equals(this.feedCode))
{
addUsers();
addCategoryAndBooks();
}
else
{
throw new Exception("数据填充码不正确");
}
}
private void addUsers()
{
//创建三个用户
User user1 = new User("sa@bookstore.com","系统管理员","123456",'M',DateTimeHelper.getDateTimeFrom("1988-12-12"));
User user2 = new User("zhangsan@bookstore.com","张三","123456",'M',DateTimeHelper.getDateTimeFrom("1982-02-14"));
User user3 = new User("test@bookstore.com","测试用户","1234",'F',DateTimeHelper.getDateTimeFrom("1991-10-1-"));
//保存用户
this.getDao().save(user1);
this.getDao().save(user2);
this.getDao().save(user3);
}
private void addCategoryAndBooks()
{
//创建图书分类
Category c1 = new Category("计算机","计算机专业图书");
Category c2 = new Category("少儿","关于少儿教育方面的图书");
Category c3 = new Category("生活文化","关于生活与文化的图书");
//保存图书分类
this.getCategoryDao().save(c1);
this.getCategoryDao().save(c2);
this.getCategoryDao().save(c3);
//创建"计算机"类图书
Book book1 = new Book("Java程序设计", 29.5f, "book.png");
book1.setCategory(c1);
Book book2 = new Book("Java编程思想", 60.0f, "book.png");
book2.setCategory(c1);
Book book3 = new Book("Java设计模式", 45.0f, "book.png");
book3.setCategory(c1);
Book book4 = new Book("iOS应用开发", 66.0f, "book.png");
book4.setCategory(c1);
Book book5 = new Book("Head First PMP", 80.0f, "book.png");
book5.setCategory(c1);
//创建“少儿"类图书
Book book6 = new Book("安徒生童话集", 29.5f, "book.png");
book6.setCategory(c2);
Book book7 = new Book("十四只老鼠去春游", 12.0f, "book.png");
book7.setCategory(c2);
Book book8 = new Book("Canimals 贴纸书", 15.0f, "book.png");
book8.setCategory(c2);
Book book9 = new Book("唐诗三百首", 30.0f, "book.png");
book9.setCategory(c2);
//创建”生活文化“类图书
Book book10 = new Book("论语心得", 32.0f, "book.png");
book10.setCategory(c3);
Book book11 = new Book("家常菜100道", 60.0f, "book.png");
book11.setCategory(c3);
Book book12 = new Book("有病不能乱求医", 35.0f, "book.png");
book12.setCategory(c3);
//保存图书
this.getBookDao().save(book1);
this.getBookDao().save(book2);
this.getBookDao().save(book3);
this.getBookDao().save(book4);
this.getBookDao().save(book5);
this.getBookDao().save(book6);
this.getBookDao().save(book7);
this.getBookDao().save(book8);
this.getBookDao().save(book9);
this.getBookDao().save(book10);
this.getBookDao().save(book11);
this.getBookDao().save(book12);
}
}
package app.bookstore.model.service;
import java.util.List;
import app.bookstore.model.entity.User;
public class UserServiceImpl extends ServiceSupport<User> implements
UserService {
@Override
public void saveUser(User user) {
this.getDao().save(user);
}
@Override
public User verifyUser(String loginId, String password) {
List<User> users = this.getDao().findBy("loginId", loginId);
for(User user: users){
if (user.getPassword().equals(password)){
return user;
}
}
return null;
}
}
package app.bookstore.model.service;
import java.util.ArrayList;
import java.util.List;
import app.bookstore.model.entity.Book;
public class BookServiceImpl extends ServiceSupport<Book> implements
BookService {
@Override
public Book getBook(long id) {
return this.getDao().get(id);
}
@Override
public List<Book> getBooksByCategoryId(long id) {
return this.getDao().findBy("category.id", id);
}
@Override
public List<Book> getAllBooks() {
return this.getDao().findAll();
}
@Override
public List<Book> searchBookFor(String keyword) {
List<Book> resultBooks = new ArrayList<Book>();
List<Book> allBooks = this.getAllBooks();
for (Book book : allBooks){
if (book.getName().contains(keyword) ||
book.getCategory().getName().contains(keyword) ||
book.getCategory().getDescription().contains(keyword)) {
resultBooks.add(book);
}
}
return resultBooks;
}
}
XML配置
<?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 2013-11-11 23:19:21 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="app.bookstore.model.entity">
<class name="Book" table="book">
<id name="id" type="long">
<generator class="native"/>
</id>
<property column="creation_date" generated="never" lazy="false"
name="creationDate" not-null="true"/>
<property generated="never" lazy="false" length="100" name="name" not-null="true"/>
<property generated="never" lazy="false" name="price"/>
<property column="cover_image_url" generated="never" lazy="false"
length="128" name="coverImageFile"/>
<many-to-one class="Category" column="category_id" name="category"/>
</class>
</hibernate-mapping>
<?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 2013-11-11 23:19:21 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="app.bookstore.model.entity">
<class name="Category" table="category">
<id name="id" type="long">
<generator class="native"/>
</id>
<property column="creation_date" generated="never" lazy="false"
name="creationDate" not-null="true"/>
<property generated="never" lazy="false" length="50" name="name" not-null="true"/>
<property generated="never" lazy="false" length="120" name="description"/>
</class>
</hibernate-mapping>
<?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 2013-11-11 23:19:21 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="app.bookstore.model.entity">
<class name="Order" table="orders">
<id name="id" type="long">
<generator class="native"/>
</id>
<property column="creation_date" generated="never" lazy="false"
name="creationDate" not-null="true"/>
<property column="total_price" name="totalPrice"/>
<set cascade="all" inverse="true" name="orderItems" sort="unsorted" table="order_item">
<key column="order_id"/>
<one-to-many class="OrderItem"/>
</set>
<many-to-one class="User" column="user_id" name="user" not-null="true"/>
</class>
</hibernate-mapping>
<?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 2013-11-11 23:19:21 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="app.bookstore.model.entity">
<class name="OrderItem" table="order_item">
<id name="id" type="long">
<generator class="native"/>
</id>
<property column="creation_date" generated="never" lazy="false"
name="creationDate" not-null="true"/>
<property name="quantity" generated="never" lazy="false" not-null="true"/>
<many-to-one class="Book" column="book_id" name="book" not-null="true"/>
<many-to-one cascade="all" class="Order" column="order_id"
name="order" not-null="true"/>
</class>
</hibernate-mapping>
<?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 2013-11-11 23:19:21 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="app.bookstore.model.entity">
<class name="User">
<id name="id" type="long">
<generator class="native"/>
</id>
<property column="creation_date" generated="never" lazy="false"
name="creationDate" not-null="true"/>
<property generated="never" lazy="false" length="50" name="name" not-null="true"/>
<property generated="never" lazy="false" length="64" name="password" not-null="true"/>
<property generated="never" lazy="false" length="2" name="sex" not-null="true"/>
<property generated="never" lazy="false" name="birthday" not-null="true"/>
<property column="login_id" generated="never" lazy="false"
length="128" name="loginId" not-null="true"/>
<property column="login_times" generated="never" lazy="false"
name="loginTimes" not-null="true"/>
<property column="last_login_date" generated="never" lazy="false"
name="lastLoginDate" not-null="true"/>
<set inverse="true" name="orders" sort="unsorted" table="orders">
<key column="user_id"/>
<one-to-many class="Order"/>
</set>
</class>
</hibernate-mapping>