一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

服務(wù)器之家 - 編程語言 - JAVA教程 - Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解

Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解

2020-10-07 22:54Hgihness JAVA教程

本篇文章主要介紹了Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1、基于springboot-1.4.0.RELEASE版本測試

2、springBoot + hibernate + Druid + MySQL + servlet(jsp)

不廢話,直接上代碼

一、maven的pom文件

?
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
<?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.zsx</groupId>
    <artifactId>demo</artifactId>
    <packaging>war</packaging>
    <version>0.0.1</version>
    <name>zsx Maven Webapp</name>
    <url>http://maven.apache.org</url>
 
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <jdk.version>1.7</jdk.version>
      <tomcat.version>7.0.69</tomcat.version>
    </properties>
 
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.4.0.RELEASE</version>
    </parent>
 
    <dependencies>
 
      <!-- 添加對jsp視圖解析的支持 -->
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
      </dependency>
 
 
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
 
 
      <!-- 下面兩個引入為了操作數(shù)據(jù)庫 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
      </dependency>
 
 
 
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
      </dependency>
 
      <!-- 只需引入spring-boot-devtools 即可實現(xiàn)熱部署 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
      </dependency>
 
      <!-- Json包 -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.16</version>
      </dependency>
 
      <!-- 為了監(jiān)控數(shù)據(jù)庫 -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.25</version>
      </dependency>
 
 
      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.14</version>
      </dependency>
 
      <!-- Junit 單元測試 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
      </dependency>
 
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.0</version>
      </dependency>
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.0</version>
      </dependency>
 
    </dependencies>
    <build>
      <finalName>/</finalName>
 
      <plugins>
 
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <dependencies>
            <!-- 熱部署 -->
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>springloaded</artifactId>
              <version>1.2.6.RELEASE</version>
            </dependency>
          </dependencies>
        </plugin>
 
      </plugins>
 
    </build>
 
    <repositories>
      <repository>
        <id>ali</id>
        <name>ali Repository</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
          <enabled>false</enabled>
        </snapshots>
      </repository>
    </repositories>
  </project>

二、項目架構(gòu)

想想還是介紹一下項目的目錄結(jié)構(gòu),這樣方便梳理整體的架構(gòu)配置

?
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
src
├─main
  │ ├─java
  │ │ └─com
  │ │   └─zsx
  │ │     │ Application.java
  │ │     │ SpringBootStartApplication.java
  │ │     │
  │ │     ├─common
  │ │     │ ├─config
  │ │     │ │   DruidDBConfig.java
  │ │     │ │   MultipartConfig.java
  │ │     │ │  
  │ │     │ ├─filter
  │ │     │ │   DruidStatFilter.java
  │ │     │ │  
  │ │     │ ├─interceptors
  │ │     │ │   AuthInterceptor.java
  │ │     │ │   WebAppConfigurer.java
  │ │     │ │  
  │ │     │ ├─servlet
  │ │     │ │   DruidStatViewServlet.java
  │ │     │ │  
  │ │     │ └─swagger
  │ │     │     Swagger2.java
  │ │     │    
  │ │     ├─controller
  │ │     │ │ LoginController.java
  │ │     │ │ TestController.java
  │ │     │ │ UserController.java
  │ │     │    
  │ │     ├─dao
  │ │     │ │ TUserDao.java
  │ │     │ │
  │ │     │ └─impl
  │ │     ├─entity
  │ │     │ │ BaseEntity.java
  │ │     │    
  │ │     ├─model
  │ │     │ │ Tree.java
  │ │     │    
  │ │     ├─service
  │ │     │ │ UserService.java
  │ │     │ │
  │ │     │ └─impl
  │ │     │     UserServiceImpl.java
  │ │     │    
  │ │     └─util
  │ │         GeneratePageable.java
  │ │        
  │ ├─resources
  │ │ │ application.properties
  │ │ │ logback-test.xml
  │ │ │
  │ │ └─static
  │ │   ├─css
  │ │   ├─img
  │ │   └─js
  │ │        
  │ └─webapp
  │   │ index.jsp
  │   │
  │   └─WEB-INF
  │     │ web.xml
  │     │
  │     └─view
  │       │ login.jsp
  │       │  
  │       ├─error
  │       │   500.jsp 
  │       ├─jsp
  │           main.jsp
  │          
  └─test
    └─java
        UtilTest.java

標(biāo)準(zhǔn)的maven項目結(jié)構(gòu),其中Java下是dao、service、controller ,還有實體類映射entity,其他配置config

三、resources下的應(yīng)用配置文件application.properties

