1. 创建数据库
这里用SQLyog进行操作sql语句比较方便
CREATE DATABASE /*!32312 IF NOT EXISTS*/`myblog` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `myblog`;
/*Table structure for table `articles` */
DROP TABLE IF EXISTS `articles`;
CREATE TABLE `articles` (
`article_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`title` varchar(255) DEFAULT NULL COMMENT '文章标题',
`name` varchar(255) DEFAULT NULL,
`view_num` int(11) DEFAULT NULL COMMENT '浏览数',
`comment_num` int(11) DEFAULT NULL COMMENT '评论数',
`category_id` bigint(20) DEFAULT NULL COMMENT '文章分类ID',
`create_time` datetime DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`article_id`),
KEY `key_category_id` (`category_id`),
KEY `key_userId` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COMMENT='文章表';
/*Data for the table `articles` */
insert into `articles`(`article_id`,`user_id`,`title`,`name`,`view_num`,`comment_num`,`category_id`,`create_time`) values (1,0,'555','555.md',0,0,1,'2020-09-22 00:00:00'),(67,1,'123','123.md',0,0,1,'2020-09-29 09:07:20'),(68,1,'555','555.md',0,0,1,'2020-09-29 09:07:20'),(69,1,'ddd','ddd.md',0,0,1,'2020-09-29 09:07:20'),(70,1,'new','new.md',0,0,1,'2020-09-29 09:07:20'),(71,1,'redis安装','redis安装.md',0,0,1,'2020-09-29 09:07:20'),(72,1,'SecureCRT连接虚拟机中的Linux系统(ssh方式)','SecureCRT连接虚拟机中的Linux系统(ssh方式).md',0,0,1,'2020-09-29 09:07:20'),(73,1,'SpringCloud学习','SpringCloud学习.md',0,0,1,'2020-09-29 09:07:20'),(74,1,'springcloud工程实例','springcloud工程实例.md',0,0,1,'2020-09-29 09:07:20'),(75,1,'开源框架EL-ADMIN开发自己的 web应用(1)-初始化并启动EL-ADMIN','开源框架EL-ADMIN开发自己的 web应用(1)-初始化并启动EL-ADMIN.md',0,0,1,'2020-09-29 09:07:20'),(76,1,'挑战世界的“自由主义宅男”——linux之父林纳斯·托瓦兹 - 副本','挑战世界的“自由主义宅男”——linux之父林纳斯·托瓦兹 - 副本.md',0,0,1,'2020-09-29 09:07:20'),(77,1,'测试','测试.md',0,0,1,'2020-09-29 09:07:20'),(78,1,'淘宝革命的启示录','淘宝革命的启示录.md',0,0,1,'2020-09-29 09:07:20'),(79,1,'黑客帝国影评','黑客帝国影评.md',0,0,1,'2020-09-29 09:07:20');
插入记录后
2. pom文件引入相应依赖
主要引入了mysql连接、druid、mybatis三个相应依赖,其他springboot相关依赖请自行引入
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--druid-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
<!--springboot-start-->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
3. application.yml配置
这里主要注意datasource中的url配置(注意时区),mybatis相关文件位置配置
#端口号设置
server:
port: 4000
#spring配置
spring:
datasource:
#注意指定时区
url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis配置
#mybatis配置
mybatis:
#config-location与configuration不能共存,只能保留一个,不然会报错
#config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
type-aliases-package: com.xinxin.pojo
#开启驼峰命名,不然article_id与articleId对不上
configuration:
map-underscore-to-camel-case: true
4. 创建目录结构
注意mybatis文件夹与相应文件的位置与application.yml中配置一致,一般也这么配
4.1 pojo创建
对应数据库进行创建,没什么说的
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Article implements Serializable {
private Long articleId;
private Long userId=1l ;
private String title;
private String name;
private Integer viewNum=0 ;
private Integer commentNum=0 ;
private long categoryId ;
private Timestamp createTime;
}
4.2 dao层创建
@Mapper
@Repository
public interface ArticleDao {
//查询所有文章
public List<Article> queryAll();
//根据id查询文章
public Article queryById(long id);
//添加文章
public Boolean addArticle(Article article);
}
4.3 servcie层创建
ArticleService
public interface ArticleService {
//查询所有文章
public List<Article> queryAll();
//根据id查询文章
public Article queryById(long id);
//添加文章
public Boolean addArticle(Article article);
}
ArticleServiceImpl
@Service
@Transactional
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleDao articleDao;
@Override
public List<Article> queryAll() {
return articleDao.queryAll();
}
@Override
public Article queryById(long id) {
return articleDao.queryById(id);
}
@Override
public Boolean addArticle(Article article) {
return articleDao.addArticle(article);
}
}
注意加上@Transactional注解
4.4 ArticleMapper.xml
这里主要写sql语句,建议先在SQLyog中自己测一遍,做大项目,一般都要自己写sql语句。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--查官网https://mybatis.org/mybatis-3/zh/getting-started.html-->
<mapper namespace="com.xinxin.dao.ArticleDao">
<select id="queryAll" resultType="Article">
select * from articles
</select>
<select id="queryById" parameterType="Long" resultType="Article">
select * from articles where article_id = #{articleId}
</select>
<insert id="addArticle" parameterType="Article">
insert into articles
(user_id,title,name,view_num,comment_num,category_id,create_time)
-- 注意这里与pojo中的参数名相对应,不要搞错了
VALUES(#{userId},#{title},#{name},#{viewNum},#{commentNum},#{categoryId},#{createTime})
</insert>
</mapper>
4.5 controller层
@RestController
public class ArticleController {
@Autowired
private ArticleService articleService;
//查询所有
@GetMapping("/api/queryAll")
public Object queryAll(){
return articleService.queryAll();
}
//根据id查询
@GetMapping("api/queryById/{id}")
public Object queryById(@PathVariable("id") long id){
return articleService.queryById(id);
}
//增加article
@PostMapping("api/addArticle")
public Boolean addAritcle(Article article){
return articleService.addArticle(article);
}
}
5 检测
这里只做了增查的检测,其他更新与删除操作按照上述流程同样进行设置。
查询1条记录
查询所有记录
6. 总结
这里是最基本的springboot使用mybatis操作数据库的流程,当然现在流行用mybatis-plus一键生成所需代码,但是真正做项目还是要对sql语句进行优化,仍要回到最基本的流程里来。后续会做一些sql语句优化的笔记。