当前位置:Gxlcms > 数据库问题 > springboot入门_数据库访问_jdbcTemplate

springboot入门_数据库访问_jdbcTemplate

时间:2021-07-01 10:21:17 帮助过:6人阅读

<!--web 依赖--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-web</artifactId> 5 </dependency> 6 <!--spring jdbc依赖--> 7 <dependency> 8 <groupId>org.springframework.boot</groupId> 9 <artifactId>spring-boot-starter-jdbc</artifactId> 10 </dependency> 11 <!--mysql 依赖--> 12 <dependency> 13 <groupId>mysql</groupId> 14 <artifactId>mysql-connector-java</artifactId> 15 </dependency> 16 17 <!-- fastjson --> 18 <dependency> 19 <groupId>com.alibaba</groupId> 20 <artifactId>fastjson</artifactId> 21 <version>1.2.47</version> 22 </dependency>

要访问数据库,我们必须配置数据库连接信息,application.properties中添加数据库链接信息。springboot中默认使用的是Hikari数据库连接池

1 #数据源配置
2 spring.datasource.url=jdbc:mysql://localhost:3306/test
3 spring.datasource.username=root
4 spring.datasource.password=123456
5 #驱动可以不配置,不配置时会从url中解析
6 spring.datasource.driver-class-name=com.mysql.jdbc.Driver

如果我们不想使用Hikari,比如想使用阿里的德鲁伊,我们可以修改

 1 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 

数据库创建表:

1 CREATE TABLE `t_city` (
2   `id` BIGINT(11) NOT NULL AUTO_INCREMENT,
3   `cityName` VARCHAR(50) NOT NULL,
4   `cityCode` VARCHAR(50) NOT NULL,
5   PRIMARY KEY (`id`)
6 ) ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

创建与数据库表对应的实体类:

 1 public class City {
 2     private Long id;
 3     private String cityName;
 4     private String cityCode;
 5 
 6     public City(){}
 7 
 8     public City(String cityName, String cityCode){
 9         this.cityName = cityName;
10         this.cityCode = cityCode;
11     }
12     //省略get和set方法  
13 }

定义dao层接口及实现

 1 public interface CityDAO {
 2 
 3     int add(City city) throws Exception;
 4 
 5     int delete(Long id) throws Exception;
 6 
 7     int update(City city) throws Exception;
 8 
 9     List<City> findAllCity() throws Exception;
10 
11     City findById(Long id) throws Exception;
12 
13 }
 1 @Service("cityDAO")
 2 public class CityDAOImpl implements CityDAO {
 3 
 4     @Autowired
 5     private JdbcTemplate jdbcTemplate;
 6 
 7     @Override
 8     public int add(City city) {
 9         String sql = "insert into t_city (cityCode, cityName) values (?, ?)";
10         return jdbcTemplate.update(sql, city.getCityCode(), city.getCityName());
11     }
12 
13     @Override
14     public int delete(Long id) {
15         String sql = "delete from t_city where id = ?";
16         return jdbcTemplate.update(sql, id);
17     }
18 
19     @Override
20     public int update(City city) {
21         String sql = "update t_city set cityCode = ?, cityName = ? where id = ?";
22         return jdbcTemplate.update(sql, city.getCityCode(), city.getCityName(), city.getId());
23     }
24 
25     @Override
26     public List<City> findAllCity() {
27         String sql = "select * from t_city";
28         return jdbcTemplate.query(sql, new Object[]{}, new BeanPropertyRowMapper(City.class));
29     }
30 
31     @Override
32     public City findById(Long id) {
33         String sql = "select * from t_city where id = ?";
34         List<City> cityList = jdbcTemplate.query(sql, new Object[]{id}, new BeanPropertyRowMapper(City.class));
35         if(cityList != null && cityList.size()>0){
36             return cityList.get(0);
37         }
38         return null;
39     }
40 }

定义service层接口及实现

 1 public interface CityService {
 2 
 3     int add(City city) throws Exception;
 4 
 5     int delete(Long id) throws Exception;
 6 
 7     int update(City city) throws Exception;
 8 
 9     List<City> findAllCity() throws Exception;
10 
11     City findById(Long id) throws Exception;
12 
13 }
 1 @Service("cityService")
 2 public class CityServiceImpl implements CityService {
 3 
 4     @Autowired
 5     private CityDAO cityDAO;
 6 
 7     @Override
 8     public int add(City city) throws Exception {
 9         return cityDAO.add(city);
10     }
11 
12     @Override
13     public int delete(Long id) throws Exception {
14         return cityDAO.delete(id);
15     }
16 
17     @Override
18     public int update(City city) throws Exception {
19         return cityDAO.update(city);
20     }
21 
22     @Override
23     public List<City> findAllCity() throws Exception {
24         return cityDAO.findAllCity();
25     }
26 
27     @Override
28     public City findById(Long id) throws Exception {
29         return cityDAO.findById(id);
30     }
31 }

