很多人初始Mybatis,总是把Mybatis与JDBC搞混,不清楚sql语句写在哪里,不清楚在哪里创建链接,不知道代码怎么写,看了别人的代码,总想着自己去记,去背代码,这往往都是不可取的,不对的。
下面,我将会用最简单的语言,教大家快速上手Mybatis.
1、既然学到了Mybatis,那么就一定学过了JDBC,那我们仔细回想一下,我们是如何使用JDBC与Mybatis连接的。
1、加载驱动程序,使用Class.forName()方法调用来完成,参数是驱动类的名称
.
2、打开数据库连接,首先使用Connection创建连接,然后使用DriverManager建立连接;
.
3、获得Statement对象,这个Statement对象主要是在第四步执行SQL语句的
.
4、执行SQL语句
2、回想完JDBC,就进入正题,Mybatis,我把它分为三个部分,一个是XML配置文件部分,这部分主要与JDBC第1.2步相似,第二部分就是映射文件(mapper)部分,主要与3.4步相似,第三部分就是Java代码部分了
我们来一一分析:
首先,就是我们的XML配置文件,一般都以mybatis-config.xml命名,主要作用,就是把,我们原来JDBC连接数据库需要的的数据源写入了配置文件里面,以及将我们的mapper映射文件注册到配置文件里面(其实还有很多功能,入门主讲这两个),看下面代码:
<?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>
<properties resource="jdbc.properties"></properties> 使用properties引入外部文件
<environments default="develoment"> 默认为开发环境
<environment id="develoment">
<transactionManager type="JDBC"></transactionManager> 基于JDBC的事务
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> 我们连接数据库需要的数据源,都写在这里 ${driver} 意思就是,获取properties引入外部文件的内容,这里注意一点properties,都是以键值对的形式去读取的,就这么理解
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.mybatis.mapper"/> 注册mapper映射文件,后文会讲为什么要注册,以及mapper的作用
</mappers>
</configuration>
jdbc.properties文件(主要的数据源都写在这里,然后通过properties以键值对的方式读取这个文件里面的内容 )
driver=com.mysql.jdbc.Driver driver为key com.mysql.jdbc.Driver为value
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456
第二个就是我们的mapper,映射文件,专门负责写sql语句的
<?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">
<mapper namespace="com.mybatis.mapper.StudentDaoMapper"> 与接口产生映射
<select id="selectsingleStudent" resultMap="resultMap01">
SELECT * FROM student
s JOIN teacher t JOIN positions p ON s.tid = t.tid AND p.id = t.tid
WHERE s.sid=#{sid}
</select>
</mapper>
像我们的mapper映射文件呢,主要作用就是用来管理sql语句,以及与接口产生映射,这里就先记住这么多。
3、最后就是我们的代码部分了,我一句句的为解析:
public class MybatisUtils {
public static SqlSession getSqlSession() throws Exception {
String mybatis_conf ="mybatis-conf.xml";
InputStream inputStream = Resources.getResourceAsStream(mybatis_conf);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession(true);
return session;
}
}
MybatisUtils 这个工具类主要作用就是帮我们创建SqlSession对象。
-
什么是SqlSession,它类似于JDBC中的Connection,SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句
-
那么SqlSession对象是如何被创建的呢?根据代码得出Sqlsession对象是由SqlSessionFactory 创建的,而SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例
这里也再一次强调了配置文件的作用,就是让SqlSessionFactoryBuilder建立一个SqlSessionFactory,从而创建出SqlSession,再通过这个实例对数据库进行操作 -
而我们最开始这两代码 ,主要就是将配置文件用String保存,通过org.apache.ibatis.io.Resources工具类用于读取MyBatis的配置文件,转换成输入流,最终用于获取SqlSessionFactory。为什么要转换成InputStream格式呢?看下图,因为build()方法参数的需要:
String mybatis_conf ="mybatis-conf.xml";
InputStream inputStream = Resources.getResourceAsStream(mybatis_conf);