這篇文章主要介紹如何整合Spring+SpringMvc+Spring Data Jpa框架,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
細(xì)河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
我們來(lái)說(shuō)下spring 整合 spring mvc 和 spring data jpa的整個(gè)過(guò)程 先來(lái)看下項(xiàng)目結(jié)構(gòu) 我把配置文件拆分為spring-mvc.xml 和spring-jpa.xml兩個(gè)文件,使用 jdbc.properties來(lái)配置數(shù)據(jù)源
CREATE TABLE `tb_resume` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `phone` varchar(255) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_resume -- ---------------------------- BEGIN; INSERT INTO `tb_resume` VALUES (1, '成龍', '北京朝陽(yáng)', '17611222456'); INSERT INTO `tb_resume` VALUES (2, '甄子丹', '北京海淀', '10086'); INSERT INTO `tb_resume` VALUES (3, '謝霆鋒', '河南鄭州', '10086'); COMMIT;
<?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>org.example</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>spring-data-jpa Maven Webapp</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.2.8.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.3.4.RELEASE</version> </dependency> <!--hibernate對(duì)jpa的實(shí)現(xiàn)jar--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.4.21.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.6.Final</version> </dependency> <!--hibernate相關(guān)jar包,end--> <!--spring相關(guān)--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</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-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</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-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> <!--數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar--> <dependency> <groupId>MySQL</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!--druid連接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> <!--集成spring mvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.1</version> </dependency> <!--jsp-api&servlet-api--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>ssm</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <target>8</target> <source>8</source> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
接下來(lái)我來(lái)說(shuō)下如何進(jìn)行集成
jdbc.properties
這里我們使用的數(shù)據(jù)庫(kù)是MySQL
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8 jdbc.username=root jdbc.password=root
spring-jpa.xml
我們先來(lái)配置一下數(shù)據(jù)源,因?yàn)槲覀冇胮roperties文件來(lái)進(jìn)行配置的,所以我們需要引入下配置文件,然后引入數(shù)據(jù)源,這里數(shù)據(jù)源我們使用的是阿里的Druid
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd "> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>
接下來(lái)配置spring 的包掃描
<context:component-scan base-package="com.lagou"/>
接下來(lái)就配置jpa的EntityManagerFactory以及jpa的事務(wù)管理器還有jpa dao層的一些細(xì)節(jié),比如配置dao層所在的包,指定EntityManagerFactory以及事務(wù)管理器
<!--配置EntityManagerFactory--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <!--數(shù)據(jù)源--> <property name="dataSource" ref="dataSource"/> <!--配置包掃描(實(shí)體所在包)--> <property name="packagesToScan" value="com.lagou.pojo"/> <!--指定jpa的具體實(shí)現(xiàn),這里用的hibernate--> <property name="persistenceProvider"> <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/> </property> <!--指定方言--> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> </property> <!--配置具體的provider hibernate框架執(zhí)行細(xì)節(jié)--> <property name="jpaVendorAdapter" > <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <!--指定數(shù)據(jù)庫(kù)類型--> <property name="database" value="MYSQL"/> <!--程序啟動(dòng)之后是否需要給數(shù)據(jù)庫(kù)創(chuàng)建映射表--> <property name="generateDdl" value="false"/> <!--是否打印sql--> <property name="showSql" value="true"/> <!--配置數(shù)據(jù)庫(kù)方言,根據(jù)不同數(shù)據(jù)庫(kù)執(zhí)行各自的語(yǔ)法--> <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/> </bean> </property> </bean> <!--配置jpa事務(wù)管理器--> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!--配置jpa dao層細(xì)節(jié)--> <jpa:repositories base-package="com.lagou.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"/>
到這里,我們關(guān)于jpa的配置以及完全結(jié)束。
Resume.java
配置一個(gè)Jpa對(duì)象需要使用到一下注解
@Entity告訴Jpa,這是我們配置的一個(gè)實(shí)體類
@Table指定類和數(shù)據(jù)庫(kù)表映射關(guān)系
@Id標(biāo)記主鍵ID
@GeneratedValue主鍵生成策略,根據(jù)不同的數(shù)據(jù)庫(kù)可以配置不同的策略
@Column指定實(shí)體屬性和數(shù)據(jù)庫(kù)表中屬性的對(duì)應(yīng)關(guān)系
@Entity @Table(name = "tb_resume") @Data @ToString public class Resume { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "name") private String name; @Column(name = "address") private String address; @Column(name = "phone") private String phone; }
ResumeDao.java
想要使用jpa提供的數(shù)據(jù)庫(kù)操作方法,我們需要繼承JpaRepository
和JpaSpecificationExecutor
兩個(gè)接口,這里可能有同學(xué)會(huì)問(wèn)了,java不是單繼承嗎? 注意,這里的ResumeDao
是接口,接口是可以多繼承的。 JpaRepository
和JpaSpecificationExecutor
這兩個(gè)接口提供了我們常用的一些增刪改查操作,繼承之后就不需要我們自己寫這些SQL操作了。
public interface ResumeDao extends JpaRepository<Resume, Integer>, JpaSpecificationExecutor<Resume> { }
以上我們所有jpa相關(guān)的配置都以及完成了,接下來(lái)我們來(lái)測(cè)試下,我們的配置有沒(méi)有問(wèn)題 測(cè)試類ResumeDaoTest.java
這里我們使用junit4來(lái)進(jìn)行測(cè)試,里面有兩個(gè)測(cè)試用例,查詢所有和添加,我們分別來(lái)測(cè)試下
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:spring-*.xml"}) public class ResumeDaoTest { @Autowired private ResumeDao resumeDao; @Test public void findAll() { List<Resume> all = resumeDao.findAll(); System.out.println(all); } @Test public void add() { Resume resume = new Resume(); resume.setName("王五"); resume.setAddress("Henan"); resume.setPhone("17611222722"); System.out.println(resumeDao.save(resume)); } }
findAll()
add() 可以看到,查詢和添加都正常,接下來(lái)我們看下和springmvc的集成
spring-mvc.xml
相較于jpa的整合,spring mvc的整合就簡(jiǎn)單了一點(diǎn),都比較簡(jiǎn)單,我們就不解釋了
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <context:component-scan base-package="com.lagou.controller"/> <mvc:annotation-driven/> <!--配置spring mvc的視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> <mvc:resources location="/layer/" mapping="/layer/**"/> </beans>
web.xml
主要是配置spring mvc的監(jiān)聽類DispatcherServlet
,配置一下攔截路徑,這里我們直接攔截出了jsp之外的所有文件。另外為了防止字符亂碼,這里我們配置了字符過(guò)濾器
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <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" id="WebApp_ID" version="2.5"> <display-name>Archetype Created Web Application</display-name> <welcome-file-list> <welcome-file>/jsp/login.jsp</welcome-file> </welcome-file-list> <!--配置編碼過(guò)濾器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-*.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
ResumeController.java
這里我們配置了針對(duì)resume的基本增刪改查操作,以及一些跳轉(zhuǎn)操作
@Controller @RequestMapping("/resume") public class ResumeController { @Resource private ResumeService resumeService; @RequestMapping(value = "/getAll", method = RequestMethod.GET) @ResponseBody public Result getAll() { return resumeService.getResumeList(); } @RequestMapping(value = "/toAdd") public String addResume() { return "addResume"; } @RequestMapping(value = "/add", method = RequestMethod.POST) @ResponseBody public Result addResume(@RequestBody Resume resume) { return resumeService.addResume(resume); } @RequestMapping("/update") @ResponseBody public Result toUpdate(@RequestBody Resume resume) { return resumeService.updateResume(resume); } @RequestMapping("/toUpdate/{id}") public String toUpdateResume(@PathVariable("id") Integer id, ModelMap modelMap) { Result resume = resumeService.getResumeById(id); modelMap.addAttribute("resume", resume.getResult()); return "editResume"; } @RequestMapping("/delete/{id}") @ResponseBody public Result deleteResume(@PathVariable("id") Integer id) { return resumeService.deleteResume(id); } }
ResumeService
public interface ResumeService { Result getResumeList(); Result getResumeById(Integer id); Result addResume(Resume resume); Result updateResume(Resume resume); Result deleteResume(Integer id); }
ResumeServiceImpl.java
@Service public class ResumeServiceImpl implements ResumeService { @Resource private ResumeDao resumeDao; @Override public Result getResumeList() { return ResultUtils.success(resumeDao.findAll()); } @Override public Result getResumeById(Integer id) { Optional<Resume> resume = resumeDao.findById(id); return ResultUtils.success(resume.orElse(null)); } @Override public Result addResume(Resume resume) { return ResultUtils.success(resumeDao.save(resume)); } @Override public Result updateResume(Resume resume) { return ResultUtils.success(resumeDao.save(resume)); } @Override public Result deleteResume(Integer id) { Optional<Resume> resume = resumeDao.findById(id); if (!resume.isPresent()) { return ResultUtils.error(500, "請(qǐng)求刪除對(duì)象未找到"); } resumeDao.delete(resume.get()); return ResultUtils.success(); } }
其實(shí)項(xiàng)目中我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的登錄,以及針對(duì)resume的增刪改查操作,因?yàn)檫@不是我們關(guān)注的重點(diǎn),所以我就不貼代碼了,想要完整項(xiàng)目的可以去我的碼云上面下載完整代碼 我們直接看測(cè)試情況
以上是“如何整合Spring+SpringMvc+Spring Data Jpa框架”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前名稱:如何整合Spring+SpringMvc+SpringDataJpa框架
網(wǎng)頁(yè)URL:http://muchs.cn/article44/piedhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、用戶體驗(yàn)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)