文章目录
- 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 核心配置文件
- 1、配置多个environment
- 2、mappers下package包扫描
- 3、typeAliases取别名+package包扫描
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 核心配置文件
mybatis-config.xml 核心配置文件里一些重要配置
1、配置多个environment
environments: 配置数据库连接环境信息。可以配置多个environment,通过default切换不同的environments
2、mappers下package包扫描
直接就扫描到了包(cn.whu.mapper)下所有的XXXMapper.xml映射文件, 不用一个个配置了
<mappers>
<!--加载sql映射文件-->
<package name="cn.whu.mapper"/>
</mappers>
3、typeAliases取别名+package包扫描
<typeAliases>
<package name="cn.whu.pojo"/>
</typeAliases>
相当于给cn.whu.pojo包下所有的类取了别名,就是类名,其不区分大小写
比如: cn.whu.pojo.User 就可以写User或者user或者USER或者USer…了
然后映射配置文件UserMapper.xml里可以简单配置了
<mapper namespace="cn.whu.mapper.UserMapper">
<select id="selectAll" resultType="User"> /*resultType="cn.whu.pojo.User"*/
select * from tb_user;
</select>
</mapper>
其实所有的配置,官网都有很详细的讲解,结合课程所学的全局+官网文档的查询,可以学得很好了
https://mybatis.org/mybatis-3/zh/configuration.htmlhttps://mybatis.org/mybatis-3/zh/configuration.html#typeAliases