머리말
오늘은 SpringMVC+Hibernate의 구성을 검토 할 것입니다. 원래 스프링 보안 권한 제어 프레임 워크도 포함될 것이라고 생각했지만 콘텐츠가 너무 많다는 것을 알았습니다. 다음 기사에 맡기겠습니다. 이 기사는 주로 SpringMVC4.1.4 및 Hibernate4.3.8을 구축합니다. 나는 또한 전에 많은 SpringMVC를 사용했습니다. 이 부분은 그것에 매우 익숙합니다. 결국 SpringMVC는 1 년 이상 개발되었습니다. 이번에는 지속성 계층이 최대 절전 모드를 사용하고 데이터 소스는 C3P0을 사용하며 데이터베이스는 MySQL을 임시로 사용합니다. 주로 최대 절전 모드를 검토하고 싶습니다. SpringMVC+Hibernate의 프레임 워크를 구축한다는 아이디어는 다음과 같습니다.
1. 설계 데이터베이스 : 테이블 구조를 설계하고 3NF를 충족하고 최대 절전 모드 도구를 사용하여 해당 엔터티 엔터티를 자동으로 생성하는 것이 가장 좋습니다.
1. Maven 프로젝트를 만들고 필요에 따라 Maven 패키지 종속성을 입력하십시오.
2. 스프링 빌드 : 제어층 콩의 스프링 주입을 구성하십시오.
3. 최대 절전 모드 빌드 : 데이터 소스를 구성하고, 세션 기능을 구성하고, 트랜잭션을 구성하며, 보조 캐시 ehcache를 구성합니다.
4. Spring+Hibernate의 프레임 워크 구성을 테스트하고 단위 테스트 주니트, 테스트 트랜잭션 구성 등을 작성하십시오.
5. 입력 SpringMVC : SpringMVC 구성 정보를 구성합니다.
6. Web.xml 컨테이너를 구성하십시오
7. Maven은 서버 및 테스트를 컴파일, 패키지 및 배포하는 세 가지 프레임 워크의 통합을 테스트합니다.
1. 데이터베이스 설계
권한, 역할 및 사용자의 표를 설계하십시오. 물론 사용자가 여러 역할을 할 수있는 경우 한 역할은 여러 사용자를 소유합니다. 하나의 역할에는 여러 권한이 있으며 한 권한은 여러 역할에 해당합니다. 따라서 데이터베이스 테이블 구조 설계에 따르면 3NF를 충족하면 5 개의 테이블이 존재해야합니다. 테이블의 특정 정보는 나열되지 않으며 (소스 코드에 다운로드 할 수 있으며, 데이터베이스도 있습니다) 테이블 관계는 다음과 같습니다.
이 ID에서만 UUID (36 비트)가 사용됩니다.
2. Maven 프로젝트를 만들고 pom.xml 파일 작성
Maven WebApp 프로젝트를 작성하고 Pom.xml 파일을 작성하고 필요한 패키지 종속성을 소개하십시오. 필요한 모든 것을 여기에 매핑하겠습니다.
pom.xml 파일의 내용은 다음과 같습니다.
<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/0.0.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <modelversion> 4.0.0 </modelversion> <groupid> org.andy.sh </groupid> <artifactid> springmvc_hibernate_demo </packating> war </packaging </packaging </packaging </packaging> 0.0.0.1-shot <name> springmvc_hibernate_demo maven webapp </name> <url> http://maven.apache.org </url> <proferties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <spring.version> 4.1.4.prred.reneas. <hibernate.version> 4.3.8.final </hibernate.version> <jackson.version> 2.5.0 </jackson.version> </properties> <pectionies> <!-junit-> <pectionency> <groupid> junit </groupid> <artifactid> junit> <artifactid> 4.12 </version> <scope> </version> </version> </version> </version> <!-스프링-> <pectionency> <groupid> org.springframework </groupid> <artifactid> spring-core </artifactid> <버전> $ {spring.version} </version> </dependency> <groupid> org.springframwork </groupid> <버전> $ {spring.version} </version} </version> </dependency> <pectionency> <groupid> org.springframework </groupid> <artifactid> spring-context </artifactid> <버전> $ {spring.version} </version> </dependency> <groupid> org.springframwork> <artifactid> spring-tx </artifactid> <버전> $ {spring.version} </version} </version} </version} </version </dependency> <prection> <groupid> org.springframework </groupid> <artifactid> spring-web </artifactid> <version> $ {spring.version} </dependency> </dependency> <pelaxency> <groupid> org.springframework </groupid> <artifactid> spring-test </artifactid> <bersion> $ {spring.version} </version> <copop> </scope> </fexendency> <!-springmvc-> <peencivency> <groupid> org.springframework </groupsid> <아티 팩트> Spring-webmvc </artifactid> <버전> $ {spring.version} </version> </fectionency> <!-관계형 데이터베이스를 통합 할 때 Hibernate JPA와 같은 구성이 필요합니다. -> <pectionency> <groupId> org.springframework </groupid> <artifactid> spring-orm </artifactid> <버전> $ {spring.version} </version} </version} </version} </version} </version </fectionency> <!-<pelection> <groupid> org.hibernate </groupid> Hibernate-coore </artifactid> <버전> $ {hibernate.version} </version> </dependency> <pectionency> <groupid> org.hibernate </groupid> <artifactid> hibernate-ehcache </artifactid> <버전> $ {hibernate.version} </version> <! <feence ehcache-> <feence ehcache-> < <groupid> net.sf.ehcache </groupid> <artifactid> ehcache </artifactid> <bersion> 2.9.0 </version> </fectionement> <! <!-log4j-> <prementency> <groupId> log4J </groupId> <artifactid> log4J </artifactID> 1.2.17 </deption> <!-mysql> <! <pectionency> <groupId> mySQL </groupId> <artifactID> mySQL-connector-java </artifactID> <버전> 5.1.34 </version> </dependency> <!-c3p0 데이터 소스-> <groupid> com.mchange </groupid> <artifactid> c3p0 </artifactid> </artifactid>. </dependency> <!-json-> <pectionency> <groupid> com.alibaba </groupid> <artifactid> fastjson </artifactid> <version> 1.2.3 </version> </dependency> <groupid> com.fasterxml.jackson.core </groupid> <artifactid> Jackson-Annotations </artifactid> <버전> $ {jackson.version} </version> </dependency> <pectionency> <groupid> com.fasterxml.jackson.core </groupid> <artifactid> jackson-core </artifactid> <version> $ {jackson.version} </version> </fectionency> <groupid> com.fasterx.fasterx <artifactid> jackson-databind </artifactid> <버전> $ {jackson.version} </version} </version> </dependency> <!-aop-> <pectionency> <groupid> org.aspectj </groupid> <artifactid> agageweaver </artifactid> version> 1.8.4 </version> </septlet> <!-servle-> <! <groupid> javax.servlet </groupid> <artifactid> servlet-api </artifactid> <bersion> 3.0-alpha-1 </version> <scope> 제공 </scope> </expendency> <groupid> javax.servlet </groupid> <artifactid> jstl </artifactid> 1.2 </version> 1.2 </version> 1.2 </dependencies> <build> <finalname> springmvc_hibernate_demo </finalName> <Plugins> <!-격리 된 클래스 로더에서 Junit 단위 테스트를 실행합니다-> <grugin> <groupId> org.apache.maven.plugins </groupid> <artifactid> maven-surefire-plugin </artifactid> 4. <configuration> <skiptests> true </skiptests> </configuration> </plugin> <grugin> org.apache.maven.plugins </groupID> <ArtifactID> Maven-War-Plugin </artifactid> <3 </version> <configuration> <webxml> src/main/webapp/web-inf/web.xml </webxml> </configuration> </plugin> <!-java doc-> <plugin> org.apache.maven.plugins </groupid> maven-Javadoc-Plugin> </artifactid>. <configuration> <javadocdirectory> target/javadoc </javadocdirectory> <reportOutputDirectory> target/javadoc </reportOutputDirectory> <charset> utf-8 </charset> <comoding> utf-8 </encoding> utf-8 </docome- </show> </show> </plugin> <!-네이티브에 배포-> <plugin> <groupId> org.codehaus.cargo </groupid> <artifactid> Cargo-maven2-plugin </artifactid> <버전> 1.0 </version> <configuration> <container> <containerid> tomcat6x </containerid> <come> d :/webserver/apache-tomcat-6.0.0.39 </home> </컨테이너> <configuration> <type> 기존 </type> <con> d :/webserver/apache-tomcat-6.0.39 </home> </configuration> </plugin> </plugins> </project> </project>3. 스프링 구성을 소개합니다
구성 파일을 작성하고 구성 파일을 SRC/Main/Resource Resource 디렉토리에 배치하십시오 (아래 동일).
프로젝트 config.properties에 필요한 구성 정보
#application configs#jdbc c3p0 configjdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc : mysql : // localhost : 3306/work? useunicode = true & farcherencoding = utf-8jdbc.username = rootjdbc.pass passeppass. confighibernate.dialect = org.hibernate.dialect.mysqldialecthibernate.show_sql = truehibernate.format_sql = falseHibernate.hbm2ddl.auto = updatehibernate.cache.use_second_level_cache = truehibernate.cache.cache.cache.cache.cache.cache.cache.cache.cache. truehibernate.cache.region.factory_class = org.hibernate.cache.ehcache.ehcacheregionfactoryhibernate.cache.provider_configuration_file_resource_path = ehcache.xml
3.1. 봄 구성
spring.xml의 구성 파일은 다음과 같습니다.
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : context = "http://www.springframework.org/schema/context"xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/schema/scremans/spred-beans- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd "> <! <!-구성 파일을로드하십시오-> 컨텍스트 : 속성-placeholder location ="config.propertiate "///> bean-> <context : component-scan base-package = "org.andy.work.service.impl, org.andy.work.dao.impl" /> < /beans>
위의 스프링은 패키지 아래에 해당 구성 요소 Bean의 자동 Bean 주입 관리를 구성합니다. (@Repository, @Service)와 같은 DAO의 구현 클래스 및 Spring Manage 서비스를 인계해야합니다.
3.2. 로그 파일 구성 log4j를 소개합니다
log4j.properties의 구성 파일은 다음과 같습니다. ### log 레벨 설정 ### log4j.rootlogger = info, c, d, ### console ### log4j.appender.c = org.apache.log4j.consoppenderLog4j.appender.c.target.c.Appender. org.apache.log4j.patternlayoutlog4j.appender.c.layout.conversionpattern = [springmvc_hibernate_demo] [%p] [%-d {yyyy-mm-dd hh : mm : ss}]%C.%m (%l) | %m%n ### log 파일 ### log4j.appender.d = org.apache.log4j.dailyrollingfileAppenderlog4j.appender.d.file = ../logs/springmvc_hibernate_demo.loglog4j.appender.d.append = truelog4j.d.d.Threhold = threthOld. log4j.appender.d.layout = org.apache.log4j.patternlayoutlog4j.appender.d.layout.conversionpattern = [springmvc_hibernate_demo] [%p] [%-d {yyyy-mm-dd hh : mm : ss}]%m (%l) | %m%n ### 예외 ### log4j.appender.e = org.apache.log4j.dailyrollingfileAppenderlog4j.appender.e.file = ../logs/springmvc_hibernate_demo_error.loglog4j.appender.e.append.e.e.e.e.e.e.epholder.e. log4j.appender.e.layout = org.apache.log4j.patternlayoutlog4j.appender.e.layout.conversionpattern = [sspringmvc_hibernate_demo] [%p] [%-d {yyyy-mm-dd hh : mm : ss}]%m (%l) | %m%n 4. 최대 절전 모드 구성
최대 절전 모드 구성에는 주로 다음이 포함됩니다. 데이터 소스 C3P0 구성, 세션 변형 구성, 트랜잭션 관리자 구성 및 트랜잭션 관리 구성. Spring-hibernate.xml 파일은 다음과 같습니다.
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xmlns : tx = "http://www.springframework.org/schema/tx"xmlns : aop = "http://www.springframework.org/schema/aop"xsi : schemalocation = "http://www.springframwork.org/schema/schema/springwork.org/schema/schemas http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/sprring-44.1.ced http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd "> <schema source source c3p0-> Destroy-Method = "Close"> <속성 이름 = "DriverClass"value = "$ {jdbc.driver}" /> <Property name = "jdbcurl"value = "$ {jdbc.url}" /> <속성 이름 = "user"value = "$ {jdbc.username}" /> <property name = "valess" "jdbc. <!-요청 시간 초과-> <속성 이름 = "CheckoutTimeout"value = "30000" /> <!-60 초마다 연결 풀의 모든 유휴 연결을 확인하십시오. 기본값 : 0, 확인-> <속성 이름 = "idleconnectionTestPeriod"value = "30" /> <!-연결 데이터베이스 연결 풀의 최대 유휴 시간-> <속성 이름 = "maxIdletime"value = "30" /<!-연결 수에서 초기화 된 연결 풀-> <property name = "value ="5 " /minpoolsize. /> <property name = "maxpoolsize"value = "20" /> <!- 연결 풀의 연결이 소진 될 때 한 번에 C3P0에 의해 얻은 연결 수. 기본값 : 3-> <속성 이름 = "acquireIncrement"value = "5" /> < /bean> <!-최대 절전 모드 세션 factory-> <bean id = "sessionFactory"> <!-데이터 소스를 주입하기위한 소스 코드를 참조하십시오-> <속성 이름 = "dataSource"ref = "DataSource"/> <! <props> <prop key = "hibernate.dialect"> $ {hibernate.dialect} </prop> <prop key = "hibernate.show_sql"> $ {hibernate.show_sql} </prop> <prop key = "hibernate.format_sql"> $ {hibernate.format key = "hibernate.hbm2ddl.auto"> $ {hibernate.hbm2ddl.auto} </prop> <!-레벨 2 캐시 ehcache-> <prop key = "hibernate.cache.use_second_level_cache"> $ {hibernate.cache.useSecond_second_second_second_second _second_second_second_second _second_second _second_second _second_second _second_second_second _ key = "hibernate.cache.use_query_cache"> $ {hibernate.cache.use_query_cache} </prop> <prop key = "hibernate.cache.region.factory_class"> $ {hibernate.cache.region.crache_class} </prop> <prop key = "hibernate.cache.provider_configuration_file_resource_path"> $ {hibernate.cache.provider_configuration_file_resource_path} </props> </props> </propert> </propertation> </propertation hibernate selpiguration-> <property name = " value = "org.andy.work.entity" /> < /bean> <!-트랜잭션 관리자 구성-> <bean id = "transactionManager"> <속성 이름 = "sessionFactory"ref = "sessionFactory" /< /bean> <!-트랜잭션 향상 처리 Beans 및 Speciping Transaction Manager-> <TransactionAdmanager ""Transaction-Manager = "transaction-manager" 세부 트랜잭션 처리 시맨틱-> <tx : attributes> <tx> <tx : 메소드 이름 = "삽입*"삽입*"전파 ="필수 " /> <tx : 메소드 이름 ="update*"propagation ="필수 " /> <tx : 메소드 이름 ="delete*"propagation ="required " /> <tx : get*"placagation = "get" "placagation" name = "find*"propagation = "supports"read-donly = "true" /> <tx : method name = "find*"propagation = "suppors"read-doly = "true" /> <!-다른 기본 트랜잭션 메소드를 사용합니다.> <tx : method name = "*" /> " />" /< /tx : <! <!-구성>. pointcut-> <aop : pointcut id = "transactionpointcut"expression = "execution (*org.andy.work.service ..*empr.*(..))") ")") ")") ")") ")") " /> <!-txadvice transact envancement processing을 적용하여 txadvice pointcut-> <aop : advisor pointcut-ref ="transpointcut ""transpointcut ""transpointcut "" </aop : config> </beans> 위는 보조 캐시 및 Ehcache로 구성됩니다. 관련 특정 정보는 이전 기사 Hibernate Secondary Cache 및 Ehcache Construction 구성을 참조하십시오. 다음은 보조 캐시의 구성입니다.
4.1. ehcache.xml 구성
<? xml version = "1.0"alcoding = "utf-8"?> <ehcache xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xsi : nonamespaceschemalocation = "../ config/ehcache.xsd"> <-/ehcache "> DefaultCache 설정. -> <defaultCache maxelementsInMemory = "1000"Eternal = "False"Timetoidleseconds = "120"Timetoliveseconds = "120"maxelementsIsk = "10000000"OverFlowTodisk = "True"MemoryStoreEvictionPolicy = "lru"> </defaultCache> <! -> <캐시 이름 = "org.andy.work.entity.acctuser"maxelementsInmemory = "2"memoryStoreEvictionPolicy = "lru"Eternal = "True"DiskPersistent = "False"OverflowTodisk = "False"MaxelementSondisk = "10000000" /> < /ehcache>
위의 최대 절전 모드 보조 캐시 ehcache는 d :/ehcache입니다
5. 사업체를 생성하십시오
데이터 테이블을 설계 한 후 최대 절전 모드 엔티티에는 도구 최대 절전 모드 도구가 자동으로 생성됩니다. Eclipse에는 최대 절전 모드 도구 플러그인 설치가 필요합니다 (온라인으로 여러 번 설치했지만 성공하지 못합니다. 오프라인을 설치하기 위해 링크를 사용하는 것이 좋습니다. 부록이 소개합니다). 따라서 수동으로 쓸 필요가 없습니다. 다음은 사용자 정보가 포함 된 엔티티입니다. Acctuser.java
Package org.andy.work.entity; // 2015-2-3 10:43:00 Hibernate Tools 4.0.0-Import java.util.date; import java.util.hashset; import java.util.set; import javax.persistence.column; import javax.peristence.entity; import javax.ferestence.feristence.feristence.feristence.feristence.perstence. javax.persistence.id; import javax.persistence.joincolumn; import javax.persistence.jointable; import javax.persistence.manytomany; import javax.persistence.table; import javax.persistence.temporal; import javax.persistence.temporaltionpe; org.hibernate.annotations.cache; import org.hibernate.annotations.cacheconcurrencystrategy; import com.fasterxml.jackson.jsonignoreproperties;/** * acctuser hbm2java */@entity@table (name = "actalog ="work ","ackt_us " cacheconcurrencystrategy.read_write) 공개 클래스 acctuser는 java.io.serializable { / ** * / private static final long serialversionuid = 6980093847795726310L; 개인 문자열 ID; 개인 문자열 별명; 개인 문자열 전화; 개인 날짜 레지스터 타임; 비공개 세트 <cctrole> acctroles = new Hashset <Cactrole> (0); public acctuser () {} public acctuser (문자열 id, 문자열 별명) {this.id = id; this.nickname = 별명; } public acctuser (문자열 ID, 문자열 닉네임, 문자열 전화, 날짜 레지스터 타임, SET <Cactrole> acctroles) {this.id = id; this.nickname = 별명; this.telephone = 전화; this.registertime = 레지스터 타임; this.acctroles = acctroles; } @Id @Column (이름 = "id", 고유 = true, nullable = false, length = 36) public String getId () {return this.id; } public void setId (String id) {this.id = id; } @column (이름 = "nick_name", nullable = false) public String getNickName () {return this.nickName; } public void setNickName (문자열 별명) {this.nickName = 별명; } @Column (이름 = "전화") public String getTelephone () {return this.telephone; } public void settelephone (문자열 전화) {this.telephone = 전화; } @temporal (temporallype.timestamp) @column (name = "register_time", length = 19) 공개 날짜 getRegisterTime () {return this.RegisterTime; } public void setRegisterTime (날짜 레지스터 타임) {this.RegisterTime = 레지스터 타임; } @jsonignoreProperties (value = { "acctusers", "acctusers", "acctautherities"}) @manytomany (fetch = fetch = retch = fetchtype.lazy) @cache (usage = cacheconcurrencystrategy.read_write) @jointable (name = "acct_user_role", joincolumn (jocolumn) " "user_id", nullable = false, updateable = false)}, inversejoincolumns = {@joincolumn (name = "role_id", nullable = false, updatable = false)) public set <cctrole> getAcctroles () {return this.acctroles; } public void setAcctroles (set <cactrole> acctroles) {this.acctroles = acctroles; }} 위에는 몇 가지 사항이 있습니다.
위의 대부분은 최대 절전 모드 도구에 의해 자동으로 생성되지만 수동으로 추가해야 할 몇 가지가 있습니다.
1.이 엔티티가 레벨 2 캐시를 사용하는 경우 @cache 주석을 추가해야합니다.
2. 엔티티에 세트 요소 (세트, 맵, 목록)가 있고 엔티티가 보조 캐시를 사용하려는 경우 @Cache 주석과 함께이 세트 요소를 추가해야합니다.
3. @jsonignoreProperties 주석은 JSON이 돌아올 때 SpringMVC가 루프 출력을 생성하는 것을 방지하는 것입니다. 구성되지 않으면 JSON DEAD 루프가 발생합니다 (및 다수의 일대일 속성).
4. @jsonignore는이 속성을 무시하기 위해 JSON으로 변환하는 반면 @JsonIngoreProperties (value = { "acctusers", "acctautherities"})는 acctusers와 Acctautherities 속성을 무시합니다.
6. DAO 레이어를 만듭니다
6.1DAO 인터페이스
DAO 계층과 서비스 계층에서 얼굴 인터페이스 프로그래밍 아이디어를 채택해야하므로 먼저 일반 DAO 인터페이스 인 GenericDao.java를 정의합니다.
패키지 org.andy.work.dao; import java.io.serializable; import java.util.list;/** * 생성 된 시간 : 2015-2-6 2:26:42 pm * * @author andy * @version 2.2 * * dao 일반 인터페이스 */인터페이스 일반 ingericdao <t, pk extends serializable> {t); t get (pk id); List <T> findAll (); 공극 지속 (t entity); PK 저장 (T Entity); void saveorupdate (t entity); void delete (pk id); void flush ();}특정 userdao.java 인터페이스를 정의하십시오
패키지 org.andy.work.dao; import org.andy.work.entity.entity.acctuser;/** * 생성 시간 : 2015-2-6 2:43:50 pm * * @author Andy * @version 2.2 * * 사용자 dao 인터페이스 */public interface userdao는 일반적인 인터페이스 <acctuser, string> {}6.2. DAO 계층 구현 클래스
DAO 레이어의 구현 클래스를 Bean에 주입해야하므로 @repository 주석을 추가해야합니다. userDaoimpl은 다음과 같습니다.
Package org.andy.work.dao.impl; import java.util.list; import org.andy.work.dao.userdao; import org.andy.enter.entity.acctuser; import org.hibernate.ssession.springfring .Bean org.springframework.stereotype.repository;/** * 생성 시간 : 2015-2-6 2:45:14 PM * * @Author Andy * @version 2.2 */ @repository ( "userDao") 공개 클래스 userDaoimpl은 userdao {@autowive private sessionfactory sessionFactory; 개인 세션 getCurrentSess () {return this.sessionFactory.getCurrentSess (); } @override public acctuser load (string id) {return (acctuser) this.getCurrentSess (). load (acctuser.class, id); } @override public acctuser get (string id) {return (acctuser) this.getCurrentSession (). get (acctuser.class, id); } @SuppressWarnings ( "확인되지 않은") @Override public list <CluctUser> findAll () {list <Cactuser> acctusers = this.getCurrentSession (). createquery ( "Acctuser에서"). setCachable (true) .list (); 반환 acctusers; } @override public void persist (acctuser entity) {this.getCurrentSession (). perist (엔티티); } @override public string save (acctuser entity) {return (string) this.getCurrentSession (). 저장 (엔티티); } @override public void saveorupdate (acctuser entity) {this.getCurrentSession (). saveorupdate (엔티티); } @override public void delete (string id) {acctuser entity = this.load (id); this.getCurrentSess (). 삭제 (엔티티); } @override public void flush () {this.getCurrentSession (). flush (); }}7. 서비스 계층을 만듭니다
7.1. 서비스 계층 인터페이스
패키지 org.andy.work.service; import java.util.list; import org.andy.work.entity.acctuser;/** * 생성 시간 : 2015-2-6 3:18:57 PM * * @Author Andy * @version 2.2 * userservice interface */public interface load {acctuser (string id); acctuser get (string id); List <Acctuser> findAll (); void 지속 (acctuser entity); 문자열 저장 (acctuser entity); void saveorupdate (acctuser entity); void delete (문자열 id); void flush ();}7.2. 서비스 계층 구현 클래스
userviceimpl 위에 정의 된 DAO 레이어 빈을 주입해야합니다.
Package org.andy.work.service.impl; import java.util.list; import org.andy.work.dao.userdao; import org.andy.work.entity.acctuser; import org.andy.work.service.userservice; import org.springframework.bean.bean.antoweated org.springframework.stereotyp.service;/** * 생성 시간 : 2015-2-6 3:24:16 PM * * @Author Andy * @version 2.2 userService 구현 */ @service ( "userService") public userserviceimpl userservice {@autow private userdao userdao; @override public acctuser load (string id) {return userdao.load (id); } @override public acctuser get (string id) {return userdao.get (id); } @override public list <Cactuser> findAll () {return userDao.findall (); } @override public void persist (acctuser entity) {userdao.persist (엔티티); } @override public string save (acctuser entity) {return userdao.save (엔티티); } @override public void saveorupdate (acctuser entity) {userdao.saveorupdate (엔터티); } @override public void delete (string id) {userdao.delete (id); } @override public void flush () {userdao.flush (); }}8. 스프링과 최대 절전 모드의 통합을 테스트하십시오
SRC/Test/Java에서 테스트 클래스를 작성하여 위 구성을 테스트 할 수 있습니다. 테스트가 성공하면 기본적으로 완료됩니다.
패키지 org.andy.work.service; import java.util.date; import java.util.list; import java.util.uuid; import org.andy.entity.acctuser; import org.apache.log4j.logger; import 또는 org.junit.test; org.runner.runner org.springframework.bean.beans.annotation.autowired; import org.springframework.test.context.contextconfiguration; import org.springframework.test.context.junit4.springjunit4classrunner; import com.alibaba.astjson.json; 3:31:07 PM * * @Author Andy * @version 2.2 */ @runwith (springjunit4classrunner.class) @contextConfiguration (위치 = { "classPath : spring.xml", "classpath :"spring-hibernate.xml "}) 공개 클래스 로그기 {private logger {private logger .getLogger (testUserservice.class); @autowired private userervice userservice; @test public void save () {acctuser acctuser = new Acctuser (); acctuser.setid (uuid.randomuuid (). tostring ()); acctuser.setNickName ( "Andy"); acctuser.setRegisterTime (new date ()); acctuser.settelephone ( "13022221111"); 문자열 id = userservice.save (Acctuser); logger.info (json.tojsonstring (id)); }}9. SpringMVC를 소개합니다
spring-mvc.xml 파일을 추가하십시오
<? xml version = "1.0"encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : mvc = "http://www.springframework.org/schema/mvc" xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance"xmlns : p = "http://www.springframework.org/schema/p"xmlns : context = "http://www.spramwramwork.org/schema/scemx. XSI : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/conte http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvvc/sprgent " @Controller 주입 Bean-> <context : component-scan base-package = "org.andy.work.controller" /> <!-다음은 SpringMVC 구성-> <mvc : mvc : mvc : annotation-driven> <!- @response-ded-> <mvc : retain-converters register-defaults = "<bean"> <bean "> name = "supportedMediAtypes"> <str> <value> text/html; charset = utf-8 </value> <value> application/json; charset = utf-8 </value> </list> </property> </bean> </mvc : 메시지-콘버터> </mvc : model voiven wix and and and and and and and and and and sold and and and sold wix. 이름-> <ean> <property name = "viewClass"value = "org.springframework.web.servlet.view.jstlview"/> <property name = "prefix"value = "/web-inf/views"/> <속성 이름 = "접미사"value = ". jsp"/> </beans>
패키지 스캐닝 컨트롤러, [이메일 보호] �� 및 뷰 레이어 구성은 위에서 구성됩니다.
10. Web.xml 컨테이너를 구성하십시오
웹 컨테이너는 웹 프로젝트의 뇌이므로 웹 컨테이너는 먼저 스프링을 도입하고 스프링이 다양한 프레임 워크를 관리하고 콩에 주입해야합니다. 그런 다음 제어 계층의 필터 정보를 구성하십시오. SpringMVC에 의해 가로 채는 URL은 .hmls에서 끝나는 요청으로 구성됩니다.
web.xml 파일은 다음과 같습니다.
<? 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" xmlns : web = "http://java.sun.com/xml/ns/javaee"xmlns : web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi : schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id = "webapp_id"version = "2.5"> <conte-name> <Param-Name> ContextConfigLocation </param-name> <param- value> classpath : spring.xml, classpath : spring-hibernate.xml </param- value> </context-param> <filter-name> encodingfilter </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> incoding </param-name> <param-value> utf-8 </param-value> <init-param> <init-param> force-name </param-name> <Param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> encodingfilter </filter-name> <Url-pattern>/*</url-pattern> </filter-mapping> <!-OpensessionInview 구성은 시야에 대한 세션을 지연시키는 것입니다. <filter-name> OpensessionInViewFilter </filter-name> <filter-class> org.sprameframework.orm.hibernate4.support.opensessionInViewFilter </filter-class> <Init-param> <param-name> singlesess </param-name> <param-value> true </param-value> </init-param> </init-param> </param- value> </param- value> ContextConfigLocation에서 ServletContext 및 시작 스프링 구성 정보-> <layer> <layer-class> org.spramework.web.context.contextloderListener </liaretloaderListener </liareer> <!-Listener> <liseer-class> org.springfrfframeb.context.conxtextenerxtexteerxtenlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlistlist. <!-스프링 메모리 오버 플로우 리스너 방지-> <Leater> <Leater-Class> org.springframework.web.util.introspectorcleanUplistener </Leater-Class> </Lister> <description> Spring MVC Servlet </descript> <servlet-name> REST </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <init-param> <param-name> contextConfigLocation </param-name> <!-여기 SpringMVC 구성 파일-> <param-value> classpath : spring-mvc.xml> </load-on-startup> </load-on-startup> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name> </servlet-name> <Url-pattern>*. htmls </url-pattern> </servlet-mapping> <filter-mapping> <filter-name> opensessionInviewfilter </filter-name> <Url-Pattern>*. HTMLS </url-pattern> </filter-mapping> <!-세션 시간 초과 구성, <세션-코피그> <세션-타임 아웃> 30 </session-config> <나는 환영-파일>/index.jsp </welcome-list> </web-fiple-list>
11. 제어 계층 컨트롤러를 만듭니다
제어 레이어 USERCONTROLLER
Package org.andy.work.controller; import java.util.list; import org.andy.work.entity.acctuser; import org.andy.work.service.userservice; import org.apache.log4j.logger; import org.springframework.beans.annotation.autowireat; org.springframework.stereotyp.controller; import org.springframework.ui.modelmap; import org.sprameframework.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.requestmapping; import; org.springframework.web.bind.annotation.responsebody;/** * 생성 시간 : 2015-2-7 11:49:00 am * @author Andy * @version 2.2 * 설명 : 사용자 컨트롤러 */ @controller @requestmapping ( "/user") 공개 uscontroller (private static final logger {ustatic final logger {ustatic final logger); @autowired private userervice userservice; @RequestMapping("/showInfo/{userId}") public String showUserInfo(ModelMap modelMap, @PathVariable String userId){ LOGGER.info("Query user: " + userId); AcctUser userInfo = userService.load(userId); modelMap.addAttribute("userInfo", userInfo); return "/user/showInfo"; } @RequestMapping("/showInfos") public @ResponseBody List<AcctUser> showUserInfos(){ LOGGER.info("Query all users of the user"); List<AcctUser> userInfos = userService.findAll(); return userInfos; }}12、创建视图层
在src/main/webapp/WEB-INF/views下创建user/showInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href="<%=basePath%>" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" src="js/jquery-1.9.1.min.js"></script><title>userInfo</title></head><body> User information nickname: ${userInfo.nickName} User id: ${userInfo.id} User phone: ${userInfo.telephone } Registration time: <fmt:formatDate value="${userInfo.registerTime }" pattern="yyyy-MM-dd HH:mm:ss" /> Role: [ <c:forEach items="${ userInfo.acctRoles}" var="role"> ${role.name } Permissions[ <c:forEach items="${ role.acctAuthorities}" var="authority"> ${authority.name } </c:forEach> ] </c:forEach> ] <br /> ajax显示全部用户信息: <div id="show_all_user"></div></body><script type="text/javascript"> $.ajax({ type : "get", url : "user/showInfos.htmls", dataType : "json", success : function(data) { $(data).each( function(i, user) { var p = "<p>昵称:" + user.nickName + " 电话:" + user.telephone + " 注册时间:" + user.registerTime + " id:" + user.id + "</p>"; $("#show_all_user").append(p); }); }, async : true });</script></html>13、部署服务器测试
使用Maven打包部署:clean compile package
部署到tomcat,测试主要测试上面的http://localhost:8080/springmvc_hibernate_demo/user/showInfo/6e5afb1d-50e1-45fe-b6fe-b9e399415387.htmls
和http://localhost:8080/springmvc_hibernate_demo/user/showInfos.htmls (json数据返回)
上面视图层就包含了这两条url请求的测试:
ok,到此Spring+SpringMVC+Hibernate搭建完毕。
博客来源:http://blog.csdn.net/fengshizty?viewmode=list
项目源码:http://download.csdn.net/detail/fengshizty/8432647
希望能帮助有需要的朋友,后续继续补充相关资料,谢谢大家对本站的支持!