ORM思想
对象关系映射
Object Relational Mapping
ORM主要解决对象-关系的映射
对象 | 关系 |
---|---|
类 | 表 |
对象 | 表的行(记录) |
属性 | 表的列(字段) |
MyBatis:
本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL
主配置文件,关联映射文件
XML映射配置文件
mybatis-config.xml1
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
<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.XML1
2
3
4
5
6
7
8
9
10
11
12
<!-- 命名空间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.java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26package 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操作要手动提交事务.
…
关闭资源