<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring HikariCP 教程 > 原文: [http://zetcode.com/articles/springhikaricp/](http://zetcode.com/articles/springhikaricp/) 在本教程中,我們將展示如何在經典的 Spring 應用中使用 HikariCP 連接池。 在應用中,我們使用 Spring `JdbcTemplate`連接到 MySQL 數據庫。 我們使用 FreeMarker 作為模板引擎。 該應用已部署在 Tomcat 服務器上。 Spring 是用于在 Java 中開發企業應用的流行 Java 應用框架。 這也是一個非常好的集成系統,可以幫助將各種企業組件粘合在一起。 HikariCP 是可靠的高性能 JDBC 連接池。 連接池是數據庫系統維護的數據庫連接的高速緩存,用于在需要將來對數據庫的請求時重用連接。 使用連接池,我們可以大大減少整體資源的使用。 `JdbcTemplate`是一個 Spring 庫,可以幫助程序員創建與關系數據庫和 JDBC 一起使用的應用。 它會處理許多繁瑣且容易出錯的底層細節,例如處理事務,清理資源以及正確處理異常。 `JdbcTemplate`在 Spring 的`spring-jdbc`模塊中提供。 `cars.sql` ```java -- SQL for the Cars table START TRANSACTION; DROP TABLE IF EXISTS Cars; CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), Price INTEGER); INSERT INTO Cars VALUES(1, 'Audi', 52642); INSERT INTO Cars VALUES(2, 'Mercedes', 57127); INSERT INTO Cars VALUES(3, 'Skoda', 9000); INSERT INTO Cars VALUES(4, 'Volvo', 29000); INSERT INTO Cars VALUES(5, 'Bentley', 350000); INSERT INTO Cars VALUES(6, 'Citroen', 21000); INSERT INTO Cars VALUES(7, 'Hummer', 41400); INSERT INTO Cars VALUES(8, 'Volkswagen', 21600); COMMIT; ``` 在代碼示例中,我們使用此表。 ```java mysql> source cars.sql ``` 使用`mysql`命令行工具及其`source`命令,創建`Cars`表。 [MySQL 教程](/databases/mysqltutorial/)提供了有關如何設置和使用 MySQL 數據庫的更多信息。 ```java ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── bean │ │ │ └── Car.java │ │ ├── service │ │ │ └── CarService.java │ │ └── web │ │ └── MyController.java │ ├── resources │ │ └── application-context.xml │ └── webapp │ ├── META-INF │ │ └── context.xml │ └── WEB-INF │ ├── spring-servlet.xml │ ├── views │ │ ├── allCars.ftl │ │ └── index.ftl │ └── web.xml └── test └── java ``` 這是項目結構。 `pom.xml` ```java <?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.zetcode</groupId> <artifactId>SpringJdbcTemplateWebEx</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>SpringJdbcTemplateWebEx</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>4.3.7.RELEASE</spring-version> </properties> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.25-incubating</version> </dependency> <!--Needed for freemarker FreeMarkerConfigurer--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.5.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.22</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project> ``` 在此 Maven 構建文件中,我們為 Spring 應用的核心,HikariCP 連接池,FreeMarker 模板引擎,`JdbcTemplate`庫和 MySQL 驅動程序提供依賴關系。 `web.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app> ``` 在`web.xml`文件中,我們設置了 Spring `DispatcherServlet`。 `DispatcherServlet`是 HTTP 請求處理器的中央調度器。 `context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/SpringJdbcTemplateWebEx"> <Resource name="jdbc/myDs" auth="Container" factory="com.zaxxer.hikari.HikariJNDIFactory" dataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" dataSource.url="jdbc:mysql://localhost/testdb?useSSL=false" type="javax.sql.DataSource" minimumIdle="5" maximumPoolSize="10" connectionTimeout="300000" database="testdb" server="localhost" dataSource.user="testuser" dataSource.password="test623" dataSource.cachePrepStmts="true" dataSource.prepStmtCacheSize="250" dataSource.prepStmtCacheSqlLimit="2048" closeMethod="close" /> </Context> ``` Tomcat 的`context.xml`文件包含數據源定義。 數據源使用 HikariCP 連接池。 `spring-servlet.xml` ```java <?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 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"> <context:component-scan base-package="com.zetcode" /> <import resource="classpath:application-context.xml" /> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/views/"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true"/> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> </bean> </beans> ``` 在 spring servlet 上下文 XML 文件中,我們定義了兩個 bean:`freemarkerConfig`和`viewResolver`。 這些是 FreeMarker 的配置 bean。 `spring-servlet.xml`位于`WEB-INF`子目錄中。 ```java <context:component-scan base-package="com.zetcode" /> ``` 我們啟用`com.zetcode`封裝的組件掃描。 ```java <import resource="classpath:application-context.xml" /> ``` 我們導入另一個上下文文件,稱為`application-context.xml`。 它位于`src/main/resources`目錄中的類路徑上。 `application-context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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"> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/myDs"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> </beans> ``` 在`application-context.xml`中,我們定義了兩個 bean:`dataSource`和`jdbcTemplate`。 `Car.java` ```java package com.zetcode.bean; public class Car { private int Id; private String Name; private int Price; public int getId() { return Id; } public void setId(int Id) { this.Id = Id; } public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public int getPrice() { return Price; } public void setPrice(int Price) { this.Price = Price; } @Override public String toString() { return "Car{" + "Id=" + Id + ", Name=" + Name + ", Price=" + Price + '}'; } } ``` 這是一個`Car`類。 數據庫表中的一行將映射到此類。 `CarService.java` ```java package com.zetcode.service; import com.zetcode.bean.Car; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service public class CarService { @Autowired public JdbcTemplate jdbcTemplate; public List<Car> getAllCars() { String sql = "SELECT * FROM Cars"; List<Car> cars = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Car.class)); return cars; } } ``` `CarService`是一個服務類,其中包含一種從數據庫中檢索所有汽車的方法。 ```java @Autowired public JdbcTemplate jdbcTemplate; ``` `JdbcTemplate`注入了`@Autowired`注解。 ```java List<Car> cars = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Car.class)); ``` 使用`JdbcTemplate`的`query()`方法,我們執行 SQL 查詢。 使用`BeanPropertyRowMapper`將結果對象映射到`Car`對象。 `MyController.java` ```java package com.zetcode.web; import com.zetcode.bean.Car; import com.zetcode.service.CarService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller public class MyController { @Autowired private CarService carService; @RequestMapping("/index") public String index(Model model) { return "index"; } @RequestMapping(value = "/all", method = RequestMethod.GET) public ModelAndView all() { List<Car> cars = carService.getAllCars(); ModelAndView model = new ModelAndView("allCars"); model.addObject("cars", cars); return model; } } ``` `MyController`是控制器類。 它具有兩個請求 URL 的映射:`/index`和`/all`。 ```java @Autowired private CarService carService; ``` 注入`CarService`。 ```java @RequestMapping("/index") public String index(Model model) { return "index"; } ``` 通過返回`index.ftl`文件來解決此請求。 這些視圖位于`WEB-INF/views`目錄中。 ```java @RequestMapping(value = "/all", method = RequestMethod.GET) public ModelAndView all() { List<Car> cars = carService.getAllCars(); ModelAndView model = new ModelAndView("allCars"); model.addObject("cars", cars); return model; } ``` 在這里,我們調用`CarService`的`getAllCars()`方法并創建`ModelAndView`對象。 所檢索的數據被發送到`allCars.ftl`模板。 `index.ftl` ```java <!DOCTYPE html> <html> <head> <title>Home page</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <p>Showing <a href="all.html">all cars</a></p> </body> </html> ``` 這是`index.ftl`文件。 `allCars.ftl` ```java <!DOCTYPE html> <html> <head> <title>Cars</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <table> <tr> <th>Id</th> <th>Name</th> <th>Price</th> </tr> <#list cars as car> <tr> <td>${car.id}</td> <td>${car.name}</td> <td>${car.price}</td> </tr> </#list> </table> </body> </html> ``` 該模板文件處理從數據庫發送的數據。 ```java <#list cars as car> ``` `#list`指令列出了數據集合。 ![Showing all cars](https://img.kancloud.cn/c0/4f/c04f4ef34489cb9a9aa14d00980932d4_600x348.jpg) 圖:顯示所有汽車 MySQL 數據庫中的數據顯示在 Opera 瀏覽器中。 在本教程中,我們創建了一個經典的 Spring 應用,該應用使用`JdbcTemplate`對 MySQL 數據庫執行了 SQL 語句。 我們使用了 HikariCP 連接池。 Spring 應用使用 FreeMarker 模板引擎,并已部署在 Tomcat 服務器上。 您可能也對這些相關教程感興趣:[使用 HikariCP 連接池](/articles/hikaricp/), [`JdbcTemplate`教程](/db/jdbctemplate/), [Spring 單例范圍 bean 教程](/spring/singletonscope/), [Spring Web 應用簡介](/articles/springwebfirst/) , [Spring Boot 第一個 Web 應用](/articles/springbootwebfirst/)或 [Java 教程](/lang/java/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看