mybatis学习总结

本文是关于MyBatis的学习总结,包括MyBatis的简介、安装、XML配置、参数传递、结果映射、缓存机制及动态SQL等内容。在配置中,详细介绍了SqlSessionFactory的创建、属性配置、日志设置和数据源配置。在映射方面,讲解了如何处理字段名与属性名不一致的问题,以及如何使用ResultMap进行高级映射。还讨论了MyBatis的缓存机制,包括一级缓存和二级缓存的工作原理。最后,文章探讨了防止SQL注入的方法和MyBatis的动态SQL特性。
摘要由CSDN通过智能技术生成

文章目录

注意点 有坑

1.mybatis 默认开启事务,如果进行了增,删,改等操作,需要手动提交事务。
2. 在和spring整合之后,就不再需要手动处理事务了。

相关博文

1. MyBatis使用

MyBatis使用

2. mybatis参数传递

mybatis传递参数的方法;

1. 简介:什么是MyBatis?

  1. MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  2. MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  3. MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

源码可以在github上看到。。。

2.入门

2.1安装

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

2.2从 XML 中构建 SqlSessionFactory

这里一般被放在一个工具类中。 详见Mybatis-01

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

mybatis-config.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">
<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.3不使用 XML 构建 SqlSessionFactory

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);

2.4从 SqlSessionFactory 中获取 SqlSession

之前的

try (SqlSession session = sqlSessionFactory.openSession()) {
   
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}

但现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。

try (SqlSession session = sqlSessionFactory.openSession()) {
   
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
}

2.5 第一个MyBatis程序

2.6 命名空间:

即 mapper对应的mapper.xml中的 namespace,用来绑定接口和对应的xml配置文件。。。。

2.7 作用域(Scope)和生命周期

提示
依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。

SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。

解释:一旦创建之后就不再需要了
局不变量

SqlSessionFactory
SqlSessionFactory ==一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 ==

使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。
因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

解释:

  1. 可以想象为:数据库连接池
  2. SqlSessionFactory一旦被创建就应该在应用运行前进一直存在,没有任何理由丢弃它或重新创建另一个实例。
  3. 因此SqSessionFactory的最佳作用域是应用作用域
  4. 最简单的就是使用单例模式或者静态单例模式。。。

SqlSession
每个线程都应该有它自己的 SqlSession 实例。
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说,==每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 ==

解释:

  1. 连接到池的一个请求!
  2. SqlSession的实例不是线程安全的,因此是不能被共享的,所以最佳的所用于是请求或方法作用域
  3. 用完之后需要立即关闭

在这里插入图片描述

在这里插入图片描述

这里的每一个Mapper都代表了一个业务。

3. XML配置

针对的就是mybatis-config.xml中的配置。
在这里插入图片描述
mybatis-config.xml 中的各项配置的顺序必须如上图所示,否则会报错。。。

3.1 属性(properties)

我们可以通过properties属性来实现引用配置文件。

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
<properties resource="db.properties"/>
<dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值