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编辑的测试例,暂时不清楚如何上传