此处service和dao之间的代码看似可以省略一层,但是一般我们在dao层只做与数据库的交互,在service层处理相应的业务逻辑,所以还是需要做分层的。

为了看出代码执行效果,定义几个简单的restful api做测试。

controller代码如下

 1 @RestController
 2 @RequestMapping("/datas/city/jdbc")
 3 public class CityController {
 4 
 5     @Autowired
 6     private CityService cityService;
 7 
 8     @PutMapping
 9     public String add(@RequestBody JSONObject jsonObject){
10         String cityCode = jsonObject.getString("cityCode");
11         String cityName = jsonObject.getString("cityName");
12         City city = new City(cityName, cityCode);
13         try {
14             cityService.add(city);
15             return "success";
16         } catch (Exception e) {
17             e.printStackTrace();
18             return "fail";
19         }
20     }
21 
22     @DeleteMapping("/{id}")
23     public String delete(@PathVariable Long id){
24         try {
25             cityService.delete(id);
26             return "success";
27         } catch (Exception e) {
28             e.printStackTrace();
29             return "fail";
30         }
31     }
32 
33     @PostMapping
34     public String update(@RequestBody JSONObject jsonObject){
35         Long id = jsonObject.getLong("id");
36         try {
37             City city = cityService.findById(id);
38             if(city != null){
39                 String cityCode = jsonObject.getString("cityCode");
40                 city.setCityCode(cityCode);
41                 String cityName = jsonObject.getString("cityName");
42                 city.setCityName(cityName);
43                 cityService.update(city);
44                 return "success";
45             }
46         } catch (Exception e) {
47             e.printStackTrace();
48         }
49         return "fail";
50     }
51 
52     @GetMapping("/list")
53     public String list(){
54         try {
55             List<City> cityList =  cityService.findAllCity();
56             return cityList.toString();
57         } catch (Exception e) {
58             e.printStackTrace();
59         }
60         return null;
61     }
62 }

如果我们不想使用springboot提供的默认配置信息,想要自己配置数据源信息也是可以的。自己配置就不需要在application.properties文件中配置datasource相关的信息了,我们可以创建自己的配置文件,在配置勒种读取并设置即可,

创建dbSource.properties

1 #datasource config
2 jdbc.driverClassName=com.mysql.jdbc.Driver
3 jdbc.url=jdbc:mysql://localhost:3306/test
4 jdbc.username=root
5 jdbc.password=123456

创建配置类

 1 @Configuration
 2 @PropertySource("classpath:dbSource.properties")
 3 public class DataSourceConfig {
 4 
 5     @Autowired
 6     private Environment env;
 7 
 8     @Bean
 9     public JdbcTemplate jdbcTemplate(){
10         JdbcTemplate jdbcTemplate = new JdbcTemplate();
11         jdbcTemplate.setDataSource(dataSource());
12         return jdbcTemplate;
13     }
14 
15     @Bean
16     public DataSource dataSource(){
17         System.out.println("初始化数据源start。。。");
18         //HikariDataSource dataSource = new HikariDataSource();
19         DruidDataSource dataSource = new DruidDataSource();
20         String driver = env.getProperty("jdbc.driverClassName").trim();
21         String url = env.getProperty("jdbc.url").trim();
22         String username = env.getProperty("jdbc.username").trim();
23         String password = env.getProperty("jdbc.password").trim();
24         dataSource.setDriverClassName(driver);
25         //dataSource.setJdbcUrl(url);//Hikar url
26         dataSource.setUrl(url);
27         dataSource.setUsername(username);
28         dataSource.setPassword(password);
29         System.out.println("初始化数据源end。。。");
30         return dataSource;
31     }
32 
33 }

启动项目可以看到其中日志中如下

技术分享图片

 

springboot入门_数据库访问_jdbcTemplate

标签:ret   try   tst   values   mysq   bubuko   enc   query   span   

人气教程排行