深入学习spring-boot系列(二)--使用spring-data-jpa

本文使用我之前的博文项目作为原型,改成spring-boot项目,并使用spring-data-jpa替代mybatis作为dao实现。 
原项目参考,Spring+SpringMVC+MyBatis+Maven框架整合: http://jisonami.iteye.com/blog/2295345 
由于spring-boot的jar项目暂时不支持jsp,因此本项目依旧是一个war项目,下一篇文章会介绍使用thymeleaf模板替换jsp页面后的jar项目。 

本文主要记录以下几点: 
一、spring-boot约定的目录结构 
二、Maven需要引入的jar 
三、application.properties的相关配置 
四、spring-data-jpa的简单使用 

一、spring-boot约定的目录结构 

 

对于这个目录结构而言,Application.java是spring的Java配置类,里面包含spring-boot应用的main()方法,在spring-boot的jar项目中会执行该方法 
spring目前支持三种元数据的配置,即xml、Java注解、Java配置类,而spring-boot推荐使用Java配置类来完成元数据的配置。 
Jisonami2目前的目录结构是这样的: 

 

Jisonami2Application.java是spring-boot的入口类,包含配置信息和main()方法 
Java代码   收藏代码
  1. @SpringBootApplication  
  2. @Controller  
  3. public class Jisonami2Application {  
  4.       
  5.     @RequestMapping("/")  
  6.     public String index(){  
  7.         return "../../index";  
  8.     }  
  9.       
  10.     public static void main(String[] args) {  
  11.         SpringApplication.run(Jisonami2Application.class, args);  
  12.     }  
  13. }  


@SpringBootApplication其实是以下三个注解的合并,取其默认值时直接使用@SpringBootApplication 
Java代码   收藏代码
  1. @Configuration  
  2. @EnableAutoConfiguration  
  3. @ComponentScan  


目前本项目是war项目,所以Jisonami2Application需要继承SpringBootServletInitializer类,并实现如下方法 
Java代码   收藏代码
  1. @Override  
  2. protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
  3.     return builder.sources(Jisonami2Application.class);  
  4. }  


二、Maven需要引入的jar 
在maven中有两种方式可以配置成spring-boot项目,本文使用最简单的直接继承spring-boot-starter-parent成为spring-boot项目。 
通过在spring-boot项目的pom.xml中引入一些spring-boot-starter的依赖,可以简化项目的配置。 
maven的pom.xml如下: 
Xml代码   收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>org.jisonami</groupId>  
  5.     <artifactId>Jisonami2</artifactId>  
  6.     <packaging>war</packaging>  
  7.     <version>0.1.1</version>  
  8.     <name>Jisonami Maven Webapp</name>  
  9.     <url>http://maven.apache.org</url>  
  10.   
  11.     <!-- 直接继承spring-boot-starter-parent成为spring-boot项目 -->  
  12.     <parent>  
  13.         <groupId>org.springframework.boot</groupId>  
  14.         <artifactId>spring-boot-starter-parent</artifactId>  
  15.         <version>1.3.3.RELEASE</version>  
  16.     </parent>  
  17.   
  18.     <properties>  
  19.         <!-- 使用了lambda表达式,覆盖默认的java版本,默认为1.6 -->  
  20.         <java.version>1.8</java.version>  
  21.         <!-- 之前用hibernate5.1.0.Final生成的表,使用spring-boot-starter-data-jpa默认引入的hibernate4.3.11会报sql错 -->  
  22.         <hibernate.version>5.1.0.Final</hibernate.version>  
  23.         <oracle14.version>10.2.0.4.0</oracle14.version>  
  24.         <taglibs.standard.version>1.1.2</taglibs.standard.version>  
  25.     </properties>  
  26.   
  27.     <dependencies>  
  28.         <dependency>  
  29.             <groupId>junit</groupId>  
  30.             <artifactId>junit</artifactId>  
  31.             <scope>test</scope>  
  32.         </dependency>  
  33.         <dependency>  
  34.             <groupId>org.springframework.boot</groupId>  
  35.             <artifactId>spring-boot-starter-web</artifactId>  
  36.         </dependency>  
  37.         <dependency>  
  38.             <groupId>org.springframework.boot</groupId>  
  39.             <artifactId>spring-boot-starter-data-jpa</artifactId>  
  40.         </dependency>  
  41.         <!-- maven打war包需要,spring boot的jsp项目必须是war项目,jar项目不支持jsp -->  
  42.         <dependency>  
  43.             <groupId>org.springframework.boot</groupId>  
  44.             <artifactId>spring-boot-starter-tomcat</artifactId>  
  45.             <scope>provided</scope>  
  46.         </dependency>  
  47.         <dependency>  
  48.             <groupId>org.apache.tomcat.embed</groupId>  
  49.             <artifactId>tomcat-embed-jasper</artifactId>  
  50.             <scope>provided</scope>  
  51.         </dependency>  
  52.   
  53.         <!-- 引入oracle数据库jdbc驱动包 -->  
  54.         <dependency>  
  55.             <groupId>com.oracle</groupId>  
  56.             <artifactId>ojdbc14</artifactId>  
  57.             <version>${oracle14.version}</version>  
  58.         </dependency>  
  59.         <dependency>  
  60.             <groupId>mysql</groupId>  
  61.             <artifactId>mysql-connector-java</artifactId>  
  62.         </dependency>  
  63.   
  64.         <!-- jstl依赖包 -->  
  65.         <dependency>  
  66.             <groupId>javax.servlet</groupId>  
  67.             <artifactId>jstl</artifactId>  
  68.         </dependency>  
  69.         <dependency>  
  70.             <groupId>taglibs</groupId>  
  71.             <artifactId>standard</artifactId>  
  72.             <version>${taglibs.standard.version}</version>  
  73.         </dependency>  
  74.   
  75.     </dependencies>  
  76.   
  77.     <build>  
  78.         <plugins>  
  79.             <!-- spring boot项目编译插件 -->  
  80.             <plugin>  
  81.                 <groupId>org.springframework.boot</groupId>  
  82.                 <artifactId>spring-boot-maven-plugin</artifactId>  
  83.             </plugin>  
  84.         </plugins>  
  85.     </build>  
  86.   
  87. </project>  


