ssh全註解框架整合
1、ssh框架開發的應用層級結構
j2ee應用可以分為3層:
1、表示層
2、業務邏輯層
3、資料服務層
ssh將應用分層更加細化(ssh將業務邏輯層劃分了4層):
1、action層(控制層mvc中的c層)
2、service層 (業務層mvc中的m層)
3、dao層(資料訪問層)
4、entity層(資料實體層)
2、ssh中各個框架的作用
strust:
整個應用架構的骨架,負責應用中mvc模型的實現,向下層傳遞前端請求,向上層傳遞服務響應,主要作用於action層;
spring:
主要作用是依賴注入和控制反轉以達到解耦的目的,用於對整個應用中的bean例項進行管理,作用於ssh各個層;
hibernate:
主要用於資料庫操作,提供了便捷的資料庫操作框架,主要作用於dao層;
3、ssh全註解框架搭建
1、建立web專案並勾選web.xml
2、匯入ssh所需jar
可以去官網下載ssh所需jar包或者在我的資源中下載(解壓後的lib資料夾中):http://download.csdn.net/download/duoluo9/9990702
3、配置web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"
<display-name>demo1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 自動掃描action -->
<init-param>
<param-name>actionPackages</param-name>
<param-value>ssh.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring監聽器配置開始 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
4、配置spring的applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- <bean id="northMan"class="ssh.entity.NorthMan"></bean>
<beanid="southMan" class="ssh.entity.SouthMan"></bean>
-->
<!-- 自動掃描與裝配bean -->
<context:component-scanbase-package="ssh.*"></context:component-scan>
<context:annotation-config/>
<!-- dbcp配置 -->
<beanid="dataSource"class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<propertyname="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<propertyname="url">
<value>jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false</value>
</property>
<propertyname="username">
<value>root</value>
</property>
<propertyname="password">
<value>root</value>
</property>
</bean>
<beanid="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<propertyname="dataSource">
<reflocal="dataSource"/>
</property>
<propertyname="hibernateProperties">
<props>
<!--配置Hibernate的方言 -->
<propkey="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<propkey="hibernate.hbm2ddl.auto">update</prop>
<!--格式化輸出sql語句 -->
<propkey="hibernate.show_sql">true</prop>
<propkey="hibernate.format_sql">true</prop>
<propkey="hibernate.use_sql_comments">false</prop>
</props>
</property>
<!--自動掃描實體 -->
<propertyname="packagesToScan"value="ssh.entity"/>
</bean>
<!-- 用註解來實現事務管理 -->
<beanid="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<propertyname="sessionFactory"ref="sessionFactory"></property>
</bean>
<tx:annotation-driventransaction-manager="txManager"/>
</beans>
4、ssh中用到的註解標籤(來源於網路)
strust:
名稱空間註釋(動作註釋):
@ Namespace註釋允許在Action類中,而不是基於零配置的約定動作的名稱空間的定義。
@Namespace("/content")
public class Employee extends ActionSupport{
...
}
結果註釋 - (動作譯註):
@ Result註解允許在Action類中,而不是一個XML檔案中定義的動作結果。
@Result(name="success", value="/success.jsp")
public class Employee extends ActionSupport{
...
}
結果註釋 - (動作譯註):
@ Results註解定義了一套動作的結果。
@Results({
@Result(name="success", value="/success.jsp"),
@Result(name="error", value="/error.jsp")
})
public class Employee extends ActionSupport{
...
}
註釋後(攔截註釋):
@After註解標誌著一個需要呼叫後的主要操作方法和執行結果的操作方法。返回值將被忽略。
public class Employee extends ActionSupport{
@After
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}
註釋之前(攔截註釋):
@ Before註釋標記需要一個操作方法的主要操作方法之前被呼叫執行結果。返回值將被忽略。
public class Employee extends ActionSupport{
@Before
public void isAuthorized() throws AuthenticationException {
// authorize request, throw exception if failed
}
public String execute() {
// perform secure action
return SUCCESS;
}
}
BeforeResult註釋 - (攔截註釋):
@ BeforeResult註解標誌著一個結果之前需要執行的操作方法。返回值將被忽略。
public class Employee extends ActionSupport{
@BeforeResult
public void isValid() throws ValidationException {
// validate model object, throw exception if failed
}
public String execute() {
// perform action
return SUCCESS;
}
}
ConversionErrorFieldValidator註釋 - (驗證譯註):
此驗證註解如果有任何轉換錯誤進行了實地檢查,並適用於他們,如果他們存在。
public class Employee extends ActionSupport{
@ConversionErrorFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getName() {
return name;
}
}
DateRangeFieldValidator註釋 - (驗證譯註):
這驗證註解檢查日期欄位的值在指定範圍內。
public class Employee extends ActionSupport{
@DateRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
min = "2005/01/01", max = "2005/12/31")
public String getDOB() {
return dob;
}
}
DoubleRangeFieldValidator註釋 - (驗證譯註):
此驗證註解檢查雙欄位有一個值,該值在指定範圍內。如果既不最小或最大,什麼都不會做的。
public class Employee extends ActionSupport{
@DoubleRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
minInclusive = "0.123", maxInclusive = "99.987")
public String getIncome() {
return income;
}
}
EmailValidator註釋 - (驗證譯註):
這驗證註解檢查一個欄位是一個有效的E-mail地址,如果它包含一個非空的字串。
public class Employee extends ActionSupport{
@EmailValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getEmail() {
return email;
}
}
ExpressionValidator註釋 - (驗證譯註):
這種非欄位級驗證驗證所提供的正則表示式。
@ExpressionValidator(message = "Default message", key = "i18n.key",
shortCircuit = true, expression = "an OGNL expression" )
IntRangeFieldValidator註釋 - (驗證譯註):
這驗證註解檢查一個數字欄位的值在指定的範圍內。如果既不最小或最大,什麼都不會做的。
public class Employee extends ActionSupport{
@IntRangeFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
min = "0", max = "42")
public String getAge() {
return age;
}
}
RegexFieldValidator 註釋 - (驗證譯註):
這個註解驗證一個字串欄位,使用正則表示式。
@RegexFieldValidator( key = "regex.field", expression = "yourregexp")
RequiredFieldValidator 註釋 - (驗證譯註):
這驗證註解檢查一個欄位不為空。標註必須被應用在方法層面。
public class Employee extends ActionSupport{
@RequiredFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getAge() {
return age;
}
}
RequiredStringValidator註釋 - (驗證譯註):
這驗證註解檢查一個字串欄位不為空(即非空,長度> 0)。
public class Employee extends ActionSupport{
@RequiredStringValidator(message = "Default message",
key = "i18n.key", shortCircuit = true, trim = true)
public String getName() {
return name;
}
}
StringLengthFieldValidator註釋 - (驗證譯註):
這個驗證檢查字串欄位是合適的長度。假定該欄位是一個字串。如果設定既不是minLength 也不是最大長度,什麼都不會做。
public class Employee extends ActionSupport{
@StringLengthFieldValidator(message = "Default message",
key = "i18n.key", shortCircuit = true,
trim = true, minLength = "5", maxLength = "12")
public String getName() {
return name;
}
}
UrlValidator註釋 - (驗證譯註):
這個驗證檢查一個欄位是一個有效的URL。
public class Employee extends ActionSupport{
@UrlValidator(message = "Default message",
key = "i18n.key", shortCircuit = true)
public String getURL() {
return url;
}
}
驗證註釋 - (驗證譯註):
如果想使用多個相同型別的註釋,這些註釋必須巢狀在@Validations() 註釋。
public class Employee extends ActionSupport{
@Validations(
requiredFields =
{@RequiredFieldValidator(type = ValidatorType.SIMPLE,
fieldName = "customfield",
message = "You must enter a value for field.")},
requiredStrings =
{@RequiredStringValidator(type = ValidatorType.SIMPLE,
fieldName = "stringisrequired",
message = "You must enter a value for string.")}
)
public String getName() {
return name;
}
}
CustomValidator註釋 - (驗證譯註):
這個註解可以用於自定義驗證。使用ValidationParameter的註釋,以提供額外的 params.
@CustomValidator(type ="customValidatorName", fieldName = "myField")
轉換註釋 - (型別轉換註釋):
這是一個標記註釋型別轉換型別級別。轉換註釋必須應用在型別級別。
@Conversion()
public class ConversionAction implements Action {
}
CreateIfNull註釋 - (型別轉換註釋):
這個註解設定型別轉換CreateIfNull。必須應用在域或方法級CreateIfNull註解。
@CreateIfNull( value = true )
private List<User> users;
元素註釋 - (型別轉換註釋):
這個註解設定元素進行型別轉換。必須應用在欄位域或方法級元素的註解。
@Element( value = com.acme.User )
private List<User> userList;
關鍵註釋 - (型別轉換註釋):
這個註解設定進行型別轉換的關鍵。必須應用在域或方法級的關鍵註解。
@Key( value = java.lang.Long.class )
private Map<Long, User> userMap;
KeyProperty註釋 - (型別轉換註釋):
這個註解設定型別轉換KeyProperty。必須應用在域或方法級KeyProperty註解。
@KeyProperty( value = "userName" )
protected List<User> users = null;
TypeConversion註釋 - (型別轉換註釋):
這個註解的註解是用於類和應用程式的轉換規則。註解可以應用於TypeConversion在屬性和方法的級別。
@TypeConversion(rule = ConversionRule.COLLECTION,
converter = "java.util.String")
public void setUsers( List users ) {
this.users = users;
}
spring :
使用 @Repository、@Service、@Controller 和 @Component 將類標識為 Bean使用 @PostConstruct 和 @PreDestroy 指定生命週期回撥方法
使用 @Required 進行 Bean 的依賴檢查
使用 @Resource、@Autowired 和 @Qualifier 指定 Bean 的自動裝配策略
使用 @Configuration 和 @Bean 進行 Bean 的宣告
混合使用 XML 與註解進行 Bean 的配置
hibernate:
@Entity --註釋宣告該類為持久類。將一個Javabean類宣告為一個實體的資料庫表對映類,最好實現序列化.此時,預設情況下,所有的類屬性都為對映到資料表的永續性欄位.若在類中,新增另外屬性,而非對映來資料庫的,要用下面的Transient來註解.
@Table(name="promotion_info") --永續性對映的表(表名="promotion_info)[email protected]是類一級的註解,定義在@Entity下,為實體bean對映表,目錄和schema的名字,預設為實體bean的類名,不帶包名.
@Id--註釋可以表明哪種屬性是該類中的獨特識別符號(即相當於資料表的主鍵)。
@GeneratedValue --定義自動增長的主鍵的生成策略.
@Transient --將忽略這些欄位和屬性,不用持久化到資料庫.適用於,在當前的持久類中,某些屬性不是用於對映到資料表,而是用於其它的業務邏輯需要,這時,須將這些屬性進行transient的註解.否則系統會因對映不到資料表相應欄位而出錯.
@Temporal(TemporalType.TIMESTAMP)--宣告時間格式
@Enumerated --宣告列舉
@Version --宣告新增對樂觀鎖定的支援
@OneToOne --可以建立實體bean之間的一對一的關聯
@OneToMany --可以建立實體bean之間的一對多的關聯
@ManyToOne --可以建立實體bean之間的多對一的關聯
@ManyToMany --可以建立實體bean之間的多對多的關聯
@Formula --一個SQL表示式,這種屬性是隻讀的,不在資料庫生成屬性(可以使用sum、average、max等)
@OrderBy --Many端某個欄位排序(List)
1.2
Hibernate 能夠出色地自動生成主鍵。Hibernate/EBJ 3 註釋也可以為主鍵的自動生成提供豐富的支援,允許實現各種策略。
其生成規則由@GeneratedValue設定的.這裡的@id和@GeneratedValue都是JPA的標準用法, JPA提供四種標準用法,由@GeneratedValue的原始碼可以明顯看出.
JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一個特定的資料庫表格來儲存主鍵。
SEQUENCE:根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。
IDENTITY:主鍵由資料庫自動生成(主要是自動增長型)
AUTO:主鍵由程式控制。
在指定主鍵時,如果不指定主鍵生成策略,預設為AUTO。
@Id
相當於
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
identity:
使用SQL Server 和 MySQL 的自增欄位,這個方法不能放到 Oracle 中,Oracle 不支援自增欄位,要設定sequence(MySQL 和 SQL Server 中很常用)。
Oracle就要採用sequence了.
同時,也可採用uuid,native等其它策略.(相關用法,上網查詢)
[2]
第一個永續性類
@Entity
@Table(name="T_MODEL_PLANE")
public class ModelPlane implements Serializable {
@Id
@Column(name="PLANE_ID")
@GeneratedValue(strategy=GenerationType.AUTO) //註解於屬性中
/*
對於oracle想使用各自的Sequence,設定如下:
@GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ")
@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ")
另外:
對於自動增長後,在資料表中的相應欄位,要設定欄位為auto_increment.
*/
private Long id;
private String name;//註解寫於getter方法之上.請見下.
//DATE - java.sql.Date
//TIME - java.sql.Time
//TIMESTAMP - java.sql.Timestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name="start_time")
private Date startTime;
//顯示0 隱藏1
public static enum DisplayType {顯示,隱藏}
@Enumerated(value = EnumType.ORDINAL)//ORDINAL序數
private DisplayType displayType = DisplayType.顯示;
//1.sql語句中的欄位和表名都應該和資料庫相應,而不是類中的欄位,
//若帶有引數如la.id= id,這個=id才是類中屬性
//2.操作欄位一定要用別名
@Formula(select COUNT(la.id) from largess la)
private int count;
//註解於方法中
@Column(name="PLANE_ID", length=80, nullable=true) //較詳細定義
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
其它的setter,getter省略......
}
該內容將對映到下表中:
CREATE TABLE T_MODEL_PLANE
(
PLANE_ID long,
PLANE_NAME varchar
其它欄位省略...
)
預設情況下,Hibernate 會將持久類以匹配的名稱對映到表和欄位中。例如,下例中,若不用註解,則會對映到如下一表中:
CREATE TABLE MODELPLANE
(
ID long,
NAME varchar
其它欄位省略...
)
[3]
一對多註解:
1.
在一對多註解中,會用到:
"一"方:
@OneToMany --> mappedBy:"多"方的關聯屬性(被控方)
"多"方:
@ManyToOne --> @JoinColumn,"多"方定義的外來鍵欄位.
如資料表定義外來鍵如下:
FOREIGN KEY (classid) REFERENCES classes(id)
則:
@JoinColumn(name="classid")
2.
在雙向關聯中,有且僅有一端作為主體(owner)端存在:主體端負責維護聯接列(即更新),對於不需要維護這種關係的從表則通過mappedNy屬性進行宣告。mappedBy的值指向另一主體的關聯屬性。例子中,mappedBy的值為classes。
附加說明:
mappedBy相當於過去的inverse="true".
inverse=false的side(side其實是指inverse=false所位於的class元素)端有責任維護關係,而inverse=true端無須維護這些關係。
3.
cascade與fetch使用說明:
Cascade
CascadeType.PERSIST (級聯新建)
CascadeType.REMOVE (級聯刪除)
CascadeType.REFRESH (級聯重新整理)
CascadeType.MERGE (級聯更新)中選擇一個或多個。
CascadeType.ALL
fetch屬性:
關聯關係獲取方式,即是否採用延時載入。
LAZY(預設值)採用延時載入,查詢資料時,不一起查詢關聯物件的資料。而是當訪問關聯物件時(如:getStudnets()時)才觸發相應的查詢操作,獲取關聯物件資料。
EAGER:是在查詢資料時,也直接一起獲取關聯物件的資料。
package oneToMany;
import java.util.Set;
import javax.persistence.*;
/*
注意匯入時,是匯入:import javax.persistence.*;
非匯入org.hibernate的相關類:import org.hibernate.annotations.Entity;
*/
@Entity
@Table(name="classes")
public class Classes implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@OneToMany(cascade=CascadeType.ALL,mappedBy="classes")
private Set<Student> students;
//getter,setter省略
}
package oneToMany;
import javax.persistence.*;
@Entity
@Table(name="student")
public class Student implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int sid;
private String sname;
//若有多個cascade,可以是:{CascadeType.PERSIST,CascadeType.MERGE}
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="classid") //student類中對應外來鍵的屬性:classid
private Classes classes;
//getter,setter省略
}
public class TestOneToMany {
/*
CREATE TABLE student ( --要定義外來鍵!!!!!!!
`sid` double NOT NULL auto_increment,
`classid` double NULL,
`sname` varchar(255) NOT NULL,
PRIMARY KEY (sid),
INDEX par_ind (classid),
FOREIGN KEY (classid) REFERENCES classes(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
*/
public static void main(String[] args) throws SQLException
{
try
{
SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
/*
因為mappedBy是定義在classes中,即classes類不負責維護級聯關係.即維護者是student.所以,
1.要將clsses的資料,賦給student,即用student的setClasses()方法去捆定class資料;
2.在進行資料插入/更新session.save()/session.update()時,最後操作的是student.
*/
Classes classes=new Classes();
classes.setName("access");
Student st1=new Student();
st1.setSname("jason");
st1.setClasses(classes);
session.save(st1);
Student st2=new Student();
st2.setSname("hwj");
st2.setClasses(classes);
session.save(st2);
tx.commit();
/*
輸出如下:
Hibernate: insert into classes (name) values (?)
Hibernate: insert into student (classid, sname) values (?, ?)
Hibernate: insert into student (classid, sname) values (?, ?)
*/
/*
因為一端維護關係另一端不維護關係的原因,我們必須注意避免在應用中用不維護關係的類(class)建立關係,因為這樣建立的關係是不會在資料庫中儲存的。
如上的程式碼倒過來,則插入時,student的外來鍵值為空.如下:
*/
// Student st1=new Student();
// st1.setSname("jason");
// session.save(st1);
//
// Student st2=new Student();
// st2.setSname("hwj");
// session.save(st2);
//
// Set<Student> students=new HashSet<Student>();
// students.add(st1);
// students.add(st2);
//
// Classes classes=new Classes();
// classes.setName("access");
// classes.setStudents(students);
// session.save(classes);
/*
輸出如下:
Hibernate: insert into student (classid, sname) values (?, ?)
Hibernate: insert into student (classid, sname) values (?, ?)
Hibernate: insert into classes (name) values (?)
*/
}
catch(HibernateException e)
{
e.printStackTrace();
}
}
}
[4]
多對多註解:
在多對多註解中,雙方都採用@ManyToMany.
其中被控方,像一對多註解中設定一樣,也要設定mappedBy.
其中主控方,不像一對多註解那樣,採用@joinColumn,而是採用@joinTable.如下:
@JoinTable(name="j_student_course" ,joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="cid")})
其中,
如上所說,mappedBy,相當於inverse="true".所以,在@joinTable中的inverseJoinColumns中定義的欄位為mappedBy所在類的主鍵.
joinColumns定義的欄位,就是當前類的主鍵.
@Entity
@Table(name="jcourse")
public class Jcourse {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int cid;
private String cname;
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.LAZY ,mappedBy="courses")
private Set<Jstudent> students;
//setter,getter省略....
}
@Entity
@Table(name="jstudent")
public class Jstudent {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int sid;
private String sname;
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=FetchType.EAGER)
//inverseJoinColumns中對應的id為以下屬性course的對應id.
@JoinTable(name="j_student_course" ,joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="cid")})
private Set<Jcourse> courses;
//setter,getter省略....
}
public class Test {
public static void main(String[] args) {
try
{
SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
Jcourse course=new Jcourse();
course.setCname("jason-english");
session.save(course); //先各自儲存.
Jcourse course2=new Jcourse();
course2.setCname("herry-english");
session.save(course2);
Set<Jcourse> courses=new HashSet<Jcourse>();
courses.add(course);
courses.add(course2);
Jstudent student=new Jstudent();
student.setSname("jason");
student.setCourses(courses);
session.save(student);// 要用非mapby定義的類(studet)來作為主者(會控制級聯關係),一對多,多對一也一樣道理.
//可以嘗試反過來.
tx.commit();
}
catch(HibernateException e)
{
e.printStackTrace();
}
}
}
原始碼地址:
https://github.com/duoluo9/ssh-conformity
相關推薦
ssh全註解框架整合
1、ssh框架開發的應用層級結構 j2ee應用可以分為3層: 1、表示層2、業務邏輯層3、資料服務層ssh將應用分層更加細化(ssh將業務邏輯層劃分了4層): 1、action層(控制層mvc中的c層)2、service層 (業務層mvc中的m層)3、dao層(資料訪問層
ssh全註解整合
dialect BE pen intercept 監聽 head oca resource ansi 使用註解的方式,配置文件最少可以精簡到三個,web.xml、applicationContext.xml和struts.xml。Hibernate可以完全交給Spring來
最全三大框架整合(使用對映)——IDeptDao.java
/** * @Title: IDeptDao.java * @Package org.dao * @Description: TODO該方法的主要作用: * @author A18ccms A1
ssh全註解出現的一些問題
1、ssh全註解當我們繼承hibernatedaosupport類時出現如下錯誤資訊: Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is req
SSH全註解-annotation詳細配置
使用 Spring 2.5 註釋驅動的 IoC 功能 https://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/ 只是參考. 先根據http://panyongzheng.iteye.com/blog/1103591配置好無註解,
Maven搭建MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3全註解框架
一、新建專案 1. 新建maven專案 New ->project 選擇Maven project next 在filter輸入webapp 選擇maven-archetype-webapp Group id輸入inscribe,artifac
SSH全註解搭建
import java.io.Serializable; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import java
【JavaEE】SSH全註解
1.下載必要核心jar包,並引入到專案 2.需要注意的spring配置檔案,由與需要使用全註解的方式 配置檔案和之前有些許不同 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt
最全三大框架整合(使用對映)——applicationContext.xml裡面的配置
applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
最全三大框架整合(使用對映)——struts.xml和web.xml配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundat
SSH全註解式開發
第一步:引入註解的jar包 struts2-convention-plugin-2.3.16.3.jar struts2的註解 Struts2:替換掉struts.xml檔案 在Action類的上面放上: 替換掉struts.xml裡面的namespace: @Namesp
最全三大框架整合(使用對映)——DeptServiceImpl.java
/** * @Title: DeptServiceImpl.java * @Package org.service.impl * @Description: TODO該方法的主要作用: * @a
MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3全註解框架搭建.docx
一、新建web專案 1. File-->New-->web project 2. 工程名稱:king-back-->點選Java EE 6.0標準 二、新增ssh2支援 1. 新增struts2 工程上點
ssh框架整合之註解版
數據 input ide drive pac form cto log tor 一,引jar包 <!--單測--> <dependency> <groupId>junit</groupI
全註解整合SSM框架
目錄 1.建立WebAppInitializer配置類 2.配置dispatcherServlet 3.配置Spring IoC 4.配置Mybatis 5.配置對映器 6.建立Mapper介面 7.最後 1.建立WebAppInitializer配置類
SSH框架整合-使用註解方式配置事務管理
修改applicationContext.xml 在SSH 通過XML 配置事務管理 的基礎上,修改applicationContext.xml檔案. 1. 去掉<tx:advice和 <aop:config 配置 2. 保留<bean id="trans
SSH框架整合的其它方式
blog style size adding ces hbm.xml tro 數據庫配置 schema --------------------siwuxie095 SSH 框架整合的其它方式 1、主要是整合
Struts2+Spring+Hibernate實現員工管理增刪改查功能(一)之ssh框架整合
pri support scrip ext ack efault ring src 兩張 前言 轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html 本項目是我寫的一個練習,目的是回顧ssh框架的整合以及
SSH框架整合項目(一)
throw all 總頁數 調試 plugin session doc dia pla 這裏整合的是struts2 + spring + hibernate框架,只是簡單的整合。 項目工程的結構如下: 下面是使用的pom文件。 <properties>
ssh框架整合之xml版
pom factor lns sof spl oca 打印sql index.jsp mic 一,引jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or