使用MyBatis
1、创建数据库、表
CREATE DATABASE mybatis; USE mybatis; CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) DEFAULT NULL, `author` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
2、新建SpringBoot项目
- 使用Spring Initializer:
- 填写项目相关信息:
- 添加部分依赖:
- 项目保存路径等信息:
- 项目结构:
- 自动导入依赖:
手动添加druid数据源(pom.xml):
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
3、MyBatis基础配置
数据库连接信息(application.yaml):
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root
MyBatis基本配置:
- 开启实体类与数据库名字按驼峰式相互匹配。
- 配置Mapper.xml文件所在的目录。
mybatis: configuration: map-underscore-to-camel-case: true mapper-locations: classpath:/mapper/*.xml
在启动类中,配置MapperScan,扫描该包下的所有接口作为DAO:
package com.xianhuii; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.xianhuii.mapper") @SpringBootApplication public class SpringbootMybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMybatisApplication.class, args); } }
4、实体类
package com.xianhuii.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Book { private Integer id; private String name; private String author; }
5、DAO
Mapper接口:
package com.xianhuii.mapper; import com.xianhuii.entity.Book; import java.util.List; public interface BookMapper { Integer addBook(Book book); Integer deleteBookById(Integer id); Integer updateBookById(Book book); Book getBookById(Integer id); List<Book> getAllBooks(); }
Mapper配置文件:
<?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"> <mapper namespace="com.xianhuii.mapper.BookMapper"> <!--Integer addBook(Book book)--> <insert id="addBook" parameterType="com.xianhuii.entity.Book"> insert into book (name, author) values (#{name}, #{author}) </insert> <!--Integer deleteBookById(Integer id)--> <delete id="deleteBookById" parameterType="int"> delete from book where id = #{id} </delete> <!--Integer updateBookById(Book book)--> <update id="updateBookById" parameterType="com.xianhuii.entity.Book"> update book set name = #{name}, author = #{author} where id = #{id} </update> <!--Book getBookById(Integer id)--> <select id="getBookById" parameterType="int" resultType="com.xianhuii.entity.Book"> select * from book where id = #{id} </select> <!--List<Book> getAllBooks()--> <select id="getAllBooks" resultType="com.xianhuii.entity.Book"> select * from book </select> </mapper>
6、测试
package com.xianhuii.mapper; import com.xianhuii.SpringbootMybatisApplication; import com.xianhuii.entity.Book; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.security.RunAs; import java.util.Iterator; import java.util.List; import static org.junit.jupiter.api.Assertions.*; // 不加这个注解会报:java.lang.NullPointerException @SpringBootTest(classes = SpringbootMybatisApplication.class) class BookMapperTest { @Autowired private BookMapper bookMapper; @Test void addBook() { Book book1 = new Book(null, "三国演义", "罗贯中"); Book book2 = new Book(null, "水浒传", "施耐庵"); Book book3 = new Book(null, "西游记", "吴承恩"); Book book4 = new Book(null, "红楼梦", "曹雪芹"); bookMapper.addBook(book1); bookMapper.addBook(book2); bookMapper.addBook(book3); bookMapper.addBook(book4); } @Test void deleteBookById() { System.out.println(bookMapper.deleteBookById(1)); } @Test void updateBookById() { Book book = new Book(2, "水浒传2", "施耐庵2"); System.out.println(bookMapper.updateBookById(book)); } @Test void getBookById() { Book book = bookMapper.getBookById(1); System.out.println(book.getId() + "-" + book.getName() + "-" + book.getAuthor()); } @Test void getAllBooks() { List<Book> books = bookMapper.getAllBooks(); Iterator<Book> iterator = books.iterator(); while (iterator.hasNext()) { Book book = iterator.next(); System.out.println(book.getId() + "-" + book.getName() + "-" + book.getAuthor()); } } }
7、项目结构