天天看点

springboot 利用mybatis操作mysql数据库-常规流程

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');
           

插入记录后

springboot 利用mybatis操作mysql数据库-常规流程

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中配置一致,一般也这么配

springboot 利用mybatis操作mysql数据库-常规流程

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条记录
springboot 利用mybatis操作mysql数据库-常规流程
查询所有记录
springboot 利用mybatis操作mysql数据库-常规流程

6. 总结

这里是最基本的springboot使用mybatis操作数据库的流程,当然现在流行用mybatis-plus一键生成所需代码,但是真正做项目还是要对sql语句进行优化,仍要回到最基本的流程里来。后续会做一些sql语句优化的笔记。

继续阅读