MyBatis快速入门
官方文档:mybatis – MyBatis 3 | 入门
一、导包
- 将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
- 使用Maven构建项目时,将以下依赖置于pom.xml文件中
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
二、配置SQL映射文件
代码语言:javascript复制<?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">
<mapper namespace="test">
<select id="selectBlog" resultType="User">
select * from User where id = #{id};
</select>
</mapper>
配置字段解释:
- mapper : namespace:名称空间,通常情况下,一个项目的数据库不只有一张表,而操作不同表的SQL语句的id(下方解释id)的有可能重复,如查询所有用户信息和查询所有管理员信息,SQL语句的id可都为 selectAll 此时,名称空间便可对此进行区分,就像3班的张三和4班的张三。
- select(不只有select,还有insert,update等):
- id:在同一名称空间内,一条SQL语句的唯一标识。
- resultType:返回结果的类型,类似于泛型中尖括号中的内容的作用。
三、配置核心配置文件以及在核心配置文件中加载SQL映射文件
代码语言:javascript复制<?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>
<!--
设置别名
-->
<typeAliases>
<package name="com.cikian.pojo"/>
</typeAliases>
<environments default="development">
<!--
配置数据库连接环境信息,可以配置多个environment,使用不同的id区分,可通过上方的default属性选择使用相应的环境
-->
<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?useSSL=False"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载SQL映射文件,两种方式-->
<mapper resource="com/cikian/mapper/UserMapper.xml"/>
<package name="com.cikian.mapper"/>
</mappers>
</configuration>
核心配置文件中,<dataSource> 标签中的内容……..(一看就懂0.0)
加载SQL映射文件的两种方式:
- 第一种方式resource字段的值即为SQL映射文件的相对路径。
- 第二种方式为“包扫描”方式,如上,会加载com/cikian/mapper目录中所有的SQL映射文件(有条件,如下)
在代理开发中,Mapper接口名和SQL映射文件名称相同,并且在同一目录下,推荐使用第二种方式加载映射文件,如果使用第一种方式,有多少SQL映射文件就需要写多少次,比较繁琐,而第二种方式只需要写一次。
四、在Java中使用
代码语言:javascript复制public class MyBatisDemo {
public static void main(String[] args) throws IOException {
// 1.加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.执行SQL
List<User> users = sqlSession.selectList("test.selectAll");//这里就是名称空间和id的使用
System.out.println(users);
// 4.释放资源
sqlSession.close();
};
};
五、代理开发
要求:
- 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下;
- 设置SQL映射文件的namespace属性为Mapper接口全限定名;
- 在Mapper接口中定义方法,方法名就是SQL映射文件中SQL语句的id,并保持参数类型和返回值类型一致;
public class MyBatisDemo2 {
public static void main(String[] args) throws IOException {
// 1.加载配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.执行SQL
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 获取接口的代理对象
List<User> users = userMapper.selectAll();
System.out.println(users);
// 4.释放资源
sqlSession.close();
};
};
代理开发中,通过SqlSession的getMapper方法获取Mapper接口的代理对象,代理对象再调用相关方法(方法名与SQL语句id相同)即可完成SQL的执行。