2023-02-20  阅读(2)
原文作者:方志鹏 原文地址:https://blog.csdn.net/forezp/category_6830966.html

本文介绍springboot通过jdbc访问关系型mysql,通过spring的JdbcTemplate去访问。

准备工作

  • jdk 1.8
  • maven 3.0
  • idea
  • mysql

初始化mysql:

    -- create table `account`
    DROP TABLE `account` IF EXISTS
    CREATE TABLE `account` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL,
      `money` double DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    INSERT INTO `account` VALUES ('1', 'aaa', '1000');
    INSERT INTO `account` VALUES ('2', 'bbb', '1000');
    INSERT INTO `account` VALUES ('3', 'ccc', '1000');

创建工程

引入依赖:

在pom文件引入spring-boot-starter-jdbc的依赖:

    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jdbc</artifactId>
    		</dependency>

引入mysql连接类和连接池:

    <dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.0.29</version>
    		</dependency>

开启web:

    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>

配置相关文件

在application.properties文件配置mysql的驱动类,数据库地址,数据库账号、密码信息。

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456

通过引入这些依赖和配置一些基本信息,springboot就可以访问数据库类。

具体编码

实体类

    public class Account {
        private int id ;
        private String name ;
        private double money;
    
    ....省略了getter. setter
    
    }

dao层

    public interface IAccountDAO {
        int add(Account account);
    
        int update(Account account);
    
        int delete(int id);
    
        Account findAccountById(int id);
    
        List<Account> findAccountList();
    }

具体的实现类:

    
    package com.forezp.dao.impl;
    
    import com.forezp.dao.IAccountDAO;
    import com.forezp.entity.Account;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    /**
     * Created by fangzhipeng on 2017/4/20.
     */
    @Repository
    public class AccountDaoImpl implements IAccountDAO {
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
        @Override
        public int add(Account account) {
            return jdbcTemplate.update("insert into account(name, money) values(?, ?)",
                  account.getName(),account.getMoney());
    
        }
    
        @Override
        public int update(Account account) {
            return jdbcTemplate.update("UPDATE  account SET NAME=? ,money=? WHERE id=?",
                    account.getName(),account.getMoney(),account.getId());
        }
    
        @Override
        public int delete(int id) {
            return jdbcTemplate.update("DELETE from TABLE account where id=?",id);
        }
    
        @Override
        public Account findAccountById(int id) {
            List<Account> list = jdbcTemplate.query("select * from account where id = ?", new Object[]{id}, new BeanPropertyRowMapper(Account.class));
            if(list!=null && list.size()>0){
                Account account = list.get(0);
                return account;
            }else{
                return null;
            }
        }
    
        @Override
        public List<Account> findAccountList() {
            List<Account> list = jdbcTemplate.query("select * from account", new Object[]{}, new BeanPropertyRowMapper(Account.class));
            if(list!=null && list.size()>0){
                return list;
            }else{
                return null;
            }
        }
    }

service层

    public interface IAccountService {
    
    
        int add(Account account);
    
        int update(Account account);
    
        int delete(int id);
    
        Account findAccountById(int id);
    
        List<Account> findAccountList();
    
    }

具体实现类:

    @Service
    public class AccountService implements IAccountService {
        @Autowired
        IAccountDAO accountDAO;
        @Override
        public int add(Account account) {
            return accountDAO.add(account);
        }
    
        @Override
        public int update(Account account) {
            return accountDAO.update(account);
        }
    
        @Override
        public int delete(int id) {
            return accountDAO.delete(id);
        }
    
        @Override
        public Account findAccountById(int id) {
            return accountDAO.findAccountById(id);
        }
    
        @Override
        public List<Account> findAccountList() {
            return accountDAO.findAccountList();
        }
    }

构建一组restful api来展示

    package com.forezp.web;
    
    import com.forezp.entity.Account;
    import com.forezp.service.IAccountService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    /**
     * Created by fangzhipeng on 2017/4/20.
     */
    
    @RestController
    @RequestMapping("/account")
    public class AccountController {
    
        @Autowired
        IAccountService accountService;
    
        @RequestMapping(value = "/list",method = RequestMethod.GET)
        public  List<Account> getAccounts(){
           return accountService.findAccountList();
        }
    
        @RequestMapping(value = "/{id}",method = RequestMethod.GET)
        public  Account getAccountById(@PathVariable("id") int id){
            return accountService.findAccountById(id);
        }
    
        @RequestMapping(value = "/{id}",method = RequestMethod.PUT)
        public  String updateAccount(@PathVariable("id")int id , @RequestParam(value = "name",required = true)String name,
        @RequestParam(value = "money" ,required = true)double money){
            Account account=new Account();
            account.setMoney(money);
            account.setName(name);
            account.setId(id);
            int t=accountService.update(account);
            if(t==1){
                return account.toString();
            }else {
                return "fail";
            }
        }
    
        @RequestMapping(value = "",method = RequestMethod.POST)
        public  String postAccount( @RequestParam(value = "name")String name,
                                     @RequestParam(value = "money" )double money){
            Account account=new Account();
            account.setMoney(money);
            account.setName(name);
            int t= accountService.add(account);
            if(t==1){
                return account.toString();
            }else {
                return "fail";
            }
    
        }
    
    }

可以通过postman来测试,具体的我已经全部测试通过,没有任何问题。注意restful构建api的风格。

源码下载:https://github.com/forezp/SpringBootLearning

参考资料

relational-data-access


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文