天天看點

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語句優化的筆記。

繼續閱讀