Mybayis核心基础

发布时间 2023-10-05 14:54:02作者: 加阿斯顿西瓜

核心基础

MyBaits获取参数的两种方法

#{ }和${ }方式

在平常状态下兼顾安全性和开发效率,通常使用#{ }方法获取参数

极少的情况下使用${ }的方式,例如动态获取表名,依据字段排序等。

增删改查标签

属性 用途
id namespace中标签的唯一标识
parameterType 指定执行SQL语句时所需参数的全限定类名或别名
resultType 指定SQL语句执行后返回值的全限定类名或别名
resultMap 表示外部resultMap的命名引用。请注意,resultMap和resultType不能同时使用
flushCache 指定是否需要清空MyBatis本地缓存和二级缓存
useCache 设置二级缓存的开启和关闭
id 命名空间中标签的唯一标识
parameterType 指定执行SQL语句时所需参数的全限定类名或别名
keyProperty 指定POJO类的某个属性接收自动生成的主键
useGeneratedKeys 表示执行添加记录之后是否获取到数据库自动生成的主键

MyBaits全局配置文件

configuration(配置)

properties(属性) 引入外部properties文件对项目进行动态配置,例如数据库文件db.properties

settings(设置)极为重要的被指

配置 作用 可选配置 默认配置
cacheEnabled 全局性地开启或关闭缓存 true | false true
lazyLoadingEnabled 全局性地开启或关闭延迟加载 true | false false
aggressiveLazyLoading 延迟加载和按需加载的开关 true | false false
useGeneratedKeys 允许JDBC支持自动生成主键 true | false false
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射 true | false false
defaultStatementTimeout 设置数据库响应的超时时间 任意值

typeAliases(类型别名)多用于为java类型设置简短的名字,从而减少全限定类名的冗余 typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置)标签常用于配置数据源。在标签中可使用多个标签配置不同的数据源。 environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器)标签常用于在MyBatis初始化的时候告知MyBatis框架需要引入哪些Mapper映射文件以及它们所在的位置。

MyBaits关键API

在MyBatis应用层开发中涉及到两个核心接口SqlSessionFactory和SqlSession及其实现类

  1. SqlSessionFactoryBuilder的主要作用就是通过build( )方法创建SqlSessionFactory
  2. SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其核心作用就是创建SqlSession。SqlSessionFactory一旦被创建就应伴随应用程序的运行而长期一直存在,我们没有任何理由对它进行清除或重建,多次重建 SqlSessionFactory被视为一种代码“坏味道(bad smell)”。为避免资源的浪费和过度开销,在项目中最好使用单例模式创建和获取SqlSessionFactorySqlSessionFactory使用openSession( )方法创建SqlSession实例.
  3. SqlSession是MyBatis框架中极其重要的接口。SqlSession类似于JDBC中的Connection,它代表MyBatis和数据库的一次会话,主要用于执行持久化操作。SqlSession对象底层封装了JDBC连接,所以可以直接使用SqlSession对象执行已映射的SQL语句。SqlSession中包含了所有执行SQL语句的方法、提交或回滚事务的方法、获取映射器实例的方法。SqlSession不是线程安全的,每个线程都应有一个属于自己的SqlSession实例并且该实例不能够被共享。在使用SqlSession执行相关操作后应将其关闭,释放资源。

标签

用于实现简单的条件判断,例如:非空判断,空值判断等。如果标签test属性的值为true则标签中的内容会执行;反之标签中的内容不会得到执行。使用时请注意,在test的属性值中不必再使用占位符#{参数名}的形式获取参数值,直接使用参数名获取对应的参数值即可。

<select id="queryUserWithIf" resultType="User">
    select * from user where 1=1
      <if test="username!=null and username!=''">
          and username =#{username}
      </if>
      <if test="password!= null and password!= ''">
          and password =#{password}
      </if>
</select>

1.例如上面这个例子如果username或password属性其输入属性满足test中的条件,则不会进行该语句的执行

2.标签十分智能如果不需要使用“and”标签则在sql语句中会自动去除 "and" username =#{username}

标签

标签的案例中为了防止SQL语句拼接后的意外报错特意加入了“where 1=1”的查询条件,以此避免了where后面第一个单词是and或者or之类的关键字。

通常情况下,标签结合标签一起使用,主要用于管理SQL中的where子句,其主要作用如下:

  1. 如果满足条件,那么标签将自动添加where关键字并自动删除查询条件中最前方多余的and或or关键字
  2. 如果不满足条件,那么标签失效而且不添加and或or关键字
  3. 如果没有where子句则不生成where关键字
<select id="queryUserWithWhere" resultType="User">
    select * from user
    <where>
    <if test="username!=null and username!=''">
        and username =#{username}
    </if>
    <if test="password!= null and password!= ''">
        and password =#{password}
    </if>
    </where>
</select>