简述
本次环境使用Maven3在Intelij IDEA上搭建,SpringDataJPA的实现商是Hibernate, 数据库Mysql, 连接池Druid。下面只是提供POM文件和相关配置文件的内容,类似于代码段的风格,并不会对IDEA的相关操作进行讲解。
本例只是搭建最基本的运行条件,如文件上传,视图整合等等其它功能需要另行导包配置。
POM.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 <?xml version="1.0" encoding="UTF-8" ?> <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/xsd/maven-4.0.0.xsd" > <modelVersion > 4.0.0</modelVersion > <groupId > com.tung7.ex</groupId > <artifactId > spring-data-jpa</artifactId > <version > 1.0-SNAPSHOT</version > <packaging > war</packaging > <description > 这应该是springmvc-spring-springdatajpa最简单整合</description > <properties > <spring.version > 4.2.5.RELEASE</spring.version > <hibernate.version > 4.3.5.Final</hibernate.version > <spring-data-jpa.version > 1.7.0.RELEASE</spring-data-jpa.version > <slf4j.version > 1.7.7</slf4j.version > <aspectj.version > 1.8.3</aspectj.version > <jackson.version > 2.4.3</jackson.version > <tiles.version > 3.0.5</tiles.version > </properties > <dependencies > <dependency > <groupId > org.glassfish.web</groupId > <artifactId > javax.servlet.jsp.jstl</artifactId > <version > 1.2.1</version > </dependency > <dependency > <groupId > javax.servlet.jsp.jstl</groupId > <artifactId > javax.servlet.jsp.jstl-api</artifactId > <version > 1.2.1</version > </dependency > <dependency > <groupId > junit</groupId > <artifactId > junit</artifactId > <version > 4.12</version > <scope > test</scope > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-core</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-context</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-jdbc</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-beans</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-web</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-expression</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-orm</artifactId > <version > ${spring.version}</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-webmvc</artifactId > <version > ${spring.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 > <dependency > <groupId > com.alibaba</groupId > <artifactId > druid</artifactId > <version > 1.0.18</version > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 5.1.20</version > </dependency > <dependency > <groupId > org.slf4j</groupId > <artifactId > slf4j-log4j12</artifactId > <version > 1.7.2</version > </dependency > <dependency > <groupId > com.fasterxml.jackson.core</groupId > <artifactId > jackson-databind</artifactId > <version > ${jackson.version}</version > </dependency > </dependencies > <build > <plugins > <plugin > <artifactId > maven-compiler-plugin</artifactId > <version > 2.3.2</version > <configuration > <source > 1.7</source > <target > 1.7</target > </configuration > </plugin > <plugin > <artifactId > maven-war-plugin</artifactId > <version > 2.2</version > <configuration > <failOnMissingWebXml > false</failOnMissingWebXml > </configuration > </plugin > </plugins > <resources > <resource > <directory > src/main/resources</directory > <includes > <include > **/*.xml</include > <include > **/*.properties</include > </includes > </resource > </resources > </build > </project >
WEB.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns ="http://java.sun.com/xml/ns/javaee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version ="3.0" > <display-name > ex_spring_data_jpa</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 > <error-page > <error-code > 404</error-code > <location > /WEB-INF/404.html</location > </error-page > <listener > <listener-class > org.springframework.web.context.ContextLoaderListener</listener-class > </listener > <context-param > <param-name > contextConfigLocation</param-name > <param-value > classpath:applicationContext.xml</param-value > </context-param > <listener > <listener-class > org.springframework.web.util.Log4jConfigListener</listener-class > </listener > <context-param > <param-name > log4jConfigLocation</param-name > <param-value > classpath:log4j.properties</param-value > </context-param > <servlet > <servlet-name > springServlet</servlet-name > <servlet-class > org.springframework.web.servlet.DispatcherServlet</servlet-class > <init-param > <param-name > contextConfigLocation</param-name > <param-value > classpath:spring-mvc.xml</param-value > </init-param > <load-on-startup > 1</load-on-startup > </servlet > <servlet-mapping > <servlet-name > springServlet</servlet-name > <url-pattern > /</url-pattern > </servlet-mapping > </web-app >
SpringMVC的配置文件spring-mvc.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <?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:mvc ="http://www.springframework.org/schema/mvc" xsi:schemaLocation ="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd" > <context:component-scan base-package ="com.tung7" use-default-filters ="false" > <context:include-filter type ="annotation" expression ="org.springframework.stereotype.Controller" /> <context:include-filter type ="annotation" expression ="org.springframework.web.bind.annotation.ControllerAdvice" /> </context:component-scan > <mvc:annotation-driven /> <bean class ="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name ="prefix" value ="/WEB-INF/views/" /> <property name ="contentType" value ="text/html; charset=utf-8" /> <property name ="suffix" value =".jsp" /> <property name ="viewClass" value ="org.springframework.web.servlet.view.InternalResourceView" /> <property name ="order" value ="10" /> </bean > <mvc:resources mapping ="/content/**" location ="/content/" /> <mvc:resources mapping ="/include/**" location ="/include/" /> <mvc:resources mapping ="/WEB-INF/*.html" location ="/WEB-INF/" /> </beans >
Spring公共配置applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 <?xml version="1.0" encoding="UTF-8" ?> <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" xmlns:jpa ="http://www.springframework.org/schema/data/jpa" xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:task ="http://www.springframework.org/schema/task" xmlns:cache ="http://www.springframework.org/schema/cache" xmlns:util ="http://www.springframework.org/schema/util" xmlns:jdbc ="http://www.springframework.org/schema/jdbc" xmlns ="http://www.springframework.org/schema/beans" xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd" default-lazy-init ="true" > <description > Spring公共配置</description > <context:component-scan base-package ="com.tung7" > <context:exclude-filter type ="annotation" expression ="org.springframework.stereotype.Controller" /> <context:exclude-filter type ="annotation" expression ="org.springframework.web.bind.annotation.ControllerAdvice" /> </context:component-scan > <bean id ="entityManagerFactory" class ="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" > <property name ="dataSource" ref ="dataSource" /> <property name ="jpaVendorAdapter" ref ="hibernateJpaVendorAdapter" /> <property name ="packagesToScan" value ="com.tung7.*.entity" /> <property name ="persistenceProviderClass" value ="org.hibernate.jpa.HibernatePersistenceProvider" /> <property name ="jpaProperties" > <props > <prop key ="hibernate.format_sql" > false</prop > </props > </property > </bean > <bean id ="hibernateJpaVendorAdapter" class ="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" > <property name ="showSql" value ="true" /> <property name ="generateDdl" value ="false" /> </bean > <bean id ="transactionManager" class ="org.springframework.orm.jpa.JpaTransactionManager" > <property name ="entityManagerFactory" ref ="entityManagerFactory" /> </bean > <jpa:repositories base-package ="com.tung7.*.dao" transaction-manager-ref ="transactionManager" entity-manager-factory-ref ="entityManagerFactory" /> <tx:annotation-driven transaction-manager ="transactionManager" proxy-target-class ="true" /> <context:property-placeholder ignore-resource-not-found ="true" location ="classpath:application.properties" /> <bean id ="dataSource" class ="com.alibaba.druid.pool.DruidDataSource" init-method ="init" destroy-method ="close" > <property name ="url" value ="${jdbc.url}" /> <property name ="username" value ="${jdbc.username}" /> <property name ="password" value ="${jdbc.password}" /> <property name ="driverClassName" value ="${jdbc.driver}" /> <property name ="initialSize" value ="1" /> <property name ="minIdle" value ="1" /> <property name ="maxActive" value ="20" /> <property name ="maxWait" value ="60000" /> <property name ="timeBetweenEvictionRunsMillis" value ="60000" /> <property name ="minEvictableIdleTimeMillis" value ="300000" /> <property name ="validationQuery" value ="SELECT 'x'" /> <property name ="testWhileIdle" value ="true" /> <property name ="testOnBorrow" value ="false" /> <property name ="testOnReturn" value ="false" /> <property name ="poolPreparedStatements" value ="true" /> <property name ="maxPoolPreparedStatementPerConnectionSize" value ="20" /> <property name ="filters" value ="stat" /> </bean > </beans >
log4j.properties
1 2 3 4 5 6 7 8 9 log4j.rootLogger=error,appender1 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
实例
Entity
两个实体一个是Article, 一个是Sort。Article对Sort是多对一的关系。
Article实体类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 @Entity @Table(name = "tung7_article") public class Article { private Integer gid; private String title; private Date date; private String content; private String excerpt; private String alias; private Sort sort; private Integer views; private Integer comnum; private Boolean istop; private Boolean sorttop; private Boolean ispost; private Boolean allowremark; private Boolean ispage; private String template; public Integer getGid () { return gid; } @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") public Date getDate () { return date; } @ManyToOne @JoinColumn(name = "sortid", nullable = true) public Sort getSort () { return sort; } }
Sort实体类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Entity @Table(name = "tung7_sort") public class Sort { private Integer sid; private String sortname; private String alias; private String description; private String template; private Set<Article> articles; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "sortid") public Set<Article> getArticles () { return articles; } @Id public Integer getSid () { return sid; } }
DAO
1 2 3 public interface ArticleDao extends PagingAndSortingRepository <Article, Integer> { }
Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @Service @Transactional public class ArticleService { @Autowired private ArticleDao articleDao; public PageBean<Article> list (PageBean<Article> pageBean) { int curPage = pageBean.getCurPage(); int linesize = pageBean.getLineSize(); Page<Article> page = articleDao.findAll(new PageRequest (curPage - 1 , linesize)); pageBean.setItemSum(new Long (page.getTotalElements()).intValue()); pageBean.setList(page.getContent()); return pageBean; } }
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 @Controller @RequestMapping("/article") public class ArticleController { @Autowired private ArticleService articleService; @RequestMapping(method = RequestMethod.GET) public String list (ModelMap mv, @RequestParam(defaultValue = "1") int page) { PageBean<Article> pageBean = articleService.list(new PageBean <Article>(page, 5 )); mv.addAttribute("pageBean" , pageBean); return "article" ; } }
JSP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 article list pageBean:<br > pageBean.curPage: ${pageBean.curPage} <br > pageBean.itemSum: ${pageBean.itemSum} <br > pageBean.pageSum: ${pageBean.pageSum} <br > pageBean.lineSize: ${pageBean.lineSize} <br > <c:forEach items ="${pageBean.list}" var ="item" > ==================================<br > ${item.gid} : <br > ---------------------------------------<br > ${item.sort.sortname} : ${item.title} <br > ---------------------------------------<br > ${item.date}<br > ==================================<br > </c:forEach >