目录
一、MyBatis快速入门
(一)打开MyBatis中文官网
(二)在工程中(pom.xml)导入MyBatis依赖
(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题
(四)创建SQL映射文件——统一管理SQL语句
(五)编写实现类
二、Mapper代理开发
(一)定义与SQL映射文件同名的Mapper接口
(二)设置SQL映射文件的namespace属性为Mapper接口全限定名
(三)在Mapper接口中定义方法
(四)编码实现
(五)SQL映射小技巧
三、MyBatis总结
四、MyBatis中sql语句的处理
(一)MyBatisX插件
(二)SQL映射文件中的sql片段
(三)结果集映射resultMap
(四)SQL传值
(五)sql语句中特殊字符处理
(六)自动提交事务
(七)返回添加数据的主键
(八)动态批量删除
(九)注解开发
一、MyBatis快速入门
(一)打开MyBatis中文官网
https://mybatis.net.cn/getting-started.htmlhttps://mybatis.net.cn/getting-started.html
(二)在工程中(pom.xml)导入MyBatis依赖
👇👇👇从官网导入:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题
👇👇👇从官网导入:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="✅✅✅"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql的映射文件 -->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
注意:1. 数据库的连接信息需要自己修改
2. 加载SQL映射文件见后文
(四)创建SQL映射文件——统一管理SQL语句
👇👇👇从官网导入:
例如,我们要操作user表,则创建对应的SQL映射文件UserMapper.xml,代码如下:
(注意:先创建对应的实体类Uesr)
<?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">
<!-- namespace名称空间 -->
<mapper namespace="test">
<!-- id是唯一标识,resultType是返回类型 -->
<select id="selectAll" resultType="com.itheima.pojo.User">
select *
from tb_user;
</select>
</mapper>
修改mybatis-config.xml文件的内容:
<mappers>
<!-- 加载sql的映射文件 -->
<mapper resource="userMapper.xml"/>
</mappers>
(五)编写实现类
创建MyBatisDemo类,代码如下:
/**
* MyBatis快速入门
*/
public class MyBatisDemo {
public static void main(String[] args) throws Exception {
//1.加载mybatis的核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
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");
System.out.println("users = " + users);
//4.释放 SqlSession
sqlSession.close();
}
}
结果:
二、Mapper代理开发
(一)定义与SQL映射文件同名的Mapper接口
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下。
1. 新建Mapper接口:UserMapper
2. 将该接口与SQL映射文件放在同一目录
初始的项目结构如图:
但xml文件一般默认放在resources文件夹中,不建议直接将其移动到接口UserMapper所在的文件夹中,我们可以这样做:
- 在resources文件夹中新建文件夹(没有包),输入:com/itheima/mapper
(注意:不要写成com.itheima.mapper,资源文件夹中不识别句点) - 将userMapper.xml移入该文件夹中,如下图:
(同时记得修改mybatis-config配置文件中的sql映射文件路径)
<mapper resource="com/itheima/mapper/userMapper.xml"/>
Maven执行编译compile后,就会看到两个文件在同一目录下了:
🎉🎉🎉在一起,在一起!!!🎉🎉🎉
(二)设置SQL映射文件的namespace属性为Mapper接口全限定名
在SQL映射文件UserMapper.xml文件中部分修改为:
<mapper namespace="com.itheima.mapper.UserMapper">
(三)在Mapper接口中定义方法
方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值的类型一致。
UserMapper接口中代码为:
public interface UserMapper {
List<User> selectAll();
}
(四)编码实现
新建一个实现类:MyBatisDemo2,代码如下:
public class MyBatisDemo2 {
public static void main(String[] args) throws Exception {
//1.加载mybatis的核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
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");
//3.获取UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
System.out.println("users = " + users);
//4.释放 SqlSession
sqlSession.close();
}
}
结果:
(五)SQL映射小技巧
假如数据库的实体类有很多,那么mybatis-config文件中加载sql映射文件的语句就会很长,类似这样:
<mappers>
<!-- 加载sql的映射文件 -->
<mapper resource="com/itheima/mapper/userMapper.xml"/>
<mapper resource="com/itheima/mapper/orderMapper.xml"/>
<mapper resource="com/itheima/mapper/detailsMapper.xml"/>
<mapper resource="com/itheima/mapper/foodMapper.xml"/>
...
...
</mappers>
如果我们的Mapper接口和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
<mappers>
<!-- 加载sql的映射文件 -->
<package name ="com.itheima.mapper"/>
</mappers>
三、MyBatis总结
【一般步骤】
- 编写接口方法:Mapper接口(xxxMapper.java)
(分析是否有参数,分析语句的返回结果类型) - 编写SQL语句:SQL映射文件(xxxMapper.xml)
- 执行方法,测试
四、MyBatis中sql语句的处理
(一)MyBatisX插件1.自动识别Mapper接口文件和与之对应的SQL映射文件,会显示为两个不同颜色的小鸟 2.点击小鸟会自动跳转到另一个文件的对应代码处 3.会对代码做进一步的智能化提示 |
(二)SQL映射文件中的sql片段 如果sql语句中某一句太长,且经常用到,可以将其写为sql片段,然后每次引用sql片段即可实现相同的功能。 |
(三)结果集映射resultMap解决实体类属性名和数据库表字段列名不对应的情况,比如数据库某列名为brand_name,实体类中为brandName,这是可以用resultMap实现映射。 |
(四)SQL传值参数占位符:#{ }——会将其替换为?,为了防止sql注入 一、单值传递 1.brandMapper.xml 2.测试类.java 二、多值传递 1.bandMapper.xml 2.brandMapper.java接口 三种方法: 3.测试类.java 三、动态SQL 即SQL语句写死了3个参数,但用户提供的参数个数会随时变化,有可能只输入一个参数就要查询,这就会涉及动态SQL 详见官网👇👇👇 1.brandMapper.xml 注意:如果只有companyName,sql会出现语法错误从而报错,myBatis这样处理:加入<where>字段(<set>同理),并且每一个条件语句都写入and。 |
(五)sql语句中特殊字符处理在xml中,sql语句的小于号<会出现报错,要这样处理,输入CDATA,在CDATA区域输入< |
(六)自动提交事务实现添加、修改sql语句时,默认自动提交事务是关闭的,需要我们手动提交一下,也可以直接在sqlSession中设置为true |
(七)返回添加数据的主键 |
(八)动态批量删除使用foreach |
(九)注解开发【适用于简单的SQL语句】 可以不在xml中写SQL语句,直接在Mapper接口中通过注解写明SQL语句,例如: |