1、创建数据库、数据库表并插入数据
创建数据库springboot:
CREATE DATABASE springboot;
创建数据库表user:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
`user_name` varchar(100) DEFAULT NULL COMMENT '用户名',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO user VALUES (1, “chenmotong”, “123456”, “陈墨瞳”);
INSERT INTO user VALUES (2, “lumingfei”, “123456”, “路明非”);
INSERT INTO user VALUES (3, “chuzihang ”, “123456”, “楚子航”);
INSERT INTO user VALUES (4, “xiami”, “123456”, “夏弥”);
INSERT INTO user VALUES (5, “lijiatu”, “123456”, “李嘉图”);
INSERT INTO user VALUES (6, “huiliyi”, “123456”, “绘梨衣”);
INSERT INTO user VALUES (7, “lumingze”, “123456”, “路明泽”);
2、创建Maven项目:打包方式为JAR
设置项目的JDK编译版本
注意:SpringBoot必须JDK 1.8以上才支持,所以如果跟我一样创建完项目jdk的编译版本不符合的,就要进行配置!
一开始是1.5
在pom.xml中添加如下配置:
<!-- 编译环境 -->
<build>
<plugins>
<!-- 设置项目的JDK编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
保存,然后项目会报错,只需要 Maven >> Update Project 即可
查看结果
至此,项目初步创建完成。
3、在pom.xml中导入依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast</groupId>
<artifactId>Springboot_MyBatis_Annotation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 编译环境 -->
<build>
<plugins>
<!-- 设置项目的JDK编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<!-- 继承springboot的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
</parent>
<dependencies>
<!-- 加入springboot的web组件,版本随父工程的版本而定 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置springboot整合mybatis的启动器依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- 配置springboot中mysql驱动的启动器依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 配置springboot中test组件的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 配置单元测试的依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
4、准备SpringBoot的核心配置文件:application.properties
- 在src/main/resources目录下创建SpringBoot的核心配置文件:application.properties
- 数据库的连接参数等配置信息可以配置在其中。
#DB Parameter Configuration
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=dearest
5、创建SpringBoot的引导类:Application.java
- 我创建了cn.itcast的包,并在包下创建了SpringBoot的引导类:Application.java
- 由于引导类启动的时候,会自动扫描自己所在的包及其子包,因此,后面创建的所有类,基本都要在cn.itcast包或者其子包下!!!切记!!!
package cn.itcast;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot的引导类
* @author JimRestaurant
* 注解说明:
* @SpringBootApplication 用于指定某个类为SpringBoot的引导类
* @MapperScan 用于指定引导类启动时要扫描的MyBatis的mapper接口所在的包
* 如果这里不指定,则每个Mapper接口上都需要使用 @Mapper 注解
*/
@SpringBootApplication
@MapperScan(value = { "cn.itcast.mapper" })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6、创建实体类User
package cn.itcast.entity;
/**
* 用户的实体类
* @author JimRestaurant
*/
public class User {
private Long id;
private String username;
private String password;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", name=" + name + "]";
}
}
7、创建Mapper接口
package cn.itcast.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import cn.itcast.entity.User;
/**
* 用户的持久层接口
* 持久层接口原本需要用@Mapper注解来注明该类为持久层接口类
* 但因为我们在引导类中用@MapperScan注解批量扫描了当前包
* 所以就不需要添加@Mapper注解了
* @author JimRestaurant
*/
public interface UserMapper {
/**
* 查询所有用户
* @return
*/
@Select(value = { "SELECT * FROM user" })
@Results(value = {
@Result(column = "id", property = "id", javaType = Long.class),
@Result(column = "user_name", property = "username", javaType = String.class),
@Result(column = "password", property = "password", javaType = String.class),
@Result(column = "name", property = "name", javaType = String.class)
})
List<User> findAll();
/**
* 按姓名查询用户
* @param name
* @return
*/
@Select(value = { "SELECT * FROM user WHERE name LIKE '%${name}%'" })
@Results(value = {
@Result(column = "id", property = "id", javaType = Long.class),
@Result(column = "user_name", property = "username", javaType = String.class),
@Result(column = "password", property = "password", javaType = String.class),
@Result(column = "name", property = "name", javaType = String.class)
})
List<User> findUserByName(String name);
/**
* 按用户id查询用户
* @param id
* @return
*/
@Select(value = { "SELECT * FROM user WHERE id = #{id}" })
User findUserById(Long id);
/**
* 保存用户
* @param user
*/
@Insert(value = { "INSERT INTO user (id, user_name, password, name) VALUES (#{id}, #{username}, #{password}, #{name})" })
void saveUser(User user);
/**
* 更新用户
* @param user
*/
@Update(value = { "UPDATE user SET user_name = #{username}, password = #{password}, name = #{name} WHERE id = #{id}" })
void updateUser(User user);
/**
* 删除用户
* @param id
*/
@Delete(value = { "DELETE FROM user WHERE id = #{id}" })
void deleteUser(Long id);
}
8、创建Mapper接口的测试类
package cn.itcast.mapper;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.itcast.Application;
import cn.itcast.entity.User;
/**
* Mapper接口的测试类
* @author JimRestaurant
*/
@RunWith(value = SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { Application.class })
public class UserMapperTest {
@Resource
private UserMapper userMapper;
/**
* 测试查询所有用户
*/
@Test
public void testFindAll() {
List<User> list = userMapper.findAll();
for(User user : list) {
System.out.println(user);
}
}
/**
* 测试按姓名查询用户
*/
@Test
public void testFindUserByName() {
List<User> list = userMapper.findUserByName("路");
for(User user : list) {
System.out.println(user);
}
}
/**
* 测试按id查询用户
*/
@Test
public void testFindUserById() {
User user = userMapper.findUserById(1L);
System.out.println(user);
}
/**
* 测试保存用户
*/
@Test
public void testSaveUser() {
User user = new User();
user.setId(8L);
user.setUsername("fengeer");
user.setPassword("654321");
user.setName("芬格尔");
userMapper.saveUser(user);
}
/**
* 测试更新用户
*/
@Test
public void testUpdateUser() {
User user = userMapper.findUserById(8L);
user.setUsername("angre");
user.setName("昂热");
userMapper.updateUser(user);
}
/**
* 测试删除用户
*/
@Test
public void testDeleteUser() {
userMapper.deleteUser(8L);
}
}
9、结果显示
测试查询所有用户
-
测试按姓名查询用户
-
仔细看我的SQL语句,按姓名查询用户,我使用的是模糊查询。
-
#{name} 和 ‘%${name}%’ 的区别:
- ${name} :明确指定某个值。
- ‘%${name}%’ :在SQL中,% 表示占位符,很明显,我前面只要是name LIKE ‘%${name}%’ ,那么就能查询用户姓名包含了我指定的name的所有用户。
至此,SpringBoot整合MyBatis(注解配置SQL)完成!
请查看我的其他博客,有关于SpringBoot整合MyBatis(XML文件配置SQL)的文件!