基于Hibernate实现CRUD

这次实验,我做的是基于SSH框架的物流管理系统

登陆界面

   


主界面



此系统主要分为五大模块:

仓库管理模块、库存管理模块(包括出库、入库)、历史记录模块、托运单管理模块、用户管理模块(注册、登陆)

 



具体实现:

dao层


例如:StoreDAO.java(仓库管理)

package com.guigu.store.dao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.guigu.store.domain.Store;

/**
 * 仓库DAO
 * @author Administrator
 */
public class StoreDAO extends HibernateDaoSupport {
	/**
	 * 添加仓库
	 * @param store
	 */
	public void save(Store store) {			//保存实例
		this.getHibernateTemplate().save(store);
	}
	/**
	 * 查询所有
	 * @return
	 */
	public List<Store> findAll() {
		return this.getHibernateTemplate().find("from Store");//find 返回所有User对象
	}
	/**
	 * 删除仓库
	 * @param store
	 */
	public void delete(Store store) {				//删除指定持久化实例 
		// 直接删除store,删除脱管对象
		this.getHibernateTemplate().delete(store);
	}
	/**
	 * 根据id查询
	 * @param id
	 * @return
	 */
	public Store findById(String id) {
		return this.getHibernateTemplate().get(Store.class, id);		//id是按照主键查询
	}
	/**
	 *  修改
	 * @param store
	 */
	public void update(Store store) {
		this.getHibernateTemplate().update(store);
	}
}

其中

         extends HibernateDaoSupport 的用法:

    springhibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:     public final HibernateTemplate getHibernateTemplate()

 public final void setSessionFactory(SessionFactory sessionFactory)

    其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。

    其他dao层写法相同。


在实体类映射的文件中,配置了许多关联映射:

  以Store.hbm.xml和Goods.hbm.xml两个配置文件为例:

<hibernate-mapping>
    <class name="com.guigu.store.domain.Store" table="store" catalog="sshexec">
        <id name="id" type="java.lang.String">
            <column name="id" length="32" />
            <generator class="uuid" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="32" />
        </property>
        <property name="addr" type="java.lang.String">
            <column name="addr" length="100" />
        </property>
        <property name="manager" type="java.lang.String">
            <column name="manager" length="32" />
        </property>
        <property name="storetel" type="java.lang.String">
            <column name="storetel" length="20" />
        </property>
        <set name="goodses" inverse="true">
            <key>
                <column name="storeid" length="32" />
            </key>
            <one-to-many class="com.guigu.store.domain.Goods" />
        </set>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="com.guigu.store.domain.Goods" table="goods" catalog="sshexec">
        <id name="id" type="java.lang.String">
            <column name="id" length="32" />
            <generator class="uuid" />
        </id>
        <many-to-one name="store" class="com.guigu.store.domain.Store" fetch="select">
            <column name="storeid" length="32" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="name" length="50" />
        </property>
        <property name="nm" type="java.lang.String">
            <column name="nm" length="10" />
        </property>
        <property name="unit" type="java.lang.String">
            <column name="unit" length="10" />
        </property>
        <property name="amount" type="java.lang.Double">
            <column name="amount" precision="10" />
        </property>
        <property name="checkId" type="java.lang.String">
            <column name="check_id" length="32" />
        </property>
        <set name="histories" inverse="true">
            <key>
                <column name="goodsid" length="32" />
            </key>
            <one-to-many class="com.guigu.store.domain.History" />
        </set>
    </class>
</hibernate-mapping>

其中,包括了双向的多对一关联映射(一个仓库对应多个货物)和单向的一对多(一个产品对应多条历史记录,包括增、删、改、查等操作)。


service层(以Store.service为例):

将dao层以对象的形式注入到service层,处理逻辑

package com.guigu.store.service;

import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.guigu.store.dao.StoreDAO;
import com.guigu.store.domain.Store;
/**
 * Store业务层
 * @author Administrator
 */
@Transactional
public class StoreService {
	// 注入DAO
	private StoreDAO storeDAO;
	public void setStoreDAO(StoreDAO storeDAO) {
		this.storeDAO = storeDAO;
	}
	/**
	 * 添加仓库
	 * @param store
	 */
	public void addStore(Store store) {
		storeDAO.save(store);
	}
	/**
	 * 查询所有仓库
	 * @return
	 */
	public List<Store> listStores() {
		return storeDAO.findAll();
	}
	/**
	 * 删除仓库
	 * @param store
	 */
	public String   deleteStore(Store store) {		
		 store = storeDAO.findById(store.getId()); // 持久对象	
		if (store.getGoodses()==null) {
			// 无货物
			storeDAO.delete(store);
			return "true";
		} else {
			// 有货物
			return "false";
		}
	}
	/**
	 * 根据id 查询store
	 * @param id
	 * @return
	 */
	public Store findStore(String id) {
		return storeDAO.findById(id);
	}
	/**
	 * 修改仓库信息
	 * @param store
	 */
	public void editStore(Store store) {
		storeDAO.update(store);
	}
}

action层(以Store.action为例):

将service层注入到action里,操作web层,方法返回参数以便于页面跳转

package com.guigu.store.web.action;
import java.util.List;
import com.guigu.store.domain.Store;
import com.guigu.store.service.StoreService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 仓库操作web层
 */
public class StoreAction extends ActionSupport implements ModelDriven<Store> {

	// 模型驱动
	private Store store = new Store();
	public Store getModel() {
		return store;
	}
	// 注入Service
	private StoreService storeService;
	public void setStoreService(StoreService storeService) {
		this.storeService = storeService;
	}
	/**
	 *  添加仓库
	 * @return
	 */
	public String add() {
		storeService.addStore(store);
		return "addSUCCESS";
	}
	/**
	 * 查询所有仓库
	 * @return
	 */
	public String list() {
		// 将查询结果 保存到Action成员变量,放入值栈
		stores = storeService.listStores();
		return "listSUCCESS";
	}
	private List<Store> stores;

	public List<Store> getStores() {
		return stores;
	}
	/**
	 * 删除仓库
	 * @return
	 */
	public String delete() {
		String a=storeService.deleteStore(store);		
		if(a.equals("true")){
		return "deleteSUCCESS";
		}else{
			this.addActionError(this.getText("仓库中有货物,无法删除"));
			return "deleteFAIL";
		}
	}
	/**
	 * 修改前,查询显示
	 * @return
	 */
	public String editview() {
		// 根据id 查询store
		store = storeService.findStore(store.getId());
		return "editviewSUCCESS";
	}
	/**
	 * 修改操作
	 * @return
	 */
	public String edit() {
		storeService.editStore(store);
		return "editSUCCESS";
	}
	public String ajaxlist(){
		stores=storeService.listStores();
		return "ajaxlistSUCCESS";
	}
}

以仓库管理模块为例演示项目:

查看仓库:



增加仓库:


成功增加了一个新仓库:



修改仓库:



成功的修改仓库的信息:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值