SpingBoot二——引入MySql数据库
◆版权声明:本文出自胖喵~的博客,转载必须注明出处。
转载请注明出处:https://www.cnblogs.com/by-dream/p/10486117.html
搭起一个简单的服务后,接下来我们加入数据库,通过服务去读取DB中的数据进行显示。顺便将模块划分再清晰一些。
不说太多了,直接说代码吧。
1、pom.xml的dependencies中入依赖
<!-- mybatis 数据库 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency> <!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
注意这里我们引入mybatis,所有和数据库之间的操作都借助它来完成。
2、resource中加入数据库配置和mapper的配置:
# 数据库配置
spring.datasource.url=jdbc:mysql://**.**.**.**:3306/rap?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver # mybatis 配置.xml文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
第一列需要配置你的ip地址和端口,3306后面的第一个斜线后跟数据库名(也就是这里的rap)
这里需要提前登录到服务上进行了建表:
mysql -u root -p 后输入密码进入,创建数据库:
create DATABASE rap;
然后建表:
create table user (
id bigint unsigned not null auto_increment comment '主键',
gmt_create datetime not null comment '创建时间',
gmt_modified datetime not null comment '修改时间',
nick varchar(1024) not null comment '名字',
age bigint unsigned not null comment '年龄',
primary key (id)
) default charset=utf8 comment='这是一张用户表';
插入一条数据:
insert into user (nick, age) values ("bryan", 27);
建表完成后。我们还需要开启数据库远程链接。首先运行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' ;
这里的123456为你给新增权限用户设置的密码,%代表所有主机,也可以具体到你的主机ip地址
接着运行 flush privileges; 这一步不可获取,否则不会成功。此时我们在本地远程登录到服务器上看下是否可行。

3、在resource中加入创建mapper:

**-mapper.xml 里面的内容有点像写sql一样,这里我们先实现一个findById的方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.bryan.demo.dal.dao.UserMapper">
<resultMap id="userMap" type="com.bryan.demo.dal.entity.UserDO">
<result property="id" column="id"/>
<result property="nick" column="nick"/>
<result property="age" column="age"/>
</resultMap> <sql id="columns" >
id, nick, age
</sql> <select id="findById" parameterType="java.lang.Long" resultMap="userMap">
SELECT
<include refid="columns" />
FROM user
WHERE id = #{id}
</select>
</mapper>
4、对应的我们需要建一个mapper的类和其对应的数据类do类:

