什么是MyBatis
MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。而持久层指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的,简单来说就是MyBatis就是更简单的操作和读取数据库的
MyBatis入门
准备工作
项目的创建
创建springboot工程,并导⼊ mybatis的起步依赖、mysql的驱动包
创建好后,打开pom.xml文件就可以看到Mybatis依赖包和-mysql驱动包,自己后面加也行
<!--Mybatis 依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
数据准备
创建用户表,并创建对应的实体类UserInfo
创建数据库
--创建数据库
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
USE mybatis_test;
-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`password` VARCHAR ( 127 ) NOT NULL,
`age` TINYINT ( 4 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
`phone` VARCHAR ( 15 ) DEFAULT NULL,
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
-- 添加⽤⼾信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
创建对应的实体类UserInfo
import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer gender;
private String phone;
private Integer deleteFlag;
private Date createTime;
private Date updateTime;
}
配置数据库连接
Mybatis中要连接数据库,需要数据库相关参数配置,1.MySQL驱动类(刚创建项目的时候就已经配置了)2.登录名 3.密码 4.数据库连接字符串。如下在resources下创建application.yml⽂件
配置内容如下
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: '123456' #为自己数据库的用户名和密码
driver-class-name: com.mysql.cj.jdbc.Driver
写持久层代码
在项目中创建持久层接口UserInfoXMlMapper,创建一个Mapper文件,在文件中创建接口UserInfoXMlMapper
上面划红框框的是本次练习所用到的文件,其余的是我做别的练习时用到的,不用创建
添加mapper接口
数据持久层的接口定义
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserInfoXMlMapper {
List<UserInfo> select1();
}
@Mapper注解:表⽰是MyBatis中的Mapper接⼝,程序运⾏时, 框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
添加UserInfoXMLMapper.xml
数据持久层的实现,MyBatis 的固定 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.demo.mapper.UserInfoMapper">
</mapper>
路径为之前创的持久层代码接口的路径
创建UserInfoXMLMapper.xml,路径参考yml中的配置
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: '123456'
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
configuration: # 配置打印 MyBatis⽇志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true #配置驼峰⾃动转换
mapper-locations: classpath:mapper/*.xml
开始练习
查(select)
在接口中写查询的方法,如下
在数据持久层(UserInfoMapper.xml)写具体实现
<select>查询标签:是⽤来执⾏数据库的查询操作的
id :是和 Interface (接⼝)中定义的⽅法名称⼀样的,表⽰对接⼝的具体实现⽅法。
resultType :是返回的数据类型,也就是开头我们定义的实体类.
进行测试,如下会自动生成测试代码
运行代码如下
删(delete)
在这里给大家推荐一个插件,可以自动帮我们生成数据持久层(UserInfoMapper.xml)中的代码
使用如下
会在UserInfoMapper.xml 中,自动生成如下代码,sql代码还是要自己写
测试
运行结果如下
查看表中数据,发现删除成功
上述的练习中,主要是准备工作麻烦 了一点,增和改就不在演示了
映射
当我们关闭驼峰⾃动转换时,再运行select1时会发现
后半段的数据查询结果为null,
这是因为我们在创表的时候,表的字段名为小写,用 ’ -‘ 来分割,实体类使用的是驼峰命名,存在大写,如下
解决办法:1.开启驼峰自动转换 2. 在查询时候,给字段起别名 3.结果映射
这里我们只说一下映射
在.xml中写下结果映射
<resultMap id="BaseMap" type="com.example.mysqldemo.UserInfo">
<id column="id" property="id"></id>
<result column="delete_flag" property="deleteFlag"></result>
<result column="create_time" property="createTime"></result>
<result column="update_time" property="updateTime"></result>
</resultMap>
<select id="select1" resultMap="BaseMap">
select * from userinfo
</select>
在上述代码中
运行结果如下
上述是一些MyBatis的简单操作,等学会难的再和大家分享