目录
一、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语句中特殊字符处理
(六)自动提交事务
(七)返回添加数据的主键
(八)动态批量删除
(九)注解开发
https://mybatis.net.cn/getting-started.htmlhttps://mybatis.net.cn/getting-started.html
从官网导入:
org.mybatis
mybatis
x.x.x
从官网导入:
注意:1. 数据库的连接信息需要自己修改
2. 加载SQL映射文件见后文
从官网导入:
例如,我们要操作user表,则创建对应的SQL映射文件UserMapper.xml,代码如下:
(注意:先创建对应的实体类Uesr)
修改mybatis-config.xml文件的内容:
创建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 users = sqlSession.selectList("test.selectAll");
System.out.println("users = " + users);
//4.释放 SqlSession
sqlSession.close();
}
}
结果:
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下。
1. 新建Mapper接口:UserMapper
2. 将该接口与SQL映射文件放在同一目录
初始的项目结构如图:
但xml文件一般默认放在resources文件夹中,不建议直接将其移动到接口UserMapper所在的文件夹中,我们可以这样做:
(同时记得修改mybatis-config配置文件中的sql映射文件路径)
Maven执行编译compile后,就会看到两个文件在同一目录下了:
在一起,在一起!!!
在SQL映射文件UserMapper.xml文件中部分修改为:
方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值的类型一致。
UserMapper接口中代码为:
public interface UserMapper {
List 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 users = sqlSession.selectList("test.selectAll");
//3.获取UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List users = userMapper.selectAll();
System.out.println("users = " + users);
//4.释放 SqlSession
sqlSession.close();
}
}
结果:
假如数据库的实体类有很多,那么mybatis-config文件中加载sql映射文件的语句就会很长,类似这样:
...
...
如果我们的Mapper接口和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化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这样处理:加入 |
(五)sql语句中特殊字符处理在xml中,sql语句的小于号<会出现报错,要这样处理,输入CDATA,在CDATA区域输入< |
(六)自动提交事务实现添加、修改sql语句时,默认自动提交事务是关闭的,需要我们手动提交一下,也可以直接在sqlSession中设置为true |
(七)返回添加数据的主键 |
(八)动态批量删除使用foreach |
(九)注解开发【适用于简单的SQL语句】 可以不在xml中写SQL语句,直接在Mapper接口中通过注解写明SQL语句,例如: |