?
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
#server.port=9090
 
 
# 數(shù)據(jù)庫訪問配置
# 主數(shù)據(jù)源,默認(rèn)的
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username= root
spring.datasource.password= root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
 
 
# 下面為連接池的補(bǔ)充設(shè)置,應(yīng)用到上面所有數(shù)據(jù)源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置獲取連接等待超時的時間
spring.datasource.maxWait=60000
# 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打開PSCache,并且指定每個連接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
spring.datasource.filters=stat,wall,log4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
spring.datasource.useGlobalDataSourceStat=true
 
 
#JPA Configuration:
spring.jpa.database=MYSQL
# Show or not log for each sql query
spring.jpa.show-sql=false
spring.jpa.generate-ddl=true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto=create
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
#spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
 
 
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
#spring.resources.static-locations=classpath:/resources/,classpath:/static/

四、啟動應(yīng)用主類文件 Application.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.zsx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
 
@SpringBootApplication
@ServletComponentScan // 掃描使用注解方式的servlet
public class Application {
 
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

若需要部署到外部的tomcat容器中,則添加下面類即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.zsx;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
/**
 * 修改啟動類,繼承 SpringBootServletInitializer 并重寫 configure 方法
 * @author ZSX
 *
 */
public class SpringBootStartApplication extends SpringBootServletInitializer {
 
  private static final Logger logger = LoggerFactory.getLogger(SpringBootStartApplication.class);
 
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(Application.class);
  }
 
}

五、數(shù)據(jù)庫連接池Druid的配置

?
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
package com.zsx.common.config;
 
import java.sql.SQLException;
 
import javax.sql.DataSource;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
 
import com.alibaba.druid.pool.DruidDataSource;
 
/**
 * DruidDBConfig類被@Configuration標(biāo)注,用作配置信息;
 * DataSource對象被@Bean聲明,為Spring容器所管理,
 * @Primary表示這里定義的DataSource將覆蓋其他來源的DataSource。
 * @author ZSX
 *jdbc.url=${jdbc.url}
 *最新的支持方式如下:
 */
@Configuration
public class DruidDBConfig {
// private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
 
  @Value("${spring.datasource.url}")
  private String dbUrl;
 
  @Value("${spring.datasource.username}")
  private String username;
 
  @Value("${spring.datasource.password}")
  private String password;
 
  @Value("${spring.datasource.driverClassName}")
  private String driverClassName;
 
  @Value("${spring.datasource.initialSize}")
  private int initialSize;
 
  @Value("${spring.datasource.minIdle}")
  private int minIdle;
 
  @Value("${spring.datasource.maxActive}")
  private int maxActive;
 
  @Value("${spring.datasource.maxWait}")
  private int maxWait;
 
  @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
  private int timeBetweenEvictionRunsMillis;
 
  @Value("${spring.datasource.minEvictableIdleTimeMillis}")
  private int minEvictableIdleTimeMillis;
 
  @Value("${spring.datasource.validationQuery}")
  private String validationQuery;
 
  @Value("${spring.datasource.testWhileIdle}")
  private boolean testWhileIdle;
 
  @Value("${spring.datasource.testOnBorrow}")
  private boolean testOnBorrow;
 
  @Value("${spring.datasource.testOnReturn}")
  private boolean testOnReturn;
 
  @Value("${spring.datasource.poolPreparedStatements}")
  private boolean poolPreparedStatements;
 
  @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
  private int maxPoolPreparedStatementPerConnectionSize;
 
  @Value("${spring.datasource.filters}")
  private String filters;
 
  @Value("{spring.datasource.connectionProperties}")
  private String connectionProperties;
 
  @Bean // 聲明其為Bean實例
  @Primary // 在同樣的DataSource中,首先使用被標(biāo)注的DataSource
  public DataSource dataSource() {
    DruidDataSource datasource = new DruidDataSource();
 
    datasource.setUrl(this.dbUrl);
    datasource.setUsername(username);
    datasource.setPassword(password);
    datasource.setDriverClassName(driverClassName);
 
    // configuration
    datasource.setInitialSize(initialSize);
    datasource.setMinIdle(minIdle);
    datasource.setMaxActive(maxActive);
    datasource.setMaxWait(maxWait);
    datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    datasource.setValidationQuery(validationQuery);
    datasource.setTestWhileIdle(testWhileIdle);
    datasource.setTestOnBorrow(testOnBorrow);
    datasource.setTestOnReturn(testOnReturn);
    datasource.setPoolPreparedStatements(poolPreparedStatements);
    datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    try {
      datasource.setFilters(filters);
    } catch (SQLException e) {
 
    }
    datasource.setConnectionProperties(connectionProperties);
 
    return datasource;
  }
}

