Mybatis框架简介
Mybatis 是持久层ORM(object relational mapping )半自动化框架。
持久层指的是将内存中存储的数据转为数据库存储(持久化)的过程。
ORM 指的是将java中的object对象和表之间建立映射关系。
半自动化指的是,mybatis将制定sql部分和设计表部分交给使用者,内部处理了连接数据库,处理,包装对象等操作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口 和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
Mybatis的环境搭建
导入jar包
-
项目下新建一个bin文件夹 并导入需要的jar包
需要核心jar包2个就行。其他可以不导入
-
选中所有jar包,右键build path–>add to build path
配置核心文件
是一个xml文件,命名无要求,位置无要求,一般成为mybatis.xml,放在src路径下
-
引入dtd,对xml进行约束
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
-
配置内容
<?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">
<!--mybatis的根标签,里面配置环境-->
<configuration>
<!--环境 里面配置多个环境,default用来指定maybatis使用哪个环境 填环境的id来指定环境-->
<environments default="dev">
<!--环境
id 属性 代表该环境的id,唯一标识
里面配置了数据库的基本信息和数据库连接池的使用-->
<environment id="dev">
<!--事务管理器。 type属性,用来设置mybatis采用管理事务的方式 一般用JDBC 表示采用jdbc的管理方式-->
<transactionManager type="JDBC" />
<!--数据库连接池和连接参数的配置
type属性 :用户是否设置连接池技术,(设置了用户也感觉不到。内部处理)
POOLED 代表mybatis采用连接池技术
-->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="scott"/>
<property name="password" value="TIGER"/>
</dataSource>
</environment>
</environments>
<!--配置sql的映射xml文件,mybatis通过该配置去寻找sql的执行文件-->
<!--mybatis第一次加载就会把映射文件都加载进去。通过该文件存储一个namespace属性-->
<mappers>
<!--resource属性中定义文件的路径 包路径 报名+文件名-->
<mapper resource="com/alion/mappers/SheetMapper.xml"></mapper>
</mappers>
</configuration>
Mapper文件配置(sql执行映射文件)
- 该路径和mybatis.xml中mapper 的resource属性要对应
配置文件中配置内容
<?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中有个namesapce属性,这个属性用来定义唯一的mapper文件,全局唯一,一般用包名+文件名-->
<mapper namespace="com.alion.mappers.SheetMappers">
<!--标签代表执行的操作。id属性代表当前sql语句的唯一标识。后面通过该id来执行
还有一个resultType 属性 表示结果类型。包名+类名,和反射相同
-->
<select id="select" resultType="com.alion.bean.MySheet">
select * from my_sheet
</select>
</mapper>
数据库的表要和对象对应
public class MySheet {
private Integer id;
private String name;
private Integer age;
private Date birthday;
@Override
public String toString() {
return "MySheet{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
}
最后进行测试
public static void main(String[] args) throws IOException {
//1、加载mybatis的全局配置文件 通过Resources方法 获取文件流
InputStream is= Resources.getResourceAsStream("mybatis.xml");
//2、构建SqlSessionFactory工厂。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//根据工厂拿到sqlSession
SqlSession sqlSession=factory.openSession();
//通过Session中的方法去查询
//参数 传入要执行的sql的对应唯一标识。namespace+id
//返回参数通过 mapper中resultType指定了。
List<MySheet> student= sqlSession.selectList("com.alion.mappers.SheetMappers.select");
student.forEach(System.out::println);
//关闭会话
sqlSession.close();
}