1. 程式人生 > >springboot postgresql druid連線池和jpa,jdbctemplate執行sql查詢

springboot postgresql druid連線池和jpa,jdbctemplate執行sql查詢

1.maven依賴配置(pom.xml)

 

 1         <dependency>
 2             <groupId>org.springframework.boot</groupId>
 3             <artifactId>spring-boot-starter</artifactId>
 4         </dependency>
 5         
 6         <dependency>
 7             <groupId
>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-web</artifactId> 9 </dependency> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-jdbc</
artifactId> 13 </dependency> 14 <dependency> 15 <groupId>com.alibaba</groupId> 16 <artifactId>druid</artifactId> 17 <version>1.0.20</version> 18 </dependency> 19 <dependency> 20
<groupId>org.postgresql</groupId> 21 <artifactId>postgresql</artifactId> 22 <scope>runtime</scope> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-data-jpa</artifactId> 27 </dependency>

 

2.資料來源配置(application.properties

 

spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
#druid database connect pool
#config database connect info
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/druiddb
spring.datasource.username=postgres
spring.datasource.password=postgres
#config druid
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=10000
spring.datasource.timeBetweenEvictionRunMillis=60000
spring.datasource.minEvictableIdleTimeMillis=10000
spring.datasource.validationQuery=SELECT 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=true
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=10
spring.datasource.filters=stat

 

3.druid管理器配置

工程結構如下

 1 @Configuration
 2 public class DruidConfiguration {
 3     private static Logger log = LoggerFactory.getLogger(DruidConfiguration.class);
 4     @Bean  
 5     @ConfigurationProperties(prefix="spring.datasource")  
 6     public DataSource druid() {  
 7         return new DruidDataSource();  
 8     }  
 9     /**
10      * 配置druid管理頁面的訪問控制
11      * 訪問網址: http://127.0.0.1:8080/druid
12      * @return
13      */
14     @Bean
15     public ServletRegistrationBean<Servlet> druidServlet() {
16         log.info("init Druid Servlet Configuration");
17         ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<>();
18         servletRegistrationBean.setServlet(new StatViewServlet());  //配置一個攔截器
19         servletRegistrationBean.addUrlMappings("/druid/*");    //指定攔截器只攔截druid管理頁面的請求
20         HashMap<String, String> initParam = new HashMap<String,String>();
21         initParam.put("loginUsername", "admin");    //登入druid管理頁面的使用者名稱
22         initParam.put("loginPassword", "admin");    //登入druid管理頁面的密碼
23         initParam.put("resetEnable", "true");       //是否允許重置druid的統計資訊
24         initParam.put("allow", "");         //ip白名單,如果沒有設定或為空,則表示允許所有訪問
25         servletRegistrationBean.setInitParameters(initParam);
26         return servletRegistrationBean;
27     }
28     
29     @Bean
30     public FilterRegistrationBean<WebStatFilter> filterRegistrationBean() {
31         FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<WebStatFilter>();
32         filterRegistrationBean.setFilter(new WebStatFilter());
33         filterRegistrationBean.addUrlPatterns("/*");
34         filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
35         return filterRegistrationBean;
36     }
37     
38 }

 

4.實體類

 

 1 //建表語句
 2 //create table USERS(id INT,age int,name VARCHAR, PRIMARY KEY(id));
 3 /**
 4  * @DESC users表的實體類
 5  * @author guchuang
 6  */
 7 @Entity
 8 @Table(name="users")
 9 public class User implements Serializable {
10 
11     private static final long serialVersionUID = 1L;
12     @Id
13     private int id;
14     private int age;
15     private String name;
16     
17     public User() {
18     }
19     public User(int id, int age, String name) {
20         this.id = id;
21         this.age = age;
22         this.name = name;
23     }
24     public int getId() {
25         return id;
26     }
27     public void setId(int id) {
28         this.id = id;
29     }
30     public int getAge() {
31         return age;
32     }
33     public void setAge(int age) {
34         this.age = age;
35     }
36     public String getName() {
37         return name;
38     }
39     public void setName(String name) {
40         this.name = name;
41     }
42     @Override
43     public String toString() {
44         return "User [id=" + id + ", age=" + age + ", name=" + name + "]";
45     }
46 }

 

1 /**
2  * @DESC 實現jpa介面,擁有jpa提供的預設crud操作,無需自己寫實現程式碼(除非要擴充套件功能)
3  * @author guchuang
4  *
5  */
6 public interface UserRepository extends JpaRepository<User,Integer> {
7     
8 }

 

 

5.jdbcTemplate實現資料庫讀寫

 

 1 @RestController
 2 @RequestMapping("/jpa")
 3 public class JpaUserController {
 4     @Autowired
 5     private UserRepository userRepository;  
 6     
 7     @GetMapping(value="/user")
 8     public List<User> getUser() throws SQLException {
 9         List<User> users = userRepository.findAll();
10         return users;
11     }
12     @GetMapping(value="/user/{id}")
13     public User getUser(@PathVariable(value="id") int id) throws SQLException {
14         Optional<User> user = userRepository.findById(id);
15         return user.get();
16     }
17     @PostMapping(value = "/user")
18     public String saveUser(@RequestBody User user){
19         userRepository.save(user);
20         return "success to add user";
21     }
22     @PutMapping(value = "/user")
23     public String updateUser(@RequestBody User user){
24         userRepository.deleteById(user.getId());
25         userRepository.save(user);
26         return "success to update user";
27     }
28     @DeleteMapping(value = "/user/{id}")
29     public String deleteUser(@PathVariable(value="id") int id){
30         userRepository.deleteById(id);
31         return "success to delete user";
32     }
33 }

  

6.jpa實現資料庫讀寫

 

 1 @RestController
 2 @RequestMapping("/jpa")
 3 public class JpaUserController {
 4     @Autowired
 5     private UserRepository userRepository;  
 6     
 7     @GetMapping(value="/user")
 8     public List<User> getUser() throws SQLException {
 9         List<User> users = userRepository.findAll();
10         return users;
11     }
12     @GetMapping(value="/user/{id}")
13     public User getUser(@PathVariable(value="id") int id) throws SQLException {
14         Optional<User> user = userRepository.findById(id);
15         return user.get();
16     }
17     @PostMapping(value = "/user")
18     public String saveUser(@RequestBody User user){
19         userRepository.save(user);
20         return "success to add user";
21     }
22     @PutMapping(value = "/user")
23     public String updateUser(@RequestBody User user){
24         userRepository.deleteById(user.getId());
25         userRepository.save(user);
26         return "success to update user";
27     }
28     @DeleteMapping(value = "/user/{id}")
29     public String deleteUser(@PathVariable(value="id") int id){
30         userRepository.deleteById(id);
31         return "success to delete user";
32     }
33 }

 

7.druid管理頁面

  

 

  

     8.測試例(postman) 

  備註:test_ip_port為postman中的變數,實際替換為ip:port即可

         

 

    

 

9.附件

postman編輯的測試例,暫時不清楚如何上傳