MyBatis

ORM思想

对象关系映射
Object Relational Mapping
ORM主要解决对象-关系的映射

对象 关系
对象 表的行(记录)
属性 表的列(字段)

MyBatis:
本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL
主配置文件,关联映射文件

XML映射配置文件

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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配置文件 -->
<properties resource="db.properties"></properties>
<!-- domain的全限定名 -->
<typeAliases>
<package name="me.cscar.smis.domain.Student"/>
</typeAliases>
<!-- 告知框架,链接数据库的四要素,以及事务的处理 -->
<environments default="dev">
<!-- id属性是某一个环境的唯一标记 -->
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!-- 驱动名,键值对,对应properties -->
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 找到Sql的映射文件,包名开头(域名倒写)的路径 -->
<mappers>
<mapper resource="me/cscar/smis/mapper/StudentMapper.XML" />
</mappers>
</configuration>

StudentMapper.XML

1
2
3
4
5
6
7
8
9
10
11
12
<?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接口的全限定名 -->
<mapper namespace="me.cscar.smis.mapper.StudentMapper">
<!-- id属性:当前的sql语句,在mapper的唯一标记 -->
<insert id="save">
<!-- 占位符#{},mybatis从对应的对象中,取出指定的属性值 -->
INSERT INTO student (name,age) VALUES (#{name},#{age})
</insert>
</mapper>

如果是DML操作,直接告知sql.在执行的时候,传递参数,使用OGNL表达式来获取值.

如果是DQL(查询)操作,还必须告知框架,查询的结果的每一行封装成什么类型的对象.

sql语句的执行流程:
    首先,会将#{}更改成占位符?, 
    然后,通过传递过来的参数来设置给占位符.

如果列名和属性名匹配,可以使用resultType,也可以使用resultMap.
如果不匹配,要使用resultMap.

Mybatis.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package me.cscar.smis.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;


public class MybatisUtil {
private static SqlSessionFactory factory = null;

static {
try {
factory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}

public static SqlSession getSqlSession() {
return factory.openSession();
}
}

mybatis操作流程:
加载主配置文件,获取factory对象.
factory = new SqlSessionFactoryBuilder().build();
获取xml文件,等同于thread…
Resources.getResourceAsStream(“mybatis-config.xml”)
通过factory对象获取session对象.
调用Mybatis的getSqlSession方法,返回openSession
通过session执行sql.

DML操作要手动提交事务.

关闭资源