springboot里默認(rèn)使用tomcat的上傳文件大小限制,即1MB, 修改用下面的配置類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import javax.servlet.MultipartConfigElement;
 
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class MultipartConfig {
 
  @Bean
  public MultipartConfigElement multipartConfigElement(){
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setMaxFileSize("10MB");
    factory.setMaxRequestSize("10MB");
    return factory.createMultipartConfig();
  }
 
}

六、開啟Druid的數(shù)據(jù)庫監(jiān)控配置

1、配置Filter

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
 
import com.alibaba.druid.support.http.WebStatFilter;
 
/**
 * 配置druid監(jiān)控統(tǒng)計功能
 * 配置Filter
 * @author ZSX
 *
 */
 
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",
  initParams = {
      @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略資源
  }
)
 
public class DruidStatFilter extends WebStatFilter {
 
}

2、 配置web訪問的servlet

?
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
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
 
import com.alibaba.druid.support.http.StatViewServlet;
 
 
/**
 * 配置druid監(jiān)控統(tǒng)計功能
 * 在SpringBoot項目中基于注解的配置,如果是web.xml配置,按規(guī)則配置即可
 * @author ZSX
 *
 */
 
@WebServlet(urlPatterns = "/druid/*",
  initParams = {
//     @WebInitParam(name = "allow", value = "192.168.16.110,127.0.0.1"), // IP白名單 (沒有配置或者為空,則允許所有訪問)
//     @WebInitParam(name="deny",value="192.168.16.111"), // IP黑名單 (存在共同時,deny優(yōu)先于allow)
      @WebInitParam(name="loginUsername",value="druid"),// 用戶名
      @WebInitParam(name="loginPassword",value="druid"),// 密碼
      @WebInitParam(name="resetEnable",value="false")// 禁用HTML頁面上的“Reset All”功能
  }
)
public class DruidStatViewServlet extends StatViewServlet {
 
}

這樣啟動項目后在瀏覽器中輸入地址:端口/druid,就可以看到druid的監(jiān)控web頁面了

七、 攔截器配置

?
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
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
@Configuration
public class WebAppConfigurer extends WebMvcConfigurerAdapter {
 
  /**
   * 配置攔截器
   */
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // TODO Auto-generated method stub
    // 多個攔截器組成一個攔截器鏈
    // addPathPatterns 用于添加攔截規(guī)則
    // excludePathPatterns 用戶排除攔截
 
    registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**");
 
 
    super.addInterceptors(registry);
  }
 
  /**
   * 添加自定義的靜態(tài)資源映射
   這里使用代碼的方式自定義目錄映射,并不影響Spring Boot的默認(rèn)映射,可以同時使用。
   */
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
 
//   registry.addResourceHandler("/new/**").addResourceLocations("classpath:/new/");
//   registry.addResourceHandler("/**").addResourceLocations("/");
    super.addResourceHandlers(registry);
  }
 
}

八、swagger發(fā)布api測試配置(可忽略)

 

?
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
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@Configuration
@EnableSwagger2
public class Swagger2 {
 
  @Bean
  public Docket createRestApi(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.zsx.controller.api"))
        .paths(PathSelectors.any())
        .build();
  }
 
  private ApiInfo apiInfo(){
    return new ApiInfoBuilder()
        .title("Spring Boot中使用Swagger2構(gòu)建RESTful APIs")
        .description("描述")
        .termsOfServiceUrl("http://zsx.com.cn")
        .version("1.0")
        .build();
  }
 
}

至此,所有的配置已完成,下面是一個操作數(shù)據(jù)的簡單demo

九、實體類

?
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
@Entity
@Table(name = "t_user")
public class Tuser implements java.io.Serializable {
 
  /**
   *
   */
  private static final long serialVersionUID = 1L;
 
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private Long id;
 
  @Column(name = "username")
  private String userName;
 
  @Column(name = "password")
  private String passWord;
 
  @Column(name = "email")
  private String email;
 
  @Column(name = "mobile")
  private String mobile;
 
  @Column(name = "nickname")
  private String nickName;
 
  // 省略getter 和 setter
 
}

十、dao層

1、使用jpa基本可以實現(xiàn)不寫sql,(但實際開發(fā)中,業(yè)務(wù)邏輯會很復(fù)雜,一點(diǎn)不寫sql完全不現(xiàn)實)

2、注意添加@Repository注解, 添加JpaSpecificationExecutor繼承可以方便分頁

3、 看些jpa的查詢語法資料

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.List;
import java.util.Map;
 
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
 
@Repository
public interface TuserDao extends PagingAndSortingRepository<Tuser, Long>, JpaSpecificationExecutor<Tuser> {
 
