MyBatis
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。它可以简化JDBC的开发,能够更好的完成ORM(对象映射关系)
MyBatis原理图
1.SqlMapConfig.xml:此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
2.UserMapper.xml:sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。此文件中namespace作为该映射文件的唯一标志。
3.SqlSessionFactory:通过mybatis环境等配置信息构造会话工厂对象。在整个项目中共享,是线程安全的。通过openSession方法创建SqlSession对象,该方法存在很多重载方式,可以是有参的或者无参的。
4.SqlSession:由会话工厂创建会话,操作数据库需要通过SqlSession进行。
5.User:Executor把执行sql后的内容输出映射到java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
MyBatis的入门案例
SqlMapConfig.xml
<?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>
<!-- 配置别名 -->
<typeAliases>
<typeAlias type="com.tm.pojo.User" alias="User"/>
</typeAliases>
<!-- 配置开发环境
default:引用指定id的环境
-->
<environments default="dev">
<environment id="dev">
<!-- 数据源、事务、映射文件 -->
<!-- 事务交给jdbc来管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源
type:池化的
-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<!-- resource:指定映射文件位置 -->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
UserMapper.xml
<?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">
<!-- 映射文件
namespace:作为mapper文件的唯一标志
-->
<mapper namespace="helloMapper">
<!-- 存放大量SQL -->
<!-- 查询user表所有数据 -->
<!-- select表示查询的SQL
id:本条SQL的唯一标志
resultType:将要把执行完的结果封装给哪个对象
-->
<select id="findAll" resultType="User">
select * from user
</select>
</mapper>
User.java
package com.tedu.pojo;
/**
*这个类用来描述用户表
*/
public class User {
//描述id字段
private Integer id;
//描述name字段
private String name;
//描述addr字段
private String addr;
//描述age字段
private Integer age;
//setters and getters
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//toString
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", addr=" + addr + ", age=" + age + "]";
}
}
测试类
public class HelloTest{
//查询所有数据
@Test
public void findAll() throws IOException{
//1.获取SqlSessionFactory对象,加载配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
//2.获取SqlSession对象,执行SQL
SqlSession session = ssf.openSession();
//statement:定位SQL(namespace的值.select标签的id的值)
String statement = "helloMapper.findAll";
List<User> list = session.selectList(statement);
//3.遍历并打印数据
for(User user : list){
System.out.println(user);
}
//4.释放资源
session.close();
}
}