1. Data preparation
Create database
CREATE DATABASE springbootdata DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Create table t_article and insert related data
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...');
Create table t_comment and insert related data
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');
Two, create a project
Overall project structure
Introduce MySQL and MyBatis dependency launcher
<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>
Write entity classes Article and Comment
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;
}
}
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;
}
}
application.yml
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
Configuration class DataSourceConfig
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();
}
}
Third, use annotations to integrate MyBatis
ArticleMapper class
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);
}
CommentMapper class
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);
}
Four, test
MybatisApplicationTests test class
@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() {
}
}
#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