  Tuser findByUserName(String userName);
 
  @Query("from Tuser t where id = :id")
  List<Tuser> queryFamilyList(@Param("id") Long id, Pageable pageable);
 
}

十一、service和controller沒啥好說的,跟原先的一樣,下面再提供一個單元測試的demo

?
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
import java.util.List;
import javax.persistence.EntityManager;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
 
import com.alibaba.fastjson.JSON;
import com.golden.Application;
import com.golden.dao.TUserDao;
import com.golden.entity.Tuser;
import com.golden.util.GeneratePageable;
 
@RunWith(SpringJUnit4ClassRunner.class)
 
//指定我們SpringBoot工程的Application啟動類
@SpringApplicationConfiguration(classes = Application.class)
 
//由于是Web項目,Junit需要模擬ServletContext,因此我們需要給我們的測試類加上@WebAppConfiguration
@WebAppConfiguration
public class UtilTest {
 
  @Autowired
  private TUserDao dao;
 
  @Autowired
  private EntityManager em;
 
  @Test
  public void test1(){
    dao.findByUserName("admin");
  }
 
  @Test
  public void test2(){
    // 使用jpa提供的分頁類
    java.util.List<Order> list = new ArrayList<Sort.Order>();
    Order order = new Order(Direction.DESC, "createTime");
 
    list.add(order);
 
    Sort sort = new Sort(list);
 
    Pageable pageable = new PageRequest(0, 10, sort);
 
    Page<Tuser> findAll = dao.findAll(pageable);
 
  }
 
  @Test
  public void test3(){
 
    EntityManager em = dao.getEntityManager();
    Query query = em.createNativeQuery("select * from t_user limit 1");
    Object singleResult = query.getSingleResult();
    System.out.println(singleResult);
  }
 
  /*
//執(zhí)行原生SQL
Query nativeQuery = em.createNativeQuery(String sql);
//指定返回對象類型
nativeQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean( Class resultType));
//返回對象
List<T> resultList = nativeQuery.getResultList();
   */
}

后記:

不用Druid的可以把有關(guān)Druid的配置全部刪掉,swagger的同理

這里沒有使用hibernate.cfg.xml配置文件,主要習(xí)慣了在實體類里配置字段了,不怎么用hibernate的映xml文件了,但其實配置起來跟springmvc項目一樣

說實話這里使用jpa操作數(shù)據(jù)庫,沒感覺有多方便,因為總有各種奇葩的需求,當(dāng)然也可能是我沒深入研究,所以建議改用Mybatis,這個我會再寫一篇springboot加mybatis的配置教程的,最后,還可以使用原生的sql查詢,即使用單元測試?yán)锏腅ntityManager對象去執(zhí)行sql,返回結(jié)果可以指定對象類型,也很方便

還需要注意的一個點(diǎn)是靜態(tài)文件的存放位置,這個跟原先的項目不一樣,原先是在webapp下,但springboot是默認(rèn)放在resources下的static目錄下的,還有其他默認(rèn)目錄和配置,自行搜索

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/javahighness/article/details/53055149

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色图大全 | 午夜精品久久久内射近拍高清 | 久久99影院| 我半夜摸妺妺的奶C了她 | 久久青草费线频观看国产 | 久久re视频这里精品一本到99 | 男同精品视频免费观看网站 | 日本加勒比在线播放 | 精品国产成人AV在线看 | 亚洲狠狠婷婷综合久久久久网站 | 亚洲国产一区二区三区青草影视 | 日韩欧美一区二区三区免费看 | 青青青青久久国产片免费精品 | 波多野结衣教师未删减版 | 日韩亚洲欧美综合一区二区三区 | 精品国内自产拍在线视频 | yellow最新视频2019 | 大片毛片女女女女女女女 | 精品福利一区二区免费视频 | 婚色阿花在线全文免费笔 | 欧美夜夜精品一级爽 | 好男人资源在线观看免费的 | 午夜视频一区 | 32pao强力打造免费高速高 | 美女1819xxxx | 亚洲国产精品嫩草影院久久 | 思久久| 小小水蜜桃视频高清在线观看免费 | 国产亚洲精品一区二区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 色综七七久久成人影 | 四神集团1涨奶是第几章 | 免费看3d小舞被躁视频网站 | 天生奶水1v1高h | 美女被绑着吸下部的故事 | 美女脱一光二净的视频 | 九二淫黄大片看片 | 国产美女在线一区二区三区 | 极品丝袜老师h系列全文阅读 | 日本人泡妞xxxxxx69 | 2019天天干天天操 |