Hibernate之实体类设计基本步骤

1、先设计一个基类BaseBean

(1)@MappedSuperclass表示实体类父类

package com.life.hibernate.bean;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
@MappedSuperclass
public class BaseBean {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    @Version
    private Integer version;
    private boolean deleted;
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date dateCreated;
}

2、通用Dao层设计

package com.life.dao;

import java.util.List;
import java.util.Map;

import org.hibernate.Query;

public interface IDao<T> {

    /**
     * 根据id查找实体
     *
     * @param clazz
     * @param id
     * @return
     */
    public T find(Class<T> clazz, int id);

    public void create(T t);

    public void save(T t);

    public void delete(T t);

    /**
     * 查询某页实体
     * @param hql 查询语句
     * @param firstResult 从第几条开始,注意索引从0开始
     * @param maxResults 最多返回的数据条数
     * @param map 参数键值对
     * @return
     */
    public List<T> list(String hql, int firstResult, int maxResults,
            Map<String, Object> map);

    public Query createQuery(String hql, Map<String, Object> map);

    /**
     * 查询实体
     * @param hql
     * @param map
     * @return
     */
    public List<T> list(String hql, Map<String, Object> map);

    /**
     * 获取记录总数
     * @param hql
     * @param map
     * @return
     */
    public int getTotalCount(String hql, Map<String, Object> map);

}

3、实现Dao层接口

(1)getSession() throws CannotCreateTransactionException,当连接不上数据库时会抛出异常,可以在struts.xml配置异常页面

package com.life.dao.impl;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.CannotCreateTransactionException;

import com.life.dao.IDao;

public class DaoImpl<T> implements IDao<T> {
    private SessionFactory sessionFactory;

    @Override
    public T find(Class<T> clazz, int id) {
        // TODO Auto-generated method stub
        return (T) getSession().get(clazz, id);
    }

    @Override
    public void create(T t) {
        // TODO Auto-generated method stub
        getSession().persist(t);
    }

    @Override
    public void save(T t) {
        // TODO Auto-generated method stub
        getSession().saveOrUpdate(t);

    }

    @Override
    public void delete(T t) {
        // TODO Auto-generated method stub
        getSession().delete(t);
    }

    @Override
    public List<T> list(String hql, Map<String, Object> map) {
        // TODO Auto-generated method stub
        Query query = createQuery(hql, map);
        List<T> list = query.list();
        return list;
    }

    @Override
    public int getTotalCount(String hql, Map<String, Object> map) {
        // TODO Auto-generated method stub
        Query query = createQuery(hql, map);
        Object obj = query.uniqueResult();
        return ((Long) obj).intValue();
    }

    @Override
    public List<T> list(String hql, int firstResult, int maxResults,
            Map<String, Object> map) {
        // TODO Auto-generated method stub
        Query query = createQuery(hql, map);

        List<T> list = query.setFirstResult(firstResult)
                .setMaxResults(maxResults).list();
        System.out.println("起始:"+firstResult);
        System.out.println("最大值:"+maxResults);
        System.out.println("实际值:"+list.size());

        return list;
    }

    public Session getSession() throws CannotCreateTransactionException{
        return sessionFactory.getCurrentSession();
    }

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public Query createQuery(String hql, Map<String, Object> map) {
        Query query = getSession().createQuery(hql);
        // TODO Auto-generated method stub
        if (map != null) {
            Set<String> keySet = map.keySet();
            for (String string : keySet) {
                Object obj = map.get(string);
                //这里考虑传入的参数是什么类型,不同类型使用的方法不同
                if(obj instanceof Collection<?>){
                    query.setParameterList(string, (Collection<?>)obj);
                }else if(obj instanceof Object[]){
                    query.setParameterList(string, (Object[])obj);
                }else{
                    query.setParameter(string, obj);
                }
            }
        }
        return query;
    }

}

Done

Hibernate之实体类设计基本步骤

时间: 2024-10-10 01:51:53

Hibernate之实体类设计基本步骤的相关文章

Hibernate之实体类配置

1.@Column属性 (1)设置字段属性唯一 @Column(unique=true) private String name; Done Hibernate之实体类配置

eclipse逆向生成hibernate的实体类

eclipse从数据库逆向生成Hibernate实体类(注解和配置文件) 分类: hibernate 数据库 java 2011-10-22 21:28 2915人阅读 评论(8) 收藏 举报 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进

Hibernate框架 —— 实体类的自动生成

一: hibernate框架 框架在一定程度上可以理解为一个半成品. Hibernate框架是对数据库进行操作,完成数据持久化得重任. 二: 配置 使用hibernate 需要先下载hibernate.如果要下载最新版的可以去官网下载,而对于历史版本,官网中好像很难找到,不过以下地址可是试试的哦! -> 3.0及以上版本 ->4.0及以上版本 不过在下使用的是3.3.2版本的.另外再说说各版本的意思:    rc 版--发布候选版,表示可能有bug,内容不会有很大的变动    ga 版--稳定

hibernate映射实体类查询时数据库空字段赋值给实体类报错的问题

因为一直报实体类空异常,去网上查了资料只查到了并没有查到数据库空值时不给实体类赋值的属性,只有这两个属性 这两个属性时设置 实体类有空字段插入或更新 数据库时空属性为默认值 异常 org.hibernate.InvalidMappingException: Could not parse mapping document from resource cn/pojo/EmpDao.xml at org.hibernate.cfg.Configuration.addResource(Configur

hibernate中实体类注解

一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出. Target({METHOD,FIELD}) @Retention(RUNTIME) public @interface GeneratedValue{ G

hibernate插入实体类【数据库默认值】不生效的问题

第一个问题老生常谈 如果表结构设置默认值 数据库实体类不对该字段进行复制的情况下插入数据记录 字段直接以数据库设置的默认值进行插入hibernate本身可以根据XML配置进行生效此配置 1 <hibernate-mapping 2     package="*.entity"> 3     <class name="ProEntity" table="PRODUCTINFO" dynamic-insert="true&

Hibernate在实体类中对于时间的注解

在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal(TemporalType.TIMESTAMP)(默认年月日时分秒)示例: @Temporal(TemporalType.DATE)private Date updateDate; 有了这个就不需要用java代码将时间戳,转换成需要的日期格式.直接在实体类中进行注解!

校园商铺-2项目设计和框架搭建-2实体类设计与表创建A

区域:代表校园周边的区域划分 用户信息:关联微信账号和本地账号.支持微信账号登陆和本地注册的用户登陆 头条:banner广告页 商品与详情图片是一对多的关系.一个商品可能有多张图片 区域实体类 权重:显示优先级.权重大的,优先展示 在src/main/java下新建package名称为com.csj2018.o2o.entity,新建Area类 package com.csj2018.o2o.entity; import java.util.Date; public class Area { p

hibernate注解实体类

只要在hibernate.cfg.xml里加上如下代码 <property name="hbm2ddl.auto">update</property> validate               加载hibernate时,验证创建数据库表结构 create                  每次加载hibernate,重新创建数据库表结构 create-drop        加载hibernate时创建,退出是删除表结构 update