前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(9)SpringBoot使用JdbcTemplate访问数据库

(9)SpringBoot使用JdbcTemplate访问数据库

作者头像
IT云清
发布2022-05-07 16:21:19
2910
发布2022-05-07 16:21:19
举报
文章被收录于专栏:IT云清IT云清

   摘要:本文主要讲解SpringBoot使用JdbcTemplate访问数据库。

前面我们已经讲了SpringBoot如何使用JPA访问数据库如何使用mybatis访问数据库,本文讲述如何使用JdbcTemplate访问数据库。这三种技术,应该如何选型,网上众说纷纭,这个还得看公司的业务类型,这里就不做分析。

JdbcTemplate的使用,也是很简单的:引入依赖-->配置数据源-->引入JdbcTemplate模板-->调用模板方法,具体使用细节如下。

1.pom.xml

引入JdbcTemplate必要的依赖

代码语言:javascript
复制
<!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
<!--JdbcTemplate-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
2.application.properties

使用JdbcTemplate没有什么额外配置,我们只需要配置好数据库即可。

代码语言:javascript
复制
# mysql  
spring.datasource.url=jdbc:mysql://22.22.22.22/ss  
spring.datasource.username=root  
spring.datasource.password=xxxxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver  
3.service层

使用JdbcTemplate访问数据库,我们可以直接把对数据库的操作写在业务层即可;这里我们写几个增删改查方法示例一下。首先,此文演示的接口和业务层结构如下,是比较传统的分层结构:

640?wx_fmt=png
640?wx_fmt=png

代码如下:

3.1JDBCTemplateController.java

接口类中没有什么需要强调的,内容如下:

代码语言:javascript
复制
package com.java4all.controller;
import com.java4all.entity.User;
import com.java4all.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * Author: momo
 * Date: 2018/4/3
 * Description:演示JDBCTemplate
 */
@RestController
@RequestMapping("jdbcUser")
public class JDBCTemplateController {
    @Autowired
    private UserService userService;
    @RequestMapping(value = "getCount",method = RequestMethod.GET)
    public Integer getCount(){
        Integer count = userService.getCount();
        return count;
    }
    @RequestMapping(value = "deleteUserById",method = RequestMethod.GET)
    public void  deleteUserById(Integer id){
        userService.deleteUserById(id);
    }
    @RequestMapping(value = "updateUserById",method = RequestMethod.GET)
    public void  updateUserById(String userName,Integer id){
        userService.updateUserById(userName,id);
    }
    @RequestMapping(value = "getUserByProvinceAndCity",method = RequestMethod.GET)
    public List<User>  getUserByProvinceAndCity(String province,String city){
        List<User> list = userService.getUserByProvinceAndCity(province, city);
        return list;
    }
}
3.2UserService.java
代码语言:javascript
复制
package com.java4all.service;
import com.java4all.entity.User;
import java.util.List;
/**
 * Author: momo
 * Date: 2018/3/29
 * Description:
 */
public interface UserService {
    User getById(Integer id);
    Integer getCount();
    void deleteUserById(Integer id);
    void updateUserById(String userName,Integer id);
    List<User> getUserByProvinceAndCity(String province, String city);
}
3.3UserServiceImpl.java

我们在此实现类中,@Autowired引入JdbcTemplate,然后就可以使用模板类的增删改查等方法了。

代码语言:javascript
复制
package com.java4all.serviceImpl;
import com.java4all.dao.UserDao;
import com.java4all.entity.User;
import com.java4all.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Author: momo
 * Date: 2018/3/29
 * Description:
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public User getById(Integer id) {
        User user = userDao.getById(id);
        return user;
    }
    /**       JdbcTemplate      */
    @Override
    public Integer getCount() {
        String sql = "SELECT COUNT(*) FROM user";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }
    @Override
    public void deleteUserById(Integer id) {
        String sql = "delete from user where id = ?";
        jdbcTemplate.update(sql,id);
    }
    @Override
    public void updateUserById(String userName,Integer id) {
        String sql = "update user set user_name = ? where id = ?";
        jdbcTemplate.update(sql,userName,id);
    }
    @Override
    public List<User> getUserByProvinceAndCity(String province, String city) {
        //错误写法,如果打印出此sql,会发现?还是?,并没有被参数替换掉
        String sql = "select * from user where 1= 1 and province = ? and city = ?";
        String sql2 = "select * from user where 1= 1 and province ='"+ province +"' and city ='"+city + "'";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql2);
        List<User> listRe = new ArrayList<>();
        for(int i = 0 , length = list.size();i < length; i ++){
            Map<String, Object> map = list.get(i);
            User user = new User();
            //这个map转为实体的方式,可以抽取出来,其他方法可复用
            user.setId((int)map.get("id"));
            user.setUserName((String)map.get("user_name"));
            user.setRealName((String)map.get("real_name"));
            user.setPassword((String)map.get("password"));
            user.setCountry((String)map.get("country"));
            user.setProvince((String)map.get("province"));
            user.setCity((String)map.get("city"));
            user.setPhone((String)map.get("phone"));
            user.setCreateTime((Date) map.get("create_time"));
            user.setDevLanguage((String)map.get("dev_language"));
            user.setSchoolName((String)map.get("school_name"));
            user.setSchoolMajor((String)map.get("school_major"));
            listRe.add(user);
        }
        return listRe;
    }
}

附建表语句:

代码语言:javascript
复制
CREATE TABLE `user` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(32) DEFAULT NULL COMMENT '用户名',
  `real_name` varchar(32) DEFAULT NULL COMMENT '真实姓名',
  `password` varchar(32) DEFAULT NULL COMMENT '密码',
  `country` varchar(11) DEFAULT NULL COMMENT '省',
  `province` varchar(11) DEFAULT NULL COMMENT '市',
  `city` varchar(11) DEFAULT NULL COMMENT '县',
  `phone` varchar(32) DEFAULT NULL COMMENT '电话',
  `create_time` date DEFAULT NULL COMMENT '创建时间',
  `dev_language` varchar(11) DEFAULT NULL COMMENT '开发语言',
  `school_name` varchar(32) DEFAULT NULL COMMENT '学校',
  `school_major` varchar(32) DEFAULT NULL COMMENT '大学专业',
  PRIMARY KEY (`id`),
  KEY `user_name_index` (`user_name`),
  KEY `school_major_index` (`school_major`)
) ENGINE=InnoDB AUTO_INCREMENT=1600003 DEFAULT CHARSET=utf8

User实体在(5)SpringBoot使用JPA访问数据库一文中已经给出,这里不再黏贴。

添加,更新,删除,查询单个对象,都比较简单,这里重点注意查询列表,上面的方法,查询出的列表,里面是map的格式,需要我们手动转换一下,我们可以把这个转换过程抽取出来,其他的查询列表方法也可以复用;而且,注意sql的拼接。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.pom.xml
  • 2.application.properties
  • 3.service层
    • 3.1JDBCTemplateController.java
      • 3.2UserService.java
        • 3.3UserServiceImpl.java
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档