Maven 搭建 Hibernate4 spring4 工程

  • 相关maven依赖



    4.0.0
    org.hive
    mars
    war
    1.0-SNAPSHOT
    Plato
    http://maven.apache.org


    
        
        1.8
        1.8
        1.8
        UTF-8
        
        4.1.0.RELEASE
        4.11
        1.2.17
        7.0
        4.3.6.Final
        5.1.15
    


    
    
        
            junit
            junit
            ${junit-version}
            provided
        

        
        
            org.springframework
            spring-core
            ${spring-version}
        

        
        
            org.springframework
            spring-context
            ${spring-version}
        
        
        
            org.springframework
            spring-beans
            ${spring-version}
        
        
        
            org.springframework
            spring-aop
            ${spring-version}
        

        
        
            org.springframework
            spring-jdbc
            ${spring-version}
        
        
            org.springframework
            spring-orm
            ${spring-version}
        
        
        
            log4j
            log4j
            ${log4j-version}
        
        
            
            org.aspectj
            aspectjrt
            1.6.11
        

        
            org.aspectj
            aspectjweaver
            1.6.11
        

        
            cglib
            cglib
            2.1
        

        
        
            org.hibernate
            hibernate-core
            ${hibernate-version}
            
                
                    jboss-logging-annotations
                    org.jboss.logging
                
                
                    jboss-logging-annotations
                    org.jboss.logging
                
                
                    jboss-logging-annotations
                    org.jboss.logging
                
            
        
        
        
            mysql
            mysql-connector-java
            ${MySql-version}
        
        
        
            c3p0
            c3p0
            0.9.1.2
        
        
            
            javax
            javaee-web-api
            ${j2ee-version}
        
        
        
            org.slf4j
            slf4j-log4j12
            1.7.2
        
    

即使是持久层 跟spring整合    依然导入了 j2ee 的包   是因为   在整合过程中发现了一个问题      

如果J2EE 的包是6.0的任何版本 都会发生 ClassFormatError的 错误  原因是 6.0版本仅仅是做了规范  并没有实现    在实际运用中要避免引用  


  •  工程目录结构如下


Maven 搭建 Hibernate4 spring4 工程_第1张图片


这里仅仅贴一个  简单dao层的代码段  service 层  可以后面通过依赖注入实现

  • 接口

package org.hive.dao;

import org.hive.bean.Admin;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Author: Dax
 * Date: 2016/10/10
 * Time: 17:54
 */
/* 通过注解来声明事务则该接口下的方法都会实现事务 如果不需要事务可在相关实现类下来实现 */
@Transactional
public interface AdminDao {
    /**
     * Select all list.
     * 
     * 查询全部用户  返回清单
     *
     * @return the list
     */
    List selectAll();

    /**
     * Add.
     * 
     * 添加一个用户
     *
     * @param admin the admin
     */
    void add(Admin admin);

    /**
     * Remove.
     * 
     * 移除一个用户
     *
     * @param admin the admin
     */
    void remove(Admin admin);

    /**
     * Update.
     * 
     * 修改用户信息
     *
     * @param admin the admin
     */
    void update(Admin admin);

    /**
     * Select one admin.
     * 
     *通过用户的id来查询用户
     * 
     * @param id the id
     * @return the admin
     */
    Admin selectOne(Integer id);

}

  • 实现类


仅仅实现了简单的查询 其他不再一 一实现

package org.hive.dao.impl;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hive.bean.Admin;
import org.hive.dao.AdminDao;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Author: Dax
 * Date: 2016/10/10
 * Time: 16:17
 */

/* 通过注解注入IOC容器 */
@Repositorypublic class AdminDaoImpl implements AdminDao { @Resource(name = "sessionFactory") private SessionFactory factory; public SessionFactory getFactory() { return factory; } public void setFactory(SessionFactory factory) { this.factory = factory; } @Override public List selectAll() { Session session = factory.openSession(); return session.createQuery("FROM Admin ").list(); } @Override public void add(Admin admin) { } @Override public void remove(Admin admin) { } @Override public void update(Admin admin) { } @Override public Admin selectOne(Integer id) { Session session = factory.openSession(); return (Admin) session.get(Admin.class, id); }}


  • 实体类

package org.hive.bean;

import org.springframework.stereotype.Repository;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.sql.Timestamp;

/**
 * Created with IntelliJ IDEA.
 * Author: Dax
 * Date: 2016/10/10
 * Time: 17:51
 */
/* 通过注解注入IOC容器 */

 @Repository
/* hibernate 相关的注解配置 */
 @Entitypublic class Admin { private Integer adminId; private String adminName; private String adminPassword; private Timestamp loginTime; @Id @Column(name = "ADMINID") public Integer getAdminId() { return adminId; } public void setAdminId(Integer adminId) { this.adminId = adminId; } @Basic @Column(name = "ADMINNAME") public String getAdminName() { return adminName; } public void setAdminName(String adminName) { this.adminName = adminName; } @Basic @Column(name = "ADMINPASSWORD") public String getAdminPassword() { return adminPassword; } public void setAdminPassword(String adminPassword) { this.adminPassword = adminPassword; } @Basic @Column(name = "LOGINTIME") public Timestamp getLoginTime() { return loginTime; } public void setLoginTime(Timestamp loginTime) { this.loginTime = loginTime; }}


  • spring配置文件



    

 
  
           
 
 
        

hh.properties


# 数据源 driver= com.mysql.jdbc.Driver url= jdbc:mysql://localhost:3306/test user= root password= admin max= 30 min= 5 initSize= 8 #session 工厂 dialect= org.hibernate.dialect.MySQL5Dialect show_sql= true hbm2ddl.auto= update format_sql= true
















                                                         <context:component-scan /> 用法

   在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

注意:如果配置了那么标签就可以不用再xml中配置了,因为前者包含了后者。另外还提供了两个子标签

1.        

2.       

在说明这两个子标签前,先说一下有一个use-default-filters属性,改属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,并注册成bean.也就是@Component的子注解@Service,@Reposity等。所以如果仅仅是在配置文件中这么写

"tv.huan.weisp.web"/>

 Use-default-filter此时为true那么会对base-package包或者子包下的所有的进行java类进行扫描,并把匹配的java类注册成bean。

 

 可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签就起到了勇武之地。如下所示

  

   

  

这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean

但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)

  

   

  

此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类

此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。

另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定来进行过滤,说明此包不需要被扫描。综合以上说明

Use-dafault-filters=”false”的情况下:指定的不扫描,指定的扫描源

转自 :http://blog.csdn.net/chunqiuwei/article/details/16115135



根据上面的结构 可以看出 通过声明依赖  然后 注入依赖  层层进行操作    对同样的业务流程  采取AOP的思想   进行切面编程   理清思路其实 还是很简单的 




你可能感兴趣的:(Maven 搭建 Hibernate4 spring4 工程)