1.MyBatis工作原理

1.目录结构

假设Spring Boot项目src目录结构为src/main/java/com/example/demo。

模型层:1层,模型层。

数据访问层:2层,DAO接口层和DAO实现层。

服务层:2层,服务接口层和服务实现层。

控制器层:1层,控制器层。

视图层:1层,视图层。

/demo
  /Model
  /DAO
    mybatis-config.xml
    BlogMapper.java
    BlogMapper.xml
  /Service
  /Controller

2.mybatis-config.xml

<properties resource="com/example/demo/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>
<?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">
<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>

3.BlogMapper.java(映射器接口)

package org.mybatis.example;
public interface BlogMapper {
  Blog selectBlog(int id);
}
//将BlogMapper.xml的内容通过注解合并到BlogMapper.java
package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

4.BlogMapper.xml(映射器语句)

需与上面的BlogMapper.java文件同名。

<?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>

5.构建SqlSessionFactory

SqlSessionFactory 可以由 SqlSessionFactoryBuilder 从 XML、注解 或 Configuration 实例来构建 SqlSessionFactory。

5.1从XML构建SqlSessionFactory

build()方法接受一个指向 mybatis-config.xml 文件的 InputStream 实例,可选的参数是 environment(环境配置) 和 properties(属性)。

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

5.2从Configuration实例来构建SqlSessionFactory

SqlSessionFactory build(Configuration config)
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

6.从SqlSessionFactory中获取SqlSession

默认的 openSession() 方法没有参数,它会创建具备如下特性的 SqlSession:

  • 事务作用域将会开启(换句话说,就是NOT auto-commit)。
  • 将由当前环境配置的 DataSource 实例中获取 Connection 对象。
  • 事务隔离级别将会使用驱动或数据源的默认设置。
  • 预处理语句不会被复用,也不会批量处理更新。

事务隔离级别支持 JDBC 的五个隔离级别(NONEREAD_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READ 和 SERIALIZABLE)。

你可能对 ExecutorType 参数感到陌生。这个枚举类型定义了三个值:

  • ExecutorType.SIMPLE:该类型的执行器没有特别的行为。它为每个语句的执行创建一个新的预处理语句。
  • ExecutorType.REUSE:该类型的执行器会复用预处理语句。
  • ExecutorType.BATCH:该类型的执行器会批量执行所有更新语句,如果 SELECT 在多个更新中间执行,将在必要时将多条更新语句分隔开来,以方便理解。
SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level)
//新版mybatis方式(推荐)
try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

//旧版mybatis方式
try (SqlSession session = sqlSessionFactory.openSession()) {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}
SqlSession方法描述
insert()执行INSERT语句
delete()执行DELETE语句
update()执行UPDATE语句
select()使用ResultHandler查询单行
selectOne()查询单行
selectList()查询列表
selectMap()将查询列表转换为Map
selectCursor()Cursor提供与List相同的结果,不同的是它使用Iterator惰性地获取数据。
flushStatements()刷新批处理语句
commit()刷新批处理语句并提交数据库连接
rollback()丢弃挂起的批处理语句并回滚数据库连接
clearCache()清除本地会话缓存
close()关闭sqlsession

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/java/mybatis/17098.html

(0)
上一篇 2022年9月1日 14:44
下一篇 2022年9月2日 02:21

相关推荐

  • 6.MyBatis动态SQL

    1.if 使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。 2.choose、when、otherwise 有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。 这类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则…

    MyBatis教程 2022年9月6日
    01160
  • 3.MyBatis-Spring配置

    1.MySQL数据库配置 需提前手动创建好数据库。 2.MyBatis配置 MyBatis 配置参数存储在Spring Boot应用的application.properties文件中。 配置 描述 mybatis.config-location MyBatis xml 配置文件的位置。 mybatis.check-c…

    MyBatis教程 2022年9月3日
    02410
  • 2.MyBatis配置

    1.configuration(配置)结构 configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) env…

    MyBatis教程 2022年9月2日
    01430

发表回复

登录后才能评论