一個完整的早期開發好的crm專案,現在要使用maven工程對它進行分析,這個時候就可以將dao拆解出來,形成獨立的工程,同樣service,action也都進行這樣從拆分
拆分後的工程之間相互存在依賴
類似java當中的類,都是為了消除重複。子類繼承父類別,父類別裡面有的方法和屬性在子類當中就不需要再定義和實現了,使用的時候直接呼叫父類別就可以,我們把crm拆分後,有一個父工程,子工程(crm06_dao,crm06_service,crm06_web)要用到的依賴都可以在父工程(crm06)的pox.xml當中先定義好,將來的子工程在開發的時候就不需要再引入座標了。
點選Finish
可以在crm07的目錄下的pom.xml當中看到父工程下所包含的子工程多了一個
在service當中可以看到指向了父工程目錄
點選Finish
指向對應的父工程
介面建立成功
實現成功
引入地址後,並導包專案將不會報錯
package com.itzheng.crm.service.impl;
import com.itzheng.crm.dao.ICustomerDao;
import com.itzheng.crm.service.ICustomerService;
public class CustomerService implements ICustomerService {
private ICustomerDao customerDao;
public void setCustomerDao(ICustomerDao customerDao) {
this.customerDao = customerDao;
}
}
同時引入了crm07_dao和crm07_service,在上面設定引入的時候只引入了service因為service依賴於dao所以dao也被引入了進來
只剩下了最高版本
pom.xml當中的struct2的設定多了一個設定
子模組crm06_dao中新增junit的依賴,scope為test,但是在crm06_service中並不能使用junit
1、縱座標:直接依賴 A依賴B,B是A的直接依賴。 在A的pom.xml中新增B的座標
2、橫座標:傳遞依賴 B依賴C,C是A的傳遞依賴
3、中間部分:傳遞依賴的範圍,A依賴C的範圍。
在crm07_dao下的pom.xml當中
在crm07_dao當中的pom.xml當中刪除下面這一句
刪除之後可以在service當中看到junit的jar
優先順序會改變
生效版本變為後新增的版本
在父工程的pom.xml當中、
<!-- 新增版本鎖定 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子工程當中的junit的jar會消失
在dao當中新增對應的junit
在子工程的pom.xml當中
通過定義版本編號常數的方式可以定義替換pom.xml當中的內容
package com.itzheng.crm.domain;
import java.io.Serializable;
/**
* PO(Persistence Object)持久化類
* 7個規範
* 1. 公有類
* 2. 公有無參構造
* 3. 私有屬性
* 4. 公有的getter與setter
* 5. 實現java.io.Serializable介面
* 6. 不能用final修飾
* 7. 如果是基礎型別,要使用它的包裝類
* @author Administrator
*/
package com.itzheng.crm.domain;
import java.io.Serializable;
/**
* PO(Persistence Object)持久化類 7個規範 1. 公有類 2. 公有無參構造 3. 私有屬性 4. 公有的getter與setter
* 5. 實現java.io.Serializable介面 6. 不能用final修飾 7. 如果是基礎型別,要使用它的包裝類
*
* @author Administrator
*
*/
public class Customer implements Serializable {
private Long cust_id;
private String cust_name;
/*
* private String cust_source; private String cust_industry; private String
* cust_level;
*/
private String cust_phone;
private String cust_mobile;
private String cust_image;// 客戶資質的圖片
public Long getCust_id() {
return cust_id;
}
public void setCust_id(Long cust_id) {
this.cust_id = cust_id;
}
public String getCust_name() {
return cust_name;
}
public void setCust_name(String cust_name) {
this.cust_name = cust_name;
}
public String getCust_phone() {
return cust_phone;
}
public void setCust_phone(String cust_phone) {
this.cust_phone = cust_phone;
}
public String getCust_mobile() {
return cust_mobile;
}
public void setCust_mobile(String cust_mobile) {
this.cust_mobile = cust_mobile;
}
public String getCust_image() {
return cust_image;
}
public void setCust_image(String cust_image) {
this.cust_image = cust_image;
}
@Override
public String toString() {
return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_phone=" + cust_phone
+ ", cust_mobile=" + cust_mobile + ", cust_image=" + cust_image + "]";
}
}
編寫對映檔案
<?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.itzheng.crm.domain.Customer" table="cst_customer">
<!-- 建立類中的屬性與表中的主鍵對應 -->
<id name="cust_id" column="cust_id">
<!-- 主鍵生成策略 -->
<generator class="native" />
</id>
<!-- 建立類中的普通的屬性和表的欄位的對應對映 -->
<property name="cust_name" column="cust_name" />
<property name="cust_phone" column="cust_phone" />
<property name="cust_mobile" column="cust_mobile" />
<property name="cust_image" column="cust_image" />
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<!-- 方言 -->
<property name="dialert">org.hibernate.dialect.Oracle11gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hbm2ddl.auto">none</property>
<!-- 懶載入 -->
<property name="hibernate.enable_lazy_load_no_trans">true</property>
<!-- 實體類的驗證 -->
<property name="javax.persistence.validation.mode">none</property>
</session-factory>
</hibernate-configuration>
<?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 ">
<!-- 資料來源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8"></property>
<property name="user" value="root" ></property>
<property name="password" value="root" ></property>
</bean>
<!-- sessionFactory;SessionFactory介面負責初始化Hibernate。它充當資料儲存源的代理,並負責建立Session物件。 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml" ></property>
<property name="mappingLocations" value="classpath:com/itzheng/crm/domain/*.hbm.xml" ></property>
</bean>
<!-- 資料存取層 -->
<bean id="customerDao" class="com.itzheng.crm.dao.impl.CustomerDao">
<property name="sessionFactory" ref="sessionFactory" ></property>
</bean>
</beans>
package com.itzheng.crm.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.itzheng.crm.dao.ICustomerDao;
import com.itzheng.crm.domain.Customer;
public class CustomerDao extends HibernateDaoSupport implements ICustomerDao {
public List<Customer> findAll() {
return (List<Customer>) getHibernateTemplate().find("from Customer");
}
}
package com.itzheng.crm.dao.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.itzheng.crm.dao.impl.CustomerDao;
public class CustomerTest {
@Test
public void tt() {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml");
CustomerDao customerDao = (CustomerDao)ac.getBean("customerDao");
System.out.println(customerDao.findAll().size());
}
}
查詢成功
<?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 ">
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 通知 -->
<tx:advice id="advice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.itzheng.crm.service.impl.*.*(..))" id="myPointCut"/>
<aop:advisor advice-ref="advice" pointcut-ref="myPointCut" />
</aop:config>
<!-- 業務 -->
<bean id="customerService" class="com.itzheng.crm.service.impl.CustomerService">
<property name="customerDao" ref="customerDao" ></property>
</bean>
</beans>
package com.itzheng.crm.dao;
import java.util.List;
import com.itzheng.crm.domain.Customer;
public interface ICustomerDao {
public List<Customer> findAll();
}
package com.itzheng.crm.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.itzheng.crm.dao.ICustomerDao;
import com.itzheng.crm.domain.Customer;
public class CustomerDao extends HibernateDaoSupport implements ICustomerDao {
public List<Customer> findAll() {
return (List<Customer>) getHibernateTemplate().find("from Customer");
}
}
package com.itzheng.crm.service.impl;
import java.util.List;
import com.itzheng.crm.dao.ICustomerDao;
import com.itzheng.crm.domain.Customer;
import com.itzheng.crm.service.ICustomerService;
public class CustomerService implements ICustomerService {
private ICustomerDao customerDao;
public void setCustomerDao(ICustomerDao customerDao) {
this.customerDao = customerDao;
}
public List<Customer> findAll() {
return customerDao.findAll();
}
}
<!-- 匯入,僅供測試用 -->
<import resource="classpath:spring/applicationContext-dao.xml"/>
package com.itzheng.crm.dao.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.itzheng.crm.dao.impl.CustomerDao;
public class CustomerTest {
@Test
public void tt() {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml");
CustomerDao customerDao = (CustomerDao)ac.getBean("customerDao");
System.out.println(customerDao.findAll().size());
}
}
package com.itzheng.crm.web.action;
import java.util.List;
import com.itzheng.crm.domain.Customer;
import com.itzheng.crm.service.impl.CustomerService;
import com.opensymphony.xwork2.ActionContext;
public class CustomerAction {
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
public String list() {
//查詢所有
List<Customer> customerList = customerService.findAll();
//所有的客戶資訊都放入到值棧當中
ActionContext.getContext().put("list", customerList);
//返回list.jsp頁面
return "list";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach items="${list }" var="customer" >
${ customer.cust_id } --> ${ customer.cust_name } <br>
</c:forEach>
</body>
</html>
<?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 ">
<bean id="customerAction" class="com.itzheng.crm.web.action.CustomerAction">
<property name="customerService" ref="customerService" ></property>
</bean>
</beans>
<?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 ">
<import resource="classpath:spring/applicationContext-dao.xml" />
<import resource="classpath:spring/applicationContext-service.xml" />
<import resource="classpath:spring/applicationContext-action.xml" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http: // struts.apache.org/dtds/struts-2.3.dtd" >
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="customer_*" class="customerAction" method="{1}">
<result name="list">/list.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- spring上下文組態檔路徑 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 載入spring上下文 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Hibernate lazy load -->
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
存取成功