• Maven 搭建 Hibernate4 spring4 工程


    • 相关maven依赖


    <span style="font-size:14px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.hive</groupId>
        <artifactId>mars</artifactId>
        <packaging>war</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>Plato</name>
        <url>http://maven.apache.org</url>
    
    
        <properties>
            <!--配置局部JDK版本-->
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!--依赖版本-->
            <spring-version>4.1.0.RELEASE</spring-version>
            <junit-version>4.11</junit-version>
            <log4j-version>1.2.17</log4j-version>
            <j2ee-version>7.0</j2ee-version>
            <hibernate-version>4.3.6.Final</hibernate-version>
            <MySql-version>5.1.15</MySql-version>
        </properties>
    
    
        <!--依赖坐标-->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit-version}</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring-version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring-version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/log4j/log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j-version}</version>
            </dependency>
            <dependency>
                <!--使用aop注解aop编程必须导入-->
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>1.6.11</version>
            </dependency>
    
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.6.11</version>
            </dependency>
    
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate-version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>jboss-logging-annotations</artifactId>
                        <groupId>org.jboss.logging</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jboss-logging-annotations</artifactId>
                        <groupId>org.jboss.logging</groupId>
                    </exclusion>
                    <exclusion>
                        <artifactId>jboss-logging-annotations</artifactId>
                        <groupId>org.jboss.logging</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- mysql driver -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${MySql-version}</version>
            </dependency>
            <!-- c3p0 datasource -->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax/javaee-web-api -->
            <dependency>    
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <version>${j2ee-version}</version>
            </dependency>
            <!-- slf4j -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.2</version>
            </dependency>
        </dependencies>
    </project></span>
    

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

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


    •  工程目录结构如下



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

    • 接口

    <span style="font-size:12px;">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
     */
    <span style="color:#33CC00;">/* 通过注解来声明事务则该接口下的方法都会实现事务 如果不需要事务可在相关实现类下来实现 */</span>
    @Transactional
    public interface AdminDao {
        /**
         * Select all list.
         * 
         * 查询全部用户  返回清单
         *
         * @return the list
         */
        List<Admin> 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);
    
    }</span>
    

    • 实现类


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

    <span style="font-size:12px;">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
     */
    
    </span><pre name="code" class="java"><span style="font-size:12px;"><span style="color:#33CC00;">/* 通过注解注入IOC容器 */</span></span>
    @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<Admin> 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
     */
    <pre name="code" class="java"><span style="font-size:12px;"></span><pre name="code" class="java"><span style="font-size:12px;"><span style="color:#33CC00;">/* 通过注解注入IOC容器 */</span></span>

    
    @Repository
    <span style="font-size:12px;"></span><pre name="code" class="java"><span style="font-size:12px;"><span style="color:#33CC00;">/* hibernate 相关的注解配置 */</span></span>
    
    @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配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd ">
        <pre name="code" class="html"><span style="color:#33CC00;"><!--开启注解扫描--></span>
    <context:component-scan base-package="org.hive">
    <span style="color:#33CC00;"><!--配置这个排除一些过滤器 相关用法在下面有资料介绍--></span>
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan>
    <pre name="code" class="html"><span style="color:#33CC00;"><!--开启AOP注解 并强制使用cglib代理--></span>

    
    <aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true"/>
    <pre name="code" class="html"><span style="color:#33CC00;"><!--导入属性配置文件--></span>
    
     <context:property-placeholder file-encoding="utf-8" location="hh.properties"/> <!--配置c3p0数据源 你也可以启用你自己的数据源--> <bean id="c3p0_dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property
     name="driverClass" value="${driver}"/> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${user}"/> <property name="password" value="${password}"/> <property name="maxPoolSize" value="${max}"/> <property name="minPoolSize" value="${min}"/>
     <property name="initialPoolSize" value="${initSize}"/> </bean> <!--配置session工厂--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!--为工厂注入数据源依赖-->
     <property name="dataSource" ref="c3p0_dataSource"/><!--hibernate的一些其他的设置--> <property name="hibernateProperties"> <map> <entry key="dialect" value="${dialect}"/> <entry key="show_sql" value="${show_sql}"/> <entry key="hbm2ddl.auto"
     value="${hbm2ddl.auto}"/> <entry key="format_sql" value="${format_sql}"/> </map> </property>
    <span style="color:#FF0000;"><!--实体类的映射  类似于hibernate.cfg.xml中的mapped文件资源 不写将抛出 实体类无映射的异常   可以通过扫描包   或者 注解类等多种手段实现  可以查阅相关api--></span>
    <property name="packagesToScan" value="org.hive.*"/> </bean> <!--事务管理 采用注解的方式--> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/></beans>
    
    

    <strong><span style="color:#CC6600;">hh.properties</span></strong>


    #数据源driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testuser=rootpassword=adminmax=30min=5initSize=8#session工厂dialect=org.hibernate.dialect.MySQL5Dialectshow_sql=truehbm2ddl.auto=updateformat_sql=true
















                                                             <context:component-scan /> 用法

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

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

    1.        <context:include-filter>

    2.       <context:exclude-filter>

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

    <context:component-scan base-package="tv.huan.weisp.web"/>

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

     

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

    <context:component-scan base-package="tv.huan.weisp.web .controller">  

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

    </context:component-scan>  

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

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

    <context:component-scan base-package="tv.huan.weisp.web ">  

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>   

    </context:component-scan>  

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

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

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

    Use-dafault-filters=”false”的情况下:<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描源

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



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




  • 相关阅读:
    C连载20-转换说明中的异常
    Android连载30-SharedPreference存储
    搭建一个开源项目12-Kubernetes集群部署(下)以及elasticsearch部署
    JavaScript连载29-元素类型获取、节点CD
    从零开始学VUE之模板语法(计算属性)
    从零开始学VUE之模板语法(绑定属性)
    从零开始学VUE之模板语法(插值操作)
    从零开始学VUE之Vue的生命周期
    从零开始学VUE之Vue创建时可以传入的Option属性
    从零开始学VUE之Vuejs初体验(DEMO)
  • 原文地址:https://www.cnblogs.com/felordcn/p/12142615.html
Copyright © 2020-2023  润新知