文章目录
- 1、概述
- 1.1 基本概念
- 1.2 JDBC和MyBatis的区别
- 1.2.1 JDBC使用步骤
- 1.2.2 JDBC缺点
- 1.2.3 MyBatis优点
- 1.2.4 MyBatis缺点
- 2、入门案例
- 2.1 创建项目
- 2.2 设计数据库
- 2.3 编辑pom.xml
- 2.4 构建层级代码结构
- 2.5 编辑核心配置文件(application.yml)
- 2.6 创建主启动类(RunApp.java)
- 2.7 编辑pojo类(User.java)
- 2.8 编辑mapper接口
- 2.9 编辑mapper.xml配置文件(映射器)
- 2.10 编辑测试类
- 2.11 实现动态sql查询
- 2.12 实现修改操作
- 2.13 实现动态SQL的修改操作
- 2.14 利用注解实现增删改查操作
1、概述
1.1 基本概念
MyBatis是一款优秀的持久层框架,它支持简单的自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 pojo为数据库中的记录。
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它默认配置了很多框架的使用方式,也就是说Spring Boot 整合了所有的框架。
1.2 JDBC和MyBatis的区别
1.2.1 JDBC使用步骤
(1)导入jar包(存放了大量Java工具类的压缩包)————该jar包要与数据库版本匹配;
(2)注册驱动
(3)使用工具类,连接数据库 ————获取和数据库的连接;
(4)通过程序操作数据库 ————在程序中执行SQL语句;
(5)通过程序处理结果 ————数据库把结果返回给Java程序,Java程序再去解析结果。
(6)释放资源
1.2.2 JDBC缺点
(1)数据库连接的创建和释放频繁而造成系统资源浪费从而影响系统的性能;
(2)修改sql就要修改代码,系统不易维护;
1.2.3 MyBatis优点
(1)MyBatis内部整合了JDBC,简化了持久层开发;
(2)MyBatis可以自动的封装结果集的对象,满足ORM中的一个条件,所以将MyBatis称之为半自动化的ORM映射框架;
(3)MyBatis有缓存机制,一级缓存/二级缓存,提高用户的查询效率;
(4)MyBatis支持多种类型的数据库,整合简单。
1.2.4 MyBatis缺点
(1)实现数据的封装,resultMap封装复杂;
(2)针对于单表的CRUD的操作不够便捷,SQL都需要手写;
(3)个别的情况下二级缓存配置不生效。
2、入门案例
2.1 创建项目
创建Module
设置模块配置信息
2.2 设计数据库
创建数据库
创建表
CREATE TABLE user(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) not NULL,
sex varchar(10) not NULL,
age int(11) not NULL,
PRIMARY KEY (id)
) CHARSET=utf8;
添加数据
2.3 编辑pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>com.example</groupId>
<artifactId>spring_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--项目坐标:组ID、项目名、版本号
作用:
1、可以在本地仓库中定位项目
2、可以作为依赖项被其他项目引用 -->
<properties>
<!--指定JDK版本-->
<java.version>1.8</java.version>
<!--跳过测试类打包-->
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<!--“spring-boot-starter”是Spring的启动器。在内部已经将整合的配置写好了,拿来就可以使用-->
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--添加lombok的jar依赖包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--引入数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--springBoot数据库连接 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--spring整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
<!--build标签
springboot项目在打包部署发布时,需要依赖maven工具API
如果不添加该插件,则直接影响项目的发布
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.3</version>
</plugin>
</plugins>
</build>
</project>
2.4 构建层级代码结构
2.5 编辑核心配置文件(application.yml)
#端口配置
server:
port: 8090
#配置数据源
spring:
datasource:
#如果使用高版本驱动 则添加cj
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/qyx?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
#Spring整合Mybatis
mybatis:
#定义别名包
type-aliases-package: com.example.pojo
#导入映射文件(指定映射文件的路径)
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#打印日志
logging:
level:
com.example.mapper: debug
2.6 创建主启动类(RunApp.java)
package com.example;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.mapper")
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class,args);
}
}
2.7 编辑pojo类(User.java)
根据数据库中对应表中的字段名进行编辑
package com.example.pojo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
public class User implements Serializable {
private Integer id;
private String name;
private String sex;
private String age;
}
2.8 编辑mapper接口
以 “ 查询指定数据库中所有数据 ” 为例
package com.example.mapper;
import com.example.pojo.User;
import org.springframework.stereotype.Controller;
import java.util.List;
@Controller
public interface UserMapper {
//查询所有数据
List<User> getAll();
}
2.9 编辑mapper.xml配置文件(映射器)
<?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.example.mapper.UserMapper">
<!--查询所有数据-->
<select id="getAll" resultType="User">
select * from user
</select>
</mapper>
2.10 编辑测试类
package com.example;
import com.example.mapper.UserMapper;
import com.example.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class Test1 {
@Autowired
private UserMapper userMapper;
//查询所有数据
@Test
public void getAll(){
List<User> all = userMapper.getAll();
for (User user:all){
System.out.println(user);
}
}
}
运行结果
2.11 实现动态sql查询
1、在UserMapper接口中添加selectById方法;
2、在UserMapper配置文件中添加select元素,并添加具体的sql语句;
3、在Test1测试类中添加selectById测试方法。
运行结果
2.12 实现修改操作
1、在UserMapper接口中添加updateById方法;
2、在UserMapper配置文件中添加update元素,并添加具体的sql语句;
3、在Test1测试类中添加updateById测试方法。
运行结果
2.13 实现动态SQL的修改操作
1、在UserMapper接口中添加updateByName方法;
2、在UserMapper配置文件中添加update元素,并添加具体的sql语句;
3、在Test1测试类中添加updateByName测试方法。
运行结果
2.14 利用注解实现增删改查操作
使用方式:
在mapper接口中对应的业务方法前加对应的sql标签的注解,例如查询用注解@select(“sql语句”)。
package com.example.mapper;
import com.example.pojo.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Controller;
import java.util.List;
@Controller
public interface UserMapper {
//查询所有数据
@Select("select * from user")
List<User> getAll();
//根据id查询数据
@Select("select * from user where id = #{id}")
List<User> selectById(Integer id);
//修改数据
@Update("update user set sex='女' where id = 3")
int updateById();
//根据name修改数据
@Update("update user set sex=#{sex} where name=#{name}")
int updateByName(String sex,String name);
}
注意:
若数据库中的字段名和Java项目的实体类中的属性名不一致时,需要使用@Results注解;
@Results注解可以将查询结果集映射到实体类属性;
使用方式:写在@select(“sql语句”)注解和业务方法中间;
具体使用方式如下:
//查询所有数据
@Select("select * from user")
@Results({
@Result(column = "id" ,property = "id"),
@Result(column = "name" ,property = "name"),
@Result(column = "sex",property = "sex"),
@Result(column = "age",property = "age")
})
List<User> getAll();
当使用该注解的情况较多时,可以使用@ResultMap注解,提高代码的复用性;
具体使用方式如下:
//查询所有数据
@Select("select * from user")
@Results( id = "userMap" , value = {
@Result(column = "id" ,property = "id"),
@Result(column = "name" ,property = "name"),
@Result(column = "sex",property = "sex"),
@Result(column = "age",property = "age")
})
List<User> getAll();
//根据id查询数据
@Select("select * from user where id = #{id}")
@ResultMap("userMap")
List<User> selectById(Integer id);