三、application.properties的相关配置 
application.properties是spring-boot项目的配置文件,spring-boot内置了很多默认配置信息,在application.properties文件中我们可以覆盖spring-boot的默认配置信息 
目前本项目只需要配置spring-mvc的jsp跳转的前缀和后缀 
Java代码   收藏代码
  1. #指定项目上下文路径  
  2. #server.context-path=/Jisonami2  
  3. #配置jsp视图的前缀和后缀  
  4. spring.mvc.view.prefix=/WEB-INF/content/  
  5. spring.mvc.view.suffix=.jsp  


四、spring-data-jpa的简单使用 

1、首先需要配置数据源 
在Jisonami2Application.java中加入如下方法,配置数据源 
Java代码   收藏代码
  1. @Bean  
  2. @ConfigurationProperties(locations="classpath:DBConfig.properties", prefix="datasource")  
  3. public DataSource dataSource(){  
  4.     return DataSourceBuilder.create().build();  
  5. }  

DataSourceBuilder源码里面默认配置如下,即有4种默认数据源可用:(上面在DBConfig.properties配置的是dbcp的数据源) 
Java代码   收藏代码
  1. private static final String[] DATA_SOURCE_TYPE_NAMES = { "org.apache.tomcat.jdbc.pool.DataSource""com.zaxxer.hikari.HikariDataSource""org.apache.commons.dbcp.BasicDataSource""org.apache.commons.dbcp2.BasicDataSource" };  


DBConfig.properties的配置: 
Java代码   收藏代码
  1. datasource.driverClassName=oracle.jdbc.driver.OracleDriver  
  2. datasource.url=jdbc:oracle:thin:@192.168.75.130:1521:orcl  
  3. datasource.username=jison  
  4. datasource.password=jison  

2、以UserRepository为例,简单介绍spring-data-jpa的使用 
UserRepository的代码如下: 
Java代码   收藏代码
  1. public interface UserRepository extends CrudRepository<User, String>{  
  2.       
  3.     public User findByName(String name);  
  4.       
  5.     public User findByNameAndPassword(String name, String password);  
  6.       
  7. }  

UserRepository继承了CrudRepository接口与,CrudRepository接口里面定义了一些常用的方法,去掉注释,看其源码定义了如下方法: 
Java代码   收藏代码
  1. <S extends T> S save(S entity);  
  2.   
  3.     <S extends T> Iterable<S> save(Iterable<S> entities);  
  4.   
  5.     T findOne(ID id);  
  6.   
  7.     boolean exists(ID id);  
  8.   
  9.     Iterable<T> findAll();  
  10.   
  11.     Iterable<T> findAll(Iterable<ID> ids);  
  12.   
  13.     long count();  
  14.   
  15.     void delete(ID id);  
  16.   
  17.     void delete(T entity);  
  18.   
  19.     void delete(Iterable<? extends T> entities);  
  20.   
  21.     void deleteAll();  


好了,spring-data-jpa自动帮我们生成这些方法的实现的,我们只需要在service里调用对应方法实现对应的逻辑就行了。 

spring-data-jpa具体用法自行google 

spring-data-jpa官方sample工程: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-jpa 

至此,本项目就搭建完成了,更详细的代码参考我的github项目Jisonami的0.1.1版本: 
https://github.com/jisonami/Jisonami2/tree/0.1.1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值