基于SSH实现员工管理系统之框架整合篇 学习笔记

视频地址  http://www.imooc.com/learn/586


一、SSH知识回顾

1.web层(struts2)

web层来获取service
public class BookAction extends AtionSupport implements ModelDriven<Book>{
	private Book book = new Book();

	public Book getModel(){
		return book;
	}

	public String save(){
		WebApplicationContext wap = WebApplicationContextUtils.getWebApplicationContext(....);
		BookService bs = wap.getBean("bookService");
		bs.save(book);
		return "success";
	}
}

2.业务层(spring)

public class BookService{
	private BookDao dao;
	//set 方法,省略.....
	public void save(Book book){
		//调用
		dao.save(book);
	}
}

//前提是,需要把 service,dao交给 spring去管理,并且service里要注入dao。


//配置
<bean id="bookDao" class="......BookDao">

</bean>

<bean id="bookService" class=".....BookService">
	<property name="bookDao" ref="bookDao"/>
</bean>

3.持久层(Hibernate)

public class BookDao{
	public void save(Book book){
		//1.加载配置文件
		Configuration cfg = new Configuration().configure();
		//2.创建
		SessionFactory sf = cfg.buildSessionFactory()'
		//3.得到 Session 对象
		Session session = sf.openSession();
		//4.事物管理对象
		Transaction transaction = session.beginTransaction();
		//5.保存数据
		session.save(book);
		//6.提交事物
		transaction。commit(); 
		//7.关闭session	
		session.close();
		
	}
}


二、SSH环境搭建

1.包

    采用 idea 开发工具,maven 导入包

  <properties>
        <springframework.version>4.2.0.RELEASE</springframework.version>
        <spring-data-jpa.version>1.10.2.RELEASE</spring-data-jpa.version>
        <hibernate.version>4.3.6.Final</hibernate.version>
        <struts.version>2.5.10</struts.version>
        <mysql.connector.version>5.1.31</mysql.connector.version>
        <lombok-version>1.16.12</lombok-version>
    </properties>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>${struts.version}</version>
        </dependency>

        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
        </dependency>
        <!--c3p0-->
        <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>mchange-commons-java</artifactId>
            <version>0.2.12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

        <!--Servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- Struts2和Spring整合依赖 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>${struts.version}</version>
        </dependency>

        <!-- SLF4J依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

        <!--lombok 插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok-version}</version>
        </dependency>

    </dependencies>


2.配置文件

1)  Struts2 配置文件

web.xml

struts.xml

2) Hibernate 配置文件

hibernate.cfg.xml  (ssh整合中,省略该文件)

映射文件

3) Spring 配置文件

web.xml

applicationContext.xml 

4) 日志文件

log4j.properties


3.创建包结构

        dao

service

action

domain(使用 lombok 插件,@Data,@NoArgsConstructor)


三、.Struts2 整合 Spring 框架

Struts2 和 Spring 整合的2种方式

1) Action 的类由 Struts2 自身去创建 

在 struts.xml 配置

    <package name="ssh" extends="struts-default" namespace="/">
        <action name="product_*" method="{1}" class="com.gizhi.action.ProductAction"/>
    </package>

2) Action 的类交给 Spring 框架创建

建议使用,因为后续 Spring 可以采用 AOP 方式进行管理

在 applicationContext.xml

    <!--配置 action -->
    <!--Action 的类交给 Spring 框架创建-->
    <bean id="productAction" class="com.gizhi.action.ProductAction">
        <!--需要手动注入 service-->
        <property name="productService" ref="productService"/>

    </bean>
在 struts.xml 配置

 <!--Action 的类交给 Spring 框架创建-->
    <package name="ssh" extends="struts-default" namespace="/">
        <!--class 写入 applicationContext.xml 中 action 的 id -->
    <action name="product_*" method="{1}" class="productAction"/>
    </package>

四、Spring 整合 Hibernate

1.创建映射文件

Product.hbm.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.gizhi.domain.Product" table="product">
        <id name="id" column="id">
            <!--主键生成策略-->
            <generator class="native"/>
        </id>
        <property name="name" column="name"/>
        <property name="price" column="price"/>
    </class>
</hibernate-mapping>


2.整合

 1) 数据库文件

     jdbc.properties

jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/xxxxxx
jdbc.username=root
jdbc.password=xxxxx


  2) 配置文件

applicationContext.xml

 <!--引入外部配置文件-->
    <context:property-placeholder location="jdbc.properties"></context:property-placeholder>
    <!--配置连接池-->
    <!--数据源-->
    <bean id="dataSourceBase" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="driverClass" value="${jdbc.driverClass}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--配置 Hibernate 相关属性-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <!--注入连接池-->
        <property name="dataSource" ref="dataSourceBase"/>
        <!--配置 Hibernate 的属性-->
        <property name="hibernateProperties">
            <props>
                <!--方言-->
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <!--加载 HIbernate 中的映射文件-->
        <property name="mappingResources">
            <list>
                <value>com/gizhi/domain/*.xml</value>
            </list>
        </property>
    </bean>

3.编写 dao 

1) 使用Hibernate模版,dao 继承 HibernateDaoSupporte类

2)  applicationContext.xml 配置 dao

    <bean id="productDao" class="com.gizhi.dao.ProductDao">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
3) 在 dao 中调用模版,来完成保存的操作

this.getHibernateTemplate().save(product);

4.事务管理

1) applicationContext.xml 配置事务管理器

    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
2) 开启注解事务
    <!--注解事务-->
    <tx:annotation-driven transaction-manager="transactionManager"/>


注:

使用 idea 工具会产生 class path resource [com/xxxx/domain/Product.hbm.xml] cannot be opened because it does not exist 错误

原因是因为 src文件夹是存放代码的,resource文件夹是存放资源的,因此intellij在编译的时候会忽略src文件夹下面的xml文件,导致最后发布的文件夹下面丢失了这些映射文件。

参考  http://www.cnblogs.com/weishenhong/p/5309430.html

最后把 hbm.xml 移动到 resource 文件夹中,即可解决。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值