MyBatis简介:
MyBatis是一个持久层框架。它的数据访问层DAO(Data Access Objects)是不需要实现类的,它只需要一个接口和XML(或注解),就可以将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。
Mybatis提供自动映射、动态SQL、级联、缓存、注解、代码和SQL分离等特性。
MyBatis核心组件之间的关系:
映射器和SqlSession都可以发送SQL到数据库执行。
Mybatis的开发流程:
1.导入JDBC连接驱动,导入Mybatis核心jar包和依赖的jar包
2.创建核心配置文件,在该文件中创建了一个连接JDBC,和一个连接池配置(数据库驱动名、数据库的连接url、用户名、密码)
3.添加映射配置文件(用来映射实体类属性和数据库表中的字段),在该配置文件中,在mapper标签里指定一个唯一的namespace值,在该标签下添加增删改查的语句 <select><delete><update><insert>
4.在Mybatis的核心配置文件中将定义好的mapper配置文件组装起来(关联)
<configuration>
<!-- 数据库环境 -->
<environments default="development">
<environment id="development">
<!-- 指定类型是JDBC,数据源是连接池 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 在核心配置文件中,将映射配置文件组装起来 -->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
5.编写程序
首先创建一个 new SqlSessionFactoryBuilder,调用build方法,该方法要传入一个InputStream,该输入流可以调用 Resources.getResourceAsStream("核心配置文件名")。该build方法会返回一个SqlSessionFactory
通过SqlSessionFactory的open方法获取一个SqlSession
通过SqlSession执行增删改查,(查找selectOne、selectList),该方法要传入一个字符串“namespa.sqlid”,查找之后会返回数据
关闭SqlSession,将该SqlSession还到连接池中
private static SqlSessionFactory sqlSessionFactory=null;
//private static SqlSession session=null;
//sqlSessionFactory是单例,但sqlSession是多例
//在类加载的时候仅执行一次
static {
//创建SqlSessionFactory
//先创建SqlSessionFactoryBuilder
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("sqlMapConfig.xml"));
//sqlSessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SqlSessionFactory(工厂接口):
我们看到SqlSessionFactory是一个接口,所以不能通过new来创建它的实例,而MyBatis提供了构造器SqlSessionFactoryBuilder。所以通过SqlSessionFactoryBuilder 的build()方法去创建SqlSessionFactory。
其实是首先MyBatis读取配置文件sqlMapConfig .xml,通过Configuration类对象去构建整个MyBatis 的上下文。SqlSessionFactory在MyBatis中存在两个实现类SqlSessionManager(多线程下使用)和DefaultSqlSessionFactory(单线程使用 )。它们之间的关系如下:
SqlSession:
SqlSession的作用类似雨一个JDBC中的Connection对象,代表着一个连接资源的启动。
它的作用:1.获取Mapper接口 2.发送SQL给数据库 3.控制数据库事务
// 添加用户
public void save(User user) {
System.out.println("使用Mybatis将数据存储到数据库中");
// 使用Mybatis提供的编程API
// 每调用一次sava方法,就创建一个新的sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// insert方法传入了一个user实例,这个user实例里面封装了数据
sqlSession.insert("user.save", user);
// 执行更改相关的操作(insert,delete,update),要提交事务
sqlSession.commit();
if (sqlSession != null) {
// 释放资源
sqlSession.close();
}
}