文章目录
- Mybatis
- Mybatis入门案例
- 1、创建User表,添加数据
- 2、创建模块,搭建框架
- 2.1 创建模块
- 注意:完善项目目录
- 2.2 导入坐标
- 2.3 编写 MyBatis 核心配置文件
- 2.4 编写sql映射文件
- 2.5 编码
- 3、解决SQL映射文件的警告提示
- Mapper代理开发
- 1、定义同名接口
- 2、设置namespace 并修改核心配置mapper
- 3、Mapper 接口中定义方法
- 4、编码
- MyBatis 核心配置文件
- Mybatis练习
- 1,配置文件实现CRUD
- 1.1 环境准备
Mybatis
官网:https://mybatis.org/mybatis-3/zh/index.html (支持中文)
Mybatis入门案例
1、创建User表,添加数据
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
gender char(1),
addr varchar(30)
);
INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
2、创建模块,搭建框架
2.1 创建模块
我的jdk比较高,是17,添加一下编译版本的配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
注意:完善项目目录
(不要纠结创建项目选择哪个骨架,不管哪个骨架,自己会创建各种缺失的目录才是王道)
缺少resources目录,右键main和test->new->Directory->双击唯一提示的那个
最后项目结构如下即可
最最后的项目结构先贴出来下:
2.2 导入坐标
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- mybatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- 添加slf4j日志api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!-- 添加logback-classic依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 添加logback-core依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<!-- alt+enter 自动导入的 你敢信 新版IDEA太强了 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>compile</scope>
</dependency>
第一次导入,需要时间下载默认jar包,不要着急,等一会儿。(必要时也可以手动刷新)
将logback.xml复制到src/main/resources目录
作用: 看彩色日志信息的
logback.xml
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="cn.whu" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
, 默认debug
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
2.3 编写 MyBatis 核心配置文件
核心配置文件作用: 替换连接信息 解决硬编码问题
右键main/resources-》new->File-》名称为:mybatis-config.xml
[官网去复制内容,再修改]
mybatis-config.xml
内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件--> <!--同在resources根目录下,导入就很方便-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
2.4 编写sql映射文件
命名规则:哪张表的就:
表名Mapper.xml
右键main/resources-》new->File-》名称为:mybatis-config.xml
[官网去复制内容,再修改]
UserMapper.xml
内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace: 名称空间 (后面细讲)
id: 保证唯一不重复即可
-->
<mapper namespace="test">
<select id="selectAll" resultType="cn.whu.pojo.User">
select * from tb_user
</select>
</mapper>
再去核心配置文件里加入对此映射文件的配置
<mappers>
<!--加载sql映射文件--> <!--同在resource根目录下,导入就很方便-->
<mapper resource="UserMapper.xml"/>
</mappers>
2.5 编码
- 1. 定义POJO类
创建类: cn.whu.pojo.User
User.java
// alt + 鼠标左键 整列编辑
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
}
之前忘记写lombok的依赖(坐标)了,我按alt+enter 竟然能自动导入,帮你在pom.xml里自动加上 dependency
-
- mybatis核心测试类
创建类:
cn.whu.demo.MybatisDemo
加载核心配置文件,获取 SqlSessionFactory 对象
获取 SqlSession 对象,执行 SQL 语句
释放资源
MybatisDemo.java
public static void main(String[] args) throws IOException {
//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml";//就在resources根目录下 写个名称就行了 maven结构多好呀
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 执行sql
List<User> users = sqlSession.selectList("test.selectAll");//参数: "命名空间.id"
//直接返回的就是 List<User> 也就是自动封装了结果集 也太爽了吧
System.out.println(users);
//4. 释放资源
sqlSession.close();
}
3、解决SQL映射文件的警告提示
产生原因:Idea和数据库没有建立连接,不识别表信息
解决方式:在Idea中配置MySQL数据库连接
解决后好处: IDEA的xml里写sql语句有提示了
(第一次连接可能提示你下载一些文件,下载就行了~)
IDEA有强大的写sql的能力,写sql语句甚至比navicat还要方便
新建查询窗口->强大的代码提示写代码->选中按左上角执行
代码提示太强大了:
选中后:ctrl+enter 也可以执行
想要mapper.xml里有sql提示,还得配置sql方言
若还是不行,则alt+enter大法-》下拉找到SQL即可
Mapper代理开发
使用 Mapper 代理方式完成入门案例
1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2、设置SQL映射文件的namespace属性为Mapper接口全限定名
3、在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
4、编码
1)通过 SqlSession 的 getMapper方法获取 Mapper接口的代理对象 2)调用对应方法完成sql的执行
1、定义同名接口
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
同一目录,并不是编译时在同一目录,否则就破坏了maven代码和资源文件分开管理的规范。
同一目录:只需要在resources目录下建立和XXXMapper.java同样名称的包结构即可,也就是保持二者(除后缀名外)全路径名一样即可,这样编译后,他们其实会在同一目录下的。
注意:resources下只能new Directory,不能new package,因此也就不能用.
了,得老老实实一层层新建,或者改用/
(易混淆的是显示上并没有不同,得到windows资源管理器下看他们是不是一样才行)
如下图所示:
右键clean再重新编译,去target目录下看,他们二者确实放在一起
2、设置namespace 并修改核心配置mapper
设置SQL映射文件的namespace属性为Mapper接口全限定名
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace: 名称空间 要写成接口全路径名了
id: 保证唯一不重复即可
-->
<mapper namespace="cn.whu.mapper.UserMapper">
<select id="selectAll" resultType="cn.whu.pojo.User">
select * from tb_user;
</select>
</mapper>
UserMapper.xml位置变了,核心mybatis-config.xml中得重新配置了
<mappers>
<!--加载sql映射文件-->
<mapper resource="cn/whu/mapper/UserMapper.xml"/>
</mappers>
<mappers>
<!--加载sql映射文件-->
<package name="cn.whu.mapper"/>
</mappers>
3、Mapper 接口中定义方法
在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致 (查询多列得用List<Type>)
UserMapper.java
package cn.whu.mapper;
import cn.whu.pojo.User;
import java.util.List;
public interface UserMapper {
//注意返回的是集合 因此不能简单写User,而应该写List<User>
List<User> selectAll();
}
4、编码
1)通过 SqlSession 的 getMapper方法获取 Mapper接口的代理对象
2)调用对应方法完成sql的执行
public static void main(String[] args) throws IOException {
//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml";//就在resources根目录下 写个名称就行了 maven结构多好呀
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 执行sql
// 不用了 不好 List<User> users = sqlSession.selectList("test.selectAll");//参数: "命名空间.id"
//3.1 获取UserMapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();//mybatis帮你实现了接口方法,sql语句有,返回值有,当然能实现啦
System.out.println(users);
//4. 释放资源
sqlSession.close();
}
MyBatis 核心配置文件
environments: 配置数据库连接环境信息。可以配置多个environment,通过default切换不同的environments
Mybatis练习
目标
- 能够使用映射配置文件实现CRUD操作
- 能够使用注解实现CRUD操作
1,配置文件实现CRUD
如上图所示产品原型,里面包含了品牌数据的 查询
、按条件查询
、添加
、删除
、批量删除
、修改
等功能,而这些功能其实就是对数据库表中的数据进行CRUD操作。接下来我们就使用Mybatis完成品牌数据的增删改查操作。以下是我们要完成功能列表:
- 查询
- 查询所有数据
- 查询详情
- 条件查询
- 添加
- 修改
- 修改全部字段
- 修改动态字段
- 删除
- 删除一个
- 批量删除
我们先将必要的环境准备一下。
1.1 环境准备
-
数据库表(tb_brand)及数据准备
-- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand ( -- id 主键 id int primary key auto_increment, -- 品牌名称 brand_name varchar(20), -- 企业名称 company_name varchar(20), -- 排序字段 ordered int, -- 描述信息 description varchar(100), -- 状态:0:禁用 1:启用 status int ); -- 添加数据 insert into tb_brand (brand_name, company_name, ordered, description, status) values ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0), ('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1), ('小米', '小米科技有限公司', 50, 'are you ok', 1);
-
实体类 Brand
在
com.itheima.pojo
包下创建 Brand 实体类。public class Brand { // id 主键 private Integer id; // 品牌名称 private String brandName; // 企业名称 private String companyName; // 排序字段 private Integer ordered; // 描述信息 private String description; // 状态:0:禁用 1:启用 private Integer status; //省略 setter and getter。自己写时要补全这部分代码 }
-
编写测试用例
测试代码需要在
test/java
目录下创建包及测试用例。项目结构如下: -
安装 MyBatisX 插件
-
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
-
主要功能
- XML映射配置文件 和 接口方法 间相互跳转
- 根据接口方法生成 statement
-
安装方式
点击
file
,选择settings
,就能看到如下图所示界面注意:安装完毕后需要重启IDEA
-
插件效果
红色头绳的表示映射配置文件,蓝色头绳的表示mapper接口。在mapper接口点击红色头绳的小鸟图标会自动跳转到对应的映射配置文件,在映射配置文件中点击蓝色头绳的小鸟图标会自动跳转到对应的mapper接口。也可以在mapper接口中定义方法,自动生成映射配置文件中的
statement
,如图所示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQ9Y11Xq-1677395829772)(assets/image-20210729165337223.png)]
-