<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SpringBoot+JPA實例

      一、測試環境

      IDEA 2020.3

      Java 11

      PostgreSQL 12.3

       

      二、開發環境搭建

      pom.xml

      不喜歡用parent引入的方式 , 所以自己引入了依賴并排除的沖突

      <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>com.mycloud</groupId>
          <artifactId>mycloud-core</artifactId>
          <version>0.0.0.1</version>
          <name>mycloud-core</name>
          <description>My Cloud Core</description>
          <properties>
              <java.version>11</java.version>
              <springboot.version>2.6.1</springboot.version>
              <log4j.version>2.16.0</log4j.version>
              <slf4j.version>1.8.0-beta4</slf4j.version>
          </properties>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
                  <version>${springboot.version}</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-logging</artifactId>
                      </exclusion>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-tomcat</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-undertow</artifactId>
                  <version>${springboot.version}</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-logging</artifactId>
                      </exclusion>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-logging</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-jpa</artifactId>
                  <version>${springboot.version}</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-logging</artifactId>
                      </exclusion>
                      <exclusion>
                          <groupId>net.bytebuddy</groupId>
                          <artifactId>byte-buddy</artifactId>
                      </exclusion>
                      <exclusion>
                          <artifactId>jboss-logging</artifactId>
                          <groupId>org.jboss.logging</groupId>
                      </exclusion>
                  </exclusions>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-devtools</artifactId>
                  <version>${springboot.version}</version>
                  <scope>runtime</scope>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <version>${springboot.version}</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-starter-logging</artifactId>
                      </exclusion>
                      <exclusion>
                          <groupId>jakarta.xml.bind</groupId>
                          <artifactId>jakarta.xml.bind-api</artifactId>
                      </exclusion>
                      <exclusion>
                          <groupId>net.bytebuddy</groupId>
                          <artifactId>byte-buddy</artifactId>
                      </exclusion>
                      <exclusion>
                          <artifactId>byte-buddy-agent</artifactId>
                          <groupId>net.bytebuddy</groupId>
                      </exclusion>
                  </exclusions>
                  <scope>test</scope>
              </dependency>
      
              <dependency>
                  <groupId>net.bytebuddy</groupId>
                  <artifactId>byte-buddy</artifactId>
                  <version>1.11.22</version>
              </dependency>
              <dependency>
                  <groupId>net.bytebuddy</groupId>
                  <artifactId>byte-buddy-agent</artifactId>
                  <version>1.11.22</version>
              </dependency>
      
              <dependency>
                  <groupId>org.jboss.logging</groupId>
                  <artifactId>jboss-logging</artifactId>
                  <version>3.4.2.Final</version>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-log4j2</artifactId>
                  <version>${springboot.version}</version>
              </dependency>
      
              <dependency>
                  <groupId>org.postgresql</groupId>
                  <artifactId>postgresql</artifactId>
                  <version>42.2.8</version>
              </dependency>
              <dependency>
                  <groupId>com.google.code.gson</groupId>
                  <artifactId>gson</artifactId>
                  <version>2.8.9</version>
              </dependency>
              <dependency>
                  <groupId>com.google.guava</groupId>
                  <artifactId>guava</artifactId>
                  <version>31.0.1-jre</version>
              </dependency>
      
              <dependency>
                  <groupId>javax.xml.bind</groupId>
                  <artifactId>jaxb-api</artifactId>
                  <version>2.3.1</version>
              </dependency>
              <dependency>
                  <groupId>javax.activation</groupId>
                  <artifactId>activation</artifactId>
                  <version>1.1.1</version>
              </dependency>
          </dependencies>
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                      <version>${springboot.version}</version>
                  </plugin>
              </plugins>
          </build>
      
      </project>

       

      application.yml

      server:
        port: 8081
        undertow:
          io-threads: 32
          worker-threads: 100
          buffer-size: 1024
          direct-buffers: true
      spring:
        profiles:
          active: dev

      application-dev.yml

      spring:
        devtools:
          restart:
            enabled: true  #設置開啟熱部署
            additional-paths: src/main/java,src/main/resources #重啟目錄
            exclude: WEB-INF/**
        datasource:
          type: com.zaxxer.hikari.HikariDataSource
          driverClassName: org.postgresql.Driver
          url: jdbc:postgresql://127.0.0.1:5432/framework03
          username: dbuser
          password: dbuserpwd
          # Hikari 連接池配置
          # 最小空閑連接數量
          hikari:
            minimum-idle: 5
            # 空閑連接存活最大時間,默認600000(10分鐘)
            idle-timeout: 180000
            # 連接池最大連接數,默認是10
            maximum-pool-size: 10
            # 此屬性控制從池返回的連接的默認自動提交行為,默認值:true
            auto-commit: true
            # 連接池名稱
            pool-name: Wanma-Cloud-Pool
            # 此屬性控制池中連接的最長生命周期,值0表示無限生命周期,默認1800000即30分鐘
            max-lifetime: 1800000
            # 數據庫連接超時時間,默認30秒,即30000
            connection-timeout: 30000
            connection-test-query: SELECT 1
        jpa:
          datasource: postgresql
          show-sql: true
          hibernate:
            ddl-auto: update
          properties:
            hibernate:
              dialect: org.hibernate.dialect.PostgreSQL10Dialect
              temp:
                use_jdbc_metadata_defaults: false

       

      三、主啟動運行文件

      Application.java

      @SpringBootApplication
      /** 開啟自動配置掃描 */
      @EnableAutoConfiguration
      /** 自動掃描controller */
      @ComponentScans(value = {
              @ComponentScan(
                      value = "com.mycloud",
                      useDefaultFilters = true,
                      includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {IScanFilter.class})}
              )
      })
      /** 自動掃描entity */
      @EntityScan(basePackages = {"com.mycloud"})
      /** 自動掃描repository , basePackages集合不能有交集 */
      @EnableJpaRepositories(basePackages = {"com.mycloud"})
      public class Application {
          public static void main(String[] args) {
              SpringApplication.run(Application.class, args);
          }
      }

       

      主要用來掃描過濾自動掃描的Controller類,增加效率

      public class IScanFilter implements TypeFilter {
          private final static String CONTROLLER_PREFIX = "Controller";
      
          @Override
          public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
              String className = metadataReader.getClassMetadata().getClassName();
              if (className.endsWith(CONTROLLER_PREFIX)) {
                  return true;
              }
              return false;
          }
      }

       

      四、JPA測試

      1 . 首先建立Entity類 , 和數據庫做直接映射 , 不要跟我說lombok , 最不喜歡這個插件

      @Entity
      @Table(name = "ct_lib_book")
      public class CtLibBook {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Long id;
      
          @Column(name = "bookName", nullable = false)
          private String bookName;
          @Column(name = "description")
          private String description;
          @Column(name = "detail")
          private String detail;
      
          public Long getId() {
              return id;
          }
      
          public void setId(Long id) {
              this.id = id;
          }
      
          public String getBookName() {
              return bookName;
          }
      
          public void setBookName(String bookName) {
              this.bookName = bookName;
          }
      
          public String getDescription() {
              return description;
          }
      
          public void setDescription(String description) {
              this.description = description;
          }
      
          public String getDetail() {
              return detail;
          }
      
          public void setDetail(String detail) {
              this.detail = detail;
          }
      
          @Override
          public String toString() {
              return bookName + "-" + description;
          }
      }

       

      2.建立調用接口類(Repository)

      @Repository
      public interface CtLibBookRepository extends JpaRepository<CtLibBook, Integer> {
          @Query(value = "select * from ct_lib_book", nativeQuery = true)
          List<CtLibBook> getAllBookData();
      
          @Query(value = "select * from ct_lib_book where book_name = :bookName", nativeQuery = true)
          List<CtLibBook> getBooksByName(@Param("bookName") String bookName);
      }

       

      3.建立Service層(非必須 , 但是必須要有)

      @Service
      public class CtLibBookService {
          @Autowired
          private CtLibBookRepository ctLibBookRepository;
      
          public List<CtLibBook> getAll() {
              return ctLibBookRepository.getAllBookData();
          }
      
          public List<CtLibBook> getNyBookname(String bookName) {
              return ctLibBookRepository.getBooksByName(bookName);
          }
      
          public void save(CtLibBook ctLibBook) {
              ctLibBookRepository.save(ctLibBook);
          }
      }

       

      4.建立Controller層進行調用(測試用)

      @RestController
      public class HelloController {
          @Autowired
          CtLibBookService ctLibBookService;
      
          @ResponseBody
          @RequestMapping("/hello")
          public String hello() {
              StringBuilder sb = new StringBuilder();
      
              /// System.out.println("Get book All");
              List<CtLibBook> temp = ctLibBookService.getAll();
              for (int i = 0; i < temp.size(); i++) {
                  CtLibBook book = temp.get(i);
                  sb.append(IGson.format(book));
              }
              /// System.out.println("Get book by Name");
              temp = ctLibBookService.getNyBookname("AA");
              for (int i = 0; i < temp.size(); i++) {
                  CtLibBook book = temp.get(i);
                  sb.append(IGson.format(book));
              }
      
              return sb.toString();
          }
      }

       

      測試結果 : 

       

       

       

      PS : 

      當數據庫中 , 沒有表ct_lib_book是 , 會自動創建表  ,當表結構更新時  , 也會自動更新表結構

      這個應該就是JPA最大的優勢了 .

      其他的優勢 , 應該都被MyBatis-Plus給覆蓋了. 

       

      5.鑒于JPA寫復雜查詢特別不方便的問題 

       寫個Sql執行工具類

      @Component
      public class SqlService {
          /// public static final SqlService me = new SqlService();
      
          @PersistenceContext
          EntityManager em;
      
          public List<Map<String, Object>> query(String sql) {
              Query query = em.createNativeQuery(sql);
              @SuppressWarnings("unchecked")
              List<Map<String, Object>> list = query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
              return list;
          }
      
      
          public void excute(String sql) {
              Query query = em.createNativeQuery(sql);
              query.executeUpdate();
          }
      }

      如此 , 就能如此進行調用了 

      @RestController
      public class HelloController {
          @Autowired
          SqlService sqlService;
      
          @ResponseBody
          @RequestMapping("/hello")
          public String hello() {
              StringBuilder sb = new StringBuilder();
              
              List<Map<String, Object>> results = sqlService.query("select * from ct_lib_book");
              sb.append(IGson.format(results));
      
              return sb.toString();
          }
      }

       

      posted on 2022-01-11 16:50  太清  閱讀(209)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 久久大香伊蕉在人线免费AV | 国产视色精品亚洲一区二区| 免费国产一区二区不卡| 色综合亚洲一区二区小说| 日韩深夜免费在线观看| 欧美巨大极度另类| 久久精品人妻无码一区二区三区| 日韩高清免费一码二码三码 | 國產尤物AV尤物在線觀看| 国产二区三区不卡免费| 成人国产精品中文字幕| 精品无码三级在线观看视频 | 久久精品人人槡人妻人人玩av| 亚洲 制服 丝袜 无码| 全黄h全肉边做边吃奶视频| 中文字幕无码成人免费视频| 色噜噜亚洲男人的天堂| 99er热精品视频| 夜夜影院未满十八勿进| 精品国产一区av天美传媒| 国产一级av在线播放| 无码伊人久久大杳蕉中文无码| 久久综合久久美利坚合众国| 平江县| 欧美日本在线一区二区三区| 国产成人精品无码播放| 尹人香蕉久久99天天拍| 国产av熟女一区二区三区| 白白色发布永久免费观看视频| 乌审旗| 国产精品∧v在线观看| 99久久精品久久久久久清纯| h无码精品3d动漫在线观看| 国产精品免费AⅤ片在线观看| 在线观看AV永久免费| 丰满少妇内射一区| 少妇高潮激情一区二区三| 免费观看一级欧美大| 18av千部影片| 欧洲亚洲国内老熟女超碰| 毛片在线看免费|