本文介绍springboot通过jdbc访问关系型mysql,通过spring的JdbcTemplate去访问。
初始化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项目。通过引入这些依赖和配置一些基本信息,springboot就可以访问数据库类。
public class Account {private int id ;private String name ;private double money;....省略了getter. setter}
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 {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic int add(Account account) {return jdbcTemplate.update("insert into account(name, money) values(?, ?)",account.getName(),account.getMoney());}@Overridepublic int update(Account account) {return jdbcTemplate.update("UPDATE account SET NAME=? ,money=? WHERE id=?",account.getName(),account.getMoney(),account.getId());}@Overridepublic int delete(int id) {return jdbcTemplate.update("DELETE from TABLE account where id=?",id);}@Overridepublic 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;}}@Overridepublic 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;}}
}
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 {@AutowiredIAccountDAO accountDAO;@Overridepublic int add(Account account) {return accountDAO.add(account);}@Overridepublic int update(Account account) {return accountDAO.update(account);}@Overridepublic int delete(int id) {return accountDAO.delete(id);}@Overridepublic Account findAccountById(int id) {return accountDAO.findAccountById(id);}@Overridepublic List<Account> findAccountList() {return accountDAO.findAccountList();}
}
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 {@AutowiredIAccountService 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的风格。
java的jdbc连接数据库,源码下载:https://github.com/forezp/SpringBootLearning
relational-data-access
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态