博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 揭秘与实战(二) 数据存储篇 - MySQL
阅读量:5885 次
发布时间:2019-06-19

本文共 7337 字,大约阅读时间需要 24 分钟。

本文讲解 Spring Boot 基础下,如何使用 JDBC,配置数据源和通过 JdbcTemplate 编写数据访问。

原文地址:
博客地址:

环境依赖

修改 POM 文件,添加spring-boot-starter-jdbc依赖。

org.springframework.boot
spring-boot-starter-jdbc
复制代码

添加mysql依赖。

mysql
mysql-connector-java
5.1.35
com.alibaba
druid
1.0.14
复制代码

数据源

方案一 使用 Spring Boot 默认配置

使用 Spring Boot 默认配置,不需要在创建 dataSource 和 jdbcTemplate 的 Bean。

src/main/resources/application.properties 中配置数据源信息。

spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3307/springboot_dbspring.datasource.username=rootspring.datasource.password=root复制代码

方案二 手动创建

src/main/resources/config/source.properties 中配置数据源信息。

# mysqlsource.driverClassName = com.mysql.jdbc.Driversource.url = jdbc:mysql://localhost:3306/springboot_dbsource.username = rootsource.password = root复制代码

通过 Java Config 创建 dataSource 和jdbcTemplate。

@Configuration@EnableTransactionManagement@PropertySource(value = {
"classpath:config/source.properties"})public class BeanConfig { @Autowired private Environment env; @Bean(destroyMethod = "close") public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(env.getProperty("source.driverClassName").trim()); dataSource.setUrl(env.getProperty("source.url").trim()); dataSource.setUsername(env.getProperty("source.username").trim()); dataSource.setPassword(env.getProperty("source.password").trim()); return dataSource; } @Bean public JdbcTemplate jdbcTemplate() { JdbcTemplate jdbcTemplate = new JdbcTemplate(); jdbcTemplate.setDataSource(dataSource()); return jdbcTemplate; }}复制代码

脚本初始化

先初始化需要用到的SQL脚本。

CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot_db` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `springboot_db`;DROP TABLE IF EXISTS `t_author`;CREATE TABLE `t_author` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',  `real_name` varchar(32) NOT NULL COMMENT '用户名称',  `nick_name` varchar(32) NOT NULL COMMENT '用户匿名',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;复制代码

使用JdbcTemplate操作

实体对象

public class Author {    private Long id;    private String realName;    private String nickName;    // SET和GET方法}复制代码

DAO相关

public interface AuthorDao {    int add(Author author);    int update(Author author);    int delete(Long id);    Author findAuthor(Long id);    List
findAuthorList();}复制代码

我们来定义实现类,通过JdbcTemplate定义的数据访问操作。

@Repositorypublic class AuthorDaoImpl implements AuthorDao {    @Autowired    private JdbcTemplate jdbcTemplate;    @Override    public int add(Author author) {        return jdbcTemplate.update("insert into t_author(real_name, nick_name) values(?, ?)",                 author.getRealName(), author.getNickName());    }    @Override    public int update(Author author) {        return jdbcTemplate.update("update t_author set real_name = ?, nick_name = ? where id = ?",                 new Object[]{author.getRealName(), author.getNickName(), author.getId()});          }    @Override    public int delete(Long id) {        return jdbcTemplate.update("delete from t_author where id = ?", id);    }    @Override    public Author findAuthor(Long id) {        List
list = jdbcTemplate.query("select * from t_author where id = ?", new Object[]{id}, new BeanPropertyRowMapper
(Author.class)); if(null != list && list.size()>0){ Author auhtor = list.get(0); return auhtor; }else{ return null; } } @Override public List
findAuthorList() { List
list = jdbcTemplate.query("select * from t_author", new Object[]{}, new BeanPropertyRowMapper
(Author.class)); return list; }}复制代码

Service相关

public interface AuthorService {    int add(Author author);    int update(Author author);    int delete(Long id);    Author findAuthor(Long id);    List
findAuthorList();}复制代码

我们来定义实现类,Service层调用Dao层的方法,这个是典型的套路。

@Service("authorService")public class AuthorServiceImpl implements AuthorService {    @Autowired    private AuthorDao authorDao;    @Override    public int add(Author author) {        return this.authorDao.add(author);    }    @Override    public int update(Author author) {        return this.authorDao.update(author);          }    @Override    public int delete(Long id) {        return this.authorDao.delete(id);    }    @Override    public Author findAuthor(Long id) {        return this.authorDao.findAuthor(id);    }    @Override    public List
findAuthorList() { return this.authorDao.findAuthorList(); }}复制代码

Controller相关

为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。

@RestController@RequestMapping(value="/data/jdbc/author")public class AuthorController {  @Autowired  private AuthorService authorService;  /**   * 查询用户列表   */  @RequestMapping(method = RequestMethod.GET)  public Map
getAuthorList(HttpServletRequest request) { List
authorList = this.authorService.findAuthorList(); Map
param = new HashMap
(); param.put("total", authorList.size()); param.put("rows", authorList); return param; } /** * 查询用户信息 */ @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.GET) public Author getAuthor(@PathVariable Long userId, HttpServletRequest request) { Author author = this.authorService.findAuthor(userId); if(author == null){ throw new RuntimeException("查询错误"); } return author; } /** * 新增方法 */ @RequestMapping(method = RequestMethod.POST) public void add(@RequestBody JSONObject jsonObject) { String userId = jsonObject.getString("user_id"); String realName = jsonObject.getString("real_name"); String nickName = jsonObject.getString("nick_name"); Author author = new Author(); if (author!=null) { author.setId(Long.valueOf(userId)); } author.setRealName(realName); author.setNickName(nickName); try{ this.authorService.add(author); }catch(Exception e){ e.printStackTrace(); throw new RuntimeException("新增错误"); } } /** * 更新方法 */ @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.PUT) public void update(@PathVariable Long userId, @RequestBody JSONObject jsonObject) { Author author = this.authorService.findAuthor(userId); String realName = jsonObject.getString("real_name"); String nickName = jsonObject.getString("nick_name"); author.setRealName(realName); author.setNickName(nickName); try{ this.authorService.update(author); }catch(Exception e){ e.printStackTrace(); throw new RuntimeException("更新错误"); } } /** * 删除方法 */ @RequestMapping(value = "/{userId:\\d+}", method = RequestMethod.DELETE) public void delete(@PathVariable Long userId) { try{ this.authorService.delete(userId); }catch(Exception e){ throw new RuntimeException("删除错误"); } }}复制代码

总结

通过,上面这个简单的案例,我们发现 Spring Boot 仍然秉承了 Spring 框架的一贯套路,并简化 Spring 应用的初始搭建以及开发过程。

源代码

相关示例完整代码:

(完)

更多精彩文章,尽在「服务端思维」微信公众号!

转载地址:http://mllix.baihongyu.com/

你可能感兴趣的文章
LINUX下查看一个文件夹下所有文件的总大小
查看>>
Tomcat启动报Error listenerStart错误
查看>>
linux进程创建常用函数
查看>>
PMP备考总结_9.13
查看>>
案例:一候选人面试迟到丢机会
查看>>
我的友情链接
查看>>
Memcache的安装
查看>>
Perl Learning - 18 (unless, until, elsif, for)
查看>>
使用Heartbeat V1实现nfs作为共享存储的高可用
查看>>
linux 网站架设调优Apache(三)
查看>>
网页变化监控
查看>>
查看Linux版本,centos?redhat?
查看>>
【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法...
查看>>
在32位Win7下安装MySQL5.7.10安装配置过程
查看>>
squid透明代理和反向代理配置过程
查看>>
汽车常识全面介绍 - 传动系统
查看>>
vim攻略
查看>>
51CTO交流摘录(1):SOC的定义、适用性和组成
查看>>
关于数据包分析中Fragment offset(分片偏移)字段的十六进制码解读
查看>>
suse linux 安装无线网卡驱动
查看>>