zoukankan      html  css  js  c++  java
  • spring与hibernate注解及XML方式集成

    spring与hibernate注解及XML方式集成

    Hibernate Xml方式

    该种方式需要在sessionFactory中引入对应的hbm.xml文件,样例如下:

      <!-- spring-hibernate 整合 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="hibernateProperties">
                <value>
                    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
                    hibernate.jdbc.batch_size=25
                    hibernate.jdbc.fetch_size=50
                    hibernate.show_sql=true
                </value>
            </property>
            <property name="dataSource" ref="dataSource" />
            <property name="mappingLocations">
                <list>
                    <value>classpath:/META-INF/gls.hibernate/User.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/Customer.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/BatchTransaction.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/PolicyTransaction.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/Policy.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/Email.hbm.xml</value>
                    <value>classpath:/META-INF/gls.hibernate/BatchJobChunk.hbm.xml</value>
                </list>
            </property>
        </bean>
    
        <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    
        <tx:annotation-driven transaction-manager="transactionManager" />

    对于其他的DAO及其Service层,不做阐述了,不过对于DAO和Service建议建立BaseDao和BaseService使用泛型操作对应的model。

    栗子来啦:

    BaseDao

    /**
     * baseDao class用于数据的CRUD操作
     * @author daniel.zhao
     *
     * @param <T>
     */
    public interface BaseDao<T> {
        public void save(T entity);
        public void saveOrUpdate(T entity);
        public void update(T entity);
        public void delete(Serializable id);
        public T findById(Serializable id);
        public List<T> findByHql(String hql, Object...params);
        public List<T> findByHqlLimit(String hql, final Long start, final Long limit, Object...params);
    }

    DaoSupport

    public class DaoSupport<T extends Serializable> implements BaseDao<T> {
    
        public static final Logger logger = LoggerFactory.getLogger(DaoSupport.class);
        
        private Class<T> clazz;
        
        @Autowired
        private SessionFactory sessionFactory;
        
        /**
         * 构造方法
         */
        public DaoSupport() {
            ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
            clazz = (Class<T>) type.getActualTypeArguments()[0];
            logger.info("BaseDao quety entity class: " + clazz.getName());
        }
        
        public Session getSession() {
            return sessionFactory.getCurrentSession();
        }
    
        @Override
        public void save(T entity) {
            this.getSession().save(entity);
        }
    
        @Override
        public void saveOrUpdate(T entity) {
            this.getSession().saveOrUpdate(entity);
        }
    
        @Override
        public void update(T entity) {
            this.getSession().update(entity);
        }
    
        @Override
        public void delete(Serializable id) {
            this.getSession().delete(this.findById(id));
        }
    
        @Override
        public T findById(Serializable id) {
            return (T) this.getSession().get(this.clazz, id);
        }
    
        @Override
        public List<T> findByHql(String hql, Object... params) {
            Query query = this.getSession().createQuery(hql);
            for (int i = 0; params != null && i < params.length; i++) {
                query.setParameter(i, params[i]);
            }
            return query.list();
        }
    
        @Override
        public List<T> findByHqlLimit(String hql, Long start, Long limit, Object... params) {
            Query query = this.getSession().createQuery(hql);
            for (int i = 0; params != null && i < params.length; i++) {
                query.setParameter(i, params[i]);
            }
            query.setFirstResult(start.intValue());
            query.setMaxResults(limit.intValue());
            return query.list();
        }
    }

    BaseService

    public interface BaseService<T> {
        public void save(T entity);
        public void saveOrUpdate(T entity);
        public void update(T entity);
        public void delete(Serializable id);
        public T findById(Serializable id);
        public List<T> findByHql(String hql, Object...params);
        public List<T> findByHqlLimit(String hql, final Long start, final Long limit, Object...params);
    }

    BaseServiceImpl

    @Transactional
    public class BaseServiceImpl<T> implements BaseService<T> {
    
        private BaseDao<T> dao;
        
        @Resource
        public void setDao(BaseDao<T> dao) {
            this.dao = dao;
        }
        
        @Override
        public void save(T entity) {
            dao.save(entity);
        }
    
        @Override
        public void saveOrUpdate(T entity) {
            dao.saveOrUpdate(entity);
        }
    
        @Override
        public void update(T entity) {
            dao.update(entity);
        }
    
        @Override
        public void delete(Serializable id) {
            dao.delete(id);
        }
    
        @Override
        public T findById(Serializable id) {
            return dao.findById(id);
        }
    
        @Override
        public List<T> findByHql(String hql, Object... params) {
            return dao.findByHql(hql, params);
        }
    
        @Override
        public List<T> findByHqlLimit(String hql, Long start, Long limit, Object... params) {
            return dao.findByHqlLimit(hql, start, limit, params);
        }
    
    }

     注解方式

     Hibernate Entity

    @Entity
    @Table(name = "t_user")
    public class User implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = -9042615274714038279L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        @Column(name = "name")
        private String name;
    
        @Column(name = "password")
        private String password;
    
        @Column(name = "age")
        private Integer age;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name == null ? null : name.trim();
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password == null ? null : password.trim();
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
        
        @Override
        public String toString() {
            return "User[id=" + id + ", name=" + name + ",age=" + age + "]";
        }
    }

    Hibernate Xml

      <!-- spring-hibernate 整合 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="hibernateProperties">
                <value>
                    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
                    hibernate.jdbc.batch_size=25
                    hibernate.jdbc.fetch_size=50
                    hibernate.show_sql=true
                </value>
            </property>
            <property name="dataSource" ref="dataSource" />
            <property name="annotatedClasses">
                <list>
                    <value>com.ebao.life.model.User</value>
                </list>
            </property>
        </bean>
    
        <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    
        <tx:annotation-driven transaction-manager="transactionManager" />

    Junit Test

    @RunWith(JUnit4ClassRunner.class)
    @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
    @ContextConfiguration(classes = { PropertyConfig.class, DataSourceConfig.class, HibernateAnnotationConfig.class })
    public class HibernateAnnotationTest {
    
        public static final Logger logger = LoggerFactory.getLogger(HibernateAnnotationTest.class);
        
        @Resource(name = UserService.BEAN_DEFAULT)
        private UserService userService;
        
        @Test
        public void testInsert() {
            User user = new User();
            user.setName("daniel-zhao-001");
            user.setPassword("password");
            user.setAge(28);
            userService.save(user);
        }
    }
  • 相关阅读:
    执行一个外部程序并等待他的结束
    打开WORD文档时提示“word无法启动转换器mswrd632 wpc”的解决方法
    WaitForSingleObject的用法
    Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
    webservices传base64字串
    webservices传文件
    webservices 字节数组 Base64编码
    内存映射大文件
    文件分割合并
    move
  • 原文地址:https://www.cnblogs.com/redcool/p/6506738.html
Copyright © 2011-2022 走看看