Spring Boot uses annotations to integrate MyBatis

1. Data preparation

Create database

CREATE DATABASE springbootdata DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Create table t_article and insert related data

Copy code

CREATE TABLE `t_article` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id',
  `title` varchar(200) DEFAULT NULL COMMENT '文章标题',
  `content` longtext COMMENT '文章内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `t_article` VALUES ('1','Introduction to Spring Boot Basics','From entry to proficient explanation...');
INSERT INTO `t_article` VALUES ('2','Introduction to Spring Cloud Basics','From Beginner to proficient explanation...');

Copy code

Create table t_comment and insert related data

Copy code

  CREATE TABLE `t_comment` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `content` longtext COMMENT '评论内容',
  `author` varchar(200) DEFAULT NULL COMMENT '评论作者',
  `a_id` int(20) DEFAULT NULL COMMENT '关联的文章id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `t_comment` VALUES ('1','Very complete and detailed','
Running snail', '1'); INSERT INTO `t_comment` VALUES ('2','Like one','tom', '1');
INSERT INTO `t_comment` VALUES ('3','very detailed','kitty', '1');
INSERT INTO `t_comment` VALUES ('4','very good, very detailed', ' Zhang San', '1');
INSERT INTO `t_comment` VALUES ('5','Very good','Zhang Yang', '2');

Copy code

Two, create a project

Overall project structure

Introduce MySQL and MyBatis dependency launcher

Copy code

    
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

Copy code

Write entity classes Article and Comment

Copy code

package com.uos.databases.domain;

/**
 * 评论实体类
 */
public class Comment {
    private Integer id;
    private String content;
    private String author;
    private Integer aId;

    @Override
    public String toString() {
        return "Comment{" +
                "id=" + id +
                ", content='" + content + '\'' +
                ", author='" + author + '\'' +
                ", aId=" + aId +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Integer getaId() {
        return aId;
    }

    public void setaId(Integer aId) {
        this.aId = aId;
    }
}

Copy code

Copy code

package com.uos.databases.domain;

import java.util.List;

/**
 * 文章类
 */
public class Article {
    private Integer id;
    private String title;
    private String content;
    private List<Comment> commentList;

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", commentList=" + commentList +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public List<Comment> getCommentList() {
        return commentList;
    }

    public void setCommentList(List<Comment> commentList) {
        this.commentList = commentList;
    }
}

Copy code

application.yml

Copy code

spring:
  datasource:
    url: jdbc:mysql://192.168.41.132:3306/springbootdata?serverTimezone=UTC
    username: root
    password: 1
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 20
      min-idle: 10
      max-active: 100
      driver: com.mysql.jdbc.Driver

Copy code

Configuration class DataSourceConfig

Copy code

package com.uos.databases.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource getDruid(){
        return new DruidDataSource();
    }
}

Copy code

Third, use annotations to integrate MyBatis

ArticleMapper class

Copy code

package com.uos.databases.mapper;


import com.uos.databases.domain.Article;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;


@Mapper
public interface ArticleMapper {
    @Select("SELECT * FROM t_article WHERE id =#{id}")
    public Article selectArticle(Integer id);

    public int updateArticle(Article article);

}

Copy code

CommentMapper class

Copy code

package com.uos.databases.mapper;


import com.uos.databases.domain.Comment;
import org.apache.ibatis.annotations.*;


@Mapper
public interface CommentMapper {
    @Select("SELECT * FROM t_comment WHERE id =#{id}")
    public Comment findById(Integer id);

    @Insert("INSERT INTO t_comment(content,author,a_id) " +
            "values (#{content},#{author},#{aId})")
    public int insertComment(Comment comment);

    @Update("UPDATE t_comment SET content=#{content} WHERE id=#{id}")
    public int updateComment(Comment comment);

    @Delete("DELETE FROM t_comment WHERE id=#{id}")
    public int deleteComment(Integer id);

}

Copy code

Four, test

MybatisApplicationTests test class

Copy code

@SpringBootTest
class MybatisApplicationTests {

    @Autowired
    private CommentMapper commentMapper;

    @Test
    public void selectComment() {
        Comment comment = commentMapper.findById(2);
        System.out.println(comment);
    }

    @Autowired
    private ArticleMapper articleMapper;

    @Test
    public void selectArticle() {
        Article article = articleMapper.selectArticle(2);
        System.out.println(article);
    }


    @Test
    void contextLoads() {
    }

}

Copy code


#Open camel case name matching mapping mybatis.configuration.map-underscore-to-camel-case=true

 

 *The camel case naming method is used in the entity class Comment to design the a_id field in the t_comment table as the aId attribute, so it cannot be mapped to the result correctly. After the camel case name matching mapping rule is turned on, all the data in the t_comment table queried are successfully mapped to the corresponding Comment entity class objects.

 * You need to add @Mapper annotations in the MyBatis interface file. If you write too many Mapper interfaces, you can add @MapperScan("XXX") annotations to the project startup class [need to specify the specific package name that needs to be scanned] to avoid one by one The trouble caused by adding @Mapper annotation

 * After adding the @Mapper annotation, this interface will generate the corresponding implementation class at compile time. It should be noted that the method with the same name cannot be defined in this interface, because the same id will be generated, which means that this interface does not support re Contained


* For multiple parameters, each parameter must be annotated with @Param, otherwise the corresponding parameter will not be found and an error will be reported     
    public User login(@Param("name")String name, @Param("pwd) ")String pwd);

Category:  Spring Boot

Guess you like

Origin blog.csdn.net/suixinsuoyu12519/article/details/112980343