介绍
MyBatis是一种持久层框架,它允许你使用普通SQL查询、存储过程和高级映射,以及高级映射的结果集和连接。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及缓存代码的需求。MyBatis可以与Spring框架集成。
MyBatis原理概述包括以下方面:
1.配置文件
2.映射文件
3.会话工厂
4.SqlSessionFactoryBuilder
5.SqlSessionFactory
6.SqlSession
详解
1.配置文件
在MyBatis中,我们需要定义配置文件:mybatis-config.xml ,这里定义了连接池、缓存、日志等全局配置。我们需要使用SqlSessionFactoryBuilder创建SqlSessionFactory,并且将mybatis-config.xml文件的输入流传递进去。
下面是一个mybatis-config.xml的简单示例:
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
2.映射文件
映射文件包含了一系列的映射关系,用于定义查询、更新以及其他操作语句。在映射文件中,我们要填写具体的SQL语句,并使用占位符等方式来绑定参数,相当于将数据库的操作写成了一份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">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
3.会话工厂
接下来,我们会使用SqlSessionFactory来创建SqlSession实例以及一些其他工厂方法,这些都是基于mybatis-config.xml文件的配置来调用的。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
SqlSession session = factory.openSession();
4.SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是用于获取SqlSessionFactory接口实例的工具类。
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
5.SqlSessionFactory
SqlSessionFactory是提供SqlSession的地方,是MyBatis的核心之一。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
6.SqlSession
SqlSession代表与数据库交互的会话,它会根据配置文件获取数据库连接,并将SQL语句执行结果返回给Java代码调用方。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
SqlSession session = factory.openSession();
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 1);
session.close();
示例
下面是在MyBatis中,插入一条数据的示例,首先编写一个Mapper的接口:
public interface UserMapper {
void insert(User user);
}
然后编写一个插入数据的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">
<mapper namespace="com.example.UserMapper">
<insert id="insert" parameterType="com.example.User">
INSERT INTO users
(user_name, password)
VALUES (#{userName}, #{password})
</insert>
</mapper>
接下来,我们可以在Java代码中使用SqlSession来进行数据库的插入操作:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User user = new User();
user.setUserName("test");
user.setPassword("123456");
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insert(user);
session.commit();
session.close();
另外一个例子,查询用户信息:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
System.out.println(user.getUserName());
session.close();
总结
MyBatis是一个很强大的持久化框架,其灵活性、简易性和快速性使得它在许多项目中都被广泛使用。MyBatis的核心设计思想是SQL和Java代码之间的分离,成为了它的最大优势。在使用MyBatis的过程中,需要重点关注配置文件、映射文件、会话工厂、SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession等核心组件的作用和使用方法。
本文链接:http://task.lmcjl.com/news/13258.html