package com.bryan.demo.dal.dao; import com.bryan.demo.dal.entity.UserDO;
import org.apache.ibatis.annotations.Mapper; @Mapper
public interface UserMapper { public UserDO findById(Long id);
}
package com.bryan.demo.dal.entity;
import java.io.Serializable;
public class UserDO implements Serializable {
/**
* 主键
*/
private Long id;
private String nick;
private int age;
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
UserMapper类的作用就是提供数据库操作的方法,UserDO类的作用就是将数据库中的数据转化为Java数据类型;
5、接下来Service层的实现:

定义接口:
package com.bryan.demo.service;
import com.bryan.demo.dal.entity.UserDO;
public interface UserService {
UserDO findById(Long id);
}
接口的实现:
package com.bryan.demo.service.impl; import com.bryan.demo.dal.dao.UserMapper;
import com.bryan.demo.dal.entity.UserDO;
import com.bryan.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserServiceImpl implements UserService { @Autowired
public UserMapper userMapper; @Override
public UserDO findById(Long id) { UserDO userDO = userMapper.findById(1L);
return userDO;
}
}
6、最终Controller层直接调用service的接口返回:
@RestController
public class MachineInfoController { @Autowired
UserService userService; @RequestMapping("/")
String homePage() {
UserDO userDO = userService.findById(1L);
return "name:"+userDO.getNick() + " age:"+userDO.getAge();
}
}
此时我们在浏览器情况,查看:

好,看下整体的目录结构:

由于本节只说数据库,所以整体的服务端的架构还没有特别的完善,下一节我会针对整体服务端架构进行分层,然后详细说明。
代码我传到git上:https://github.com/bryanfeng/springboot-demo.git
SpingBoot二——引入MySql数据库的更多相关文章
- 数据库学习笔记(二)MySQL数据库进阶
MySQL 进阶 关于连表 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 #上下连表示例: select sid, ...
- 我与solr(二)--导入mysql数据库
关于solr的搭建详见上一篇的随笔. 步骤1: 在webapps中solrhome下新建一个文件夹名字叫做mynode(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联.)然后在mynod ...
- 二、mysql数据库之基本操作和存储引擎
一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...
- python笔记二(mysql数据库操作)
python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin ...
- 阿里云数据库配置学习笔记(二):下载并配置MySQL数据库
参考资料:阿里云官方文档 2018-02-20 一.MySQL数据库的下载 在Ubuntu环境下安装MySQL数据库十分简单 在命令行中输入 sudo apt-get update(更新软件源,预防出 ...
- MySQL数据库基础详解(非原创)
文章大纲 一.数据库简介二.Mysql数据库简介三.Mysql安装与服务启动(Windows版本)四.Mysql图形化工具五.Mysql存储引擎精讲六.Mysql数据类型介绍七.Mysql主要专业名称 ...
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- 【阿里巴巴Java开发手册1.7.0(嵩山版)】编程规约&MySQL 数据库规约
阿里巴巴Java开发手册1.7.0(嵩山版) 一.编程规约 (一)命名风格 所有命名不得以下划线和$开始和结束. 所有命名不得以拼音或拼音英文混合. 类名使用UpperCamelCase风格. 方法名 ...
- mysql数据库及oracle数据库的定时备份
一.oracle数据库备份bat文件 @echo off md "%date:~0,10%" cd "%date:~0,10%" echo exp 用户名/密码 ...
随机推荐
- git如何列出最简短的commit(tag和head名都不显示)
答:git log --oneline --no-decorate --oneline: 将commit显示成一行 --no-decorate: 将tag和head名隐藏掉
- linux下获取本机的获取内网和外网地址
1.获取内网地址(私有地址) ifconfig -a 2.获取外网地址(公网地址) curl members.3322.org/dyndns/getip
- 论文笔记——PRUNING FILTERS FOR EFFICIENT CONVNETS
论文地址:https://arxiv.org/abs/1608.08710 主要思想 这篇文章主要讲了对filters的裁剪,裁剪方法是计算L1范数,然后裁剪掉较少的,多少取决于加速比. 实现效果 V ...
- UVa 11100 旅行2007
https://vjudge.net/problem/UVA-11100 题意: 给定n个正整数,把它们划分成尽量少的严格递增序列,尽量均分. 思路: 因为必须严格递增,所以先统计每个数字出现的次数, ...
- UVa 11134 传说中的车
https://vjudge.net/problem/UVA-11134 题意:在n*n的棋盘上放n个车,使得任意两个车不相互攻击,且第i个车在一个给定的矩形Ri之内.用4个整数xli,yli,xri ...
- 关于C++中的友元函数的总结
1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率.如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数.具 ...
- pandas demo 示例
#构造 import pandas as pd import pickle import numpy as np dates=pd.date_range() df = pd.DataFrame(np. ...
- webdriver 的三种等待方式
1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriverfrom selenium.webdriver ...
- YOLO V2论文理解
概述 YOLO(You Only Look Once: Unified, Real-Time Object Detection)从v1版本进化到了v2版本,作者在darknet主页先行一步放出源代码, ...
- C++指针总结
在C++中通过动态创建的对象,我们只能获得一个指针,并通过指针控制它.指针是存放对象的内存地址值,更准确的描述是对象的起始地址值.每一个指针都有一个相关的类型,不同数据类型的指针之间的区别不在指针的描 ...