首页 > 其他分享 >Mybayis核心基础

Mybayis核心基础

时间:2023-10-05 14:55:20浏览次数:29  
标签:语句 false 标签 SQL 基础 SqlSession 核心 Mybayis where

核心基础

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>

标签:语句,false,标签,SQL,基础,SqlSession,核心,Mybayis,where
From: https://www.cnblogs.com/chenchenlol/p/17743323.html

相关文章

  • java基础二
    1python和java字符串比较1.1java字符串常用方法importjava.util.Arrays;publicclassDemo01{publicstaticvoidmain(String[]args){//1字符串的常用方法Stringorigin="helloworld中国";//1取指定位置的字符从0开始//......
  • 学年2023-2024-1 学号 20231310《计算机基础与程序设计》第二周学习总结
    作业信息这个作业属于哪个课程https://www.cnblogs.com/rocedu/p/9577842.html这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK02这个作业的目标《计算机科学概论》和《C语言程序设计》第1章并完成云班课测试作业正文https://www.cn......
  • redis主从复制基础上搭建哨兵模式
    假如156和157是不同的两台服务器两台redis主从复制基础上搭建哨兵模式如下156redis.confmasterauth123456bind0.0.0.0requirement123456daemonizeyessentinel.confsentinelauth-passmymaster123456sentinelmonitormymaster10.190.107.15663792157......
  • Learning Hard C# 学习笔记: 3.C#语言基础
    前言由于最近工作开始重新使用了C#,框架也是.Net4.5,看了下,这本书是比较合适的,所以就重新学习了下,由于之前本人已有C#相关基础,所以不会所有内容都做笔记,只会对不熟悉或者比较重要的内容做笔记.3.2基础数据类型3.2.4枚举类型枚举类型属于值类型,用于定义一组命......
  • Java基础知识29--主线程、子线程执行顺序
    1、主线程与子线程互不影响最常见的情况,主线程中开启了一个子线程,开启之后,主线程与子线程互不影响各自的生命周期,即主线程结束,子线程还可以继续执行;子线程结束,主线程也能继续执行。publicclassTestThread{publicstaticvoidmain(String[]args)throwsInterruptedExcepti......
  • java——redis随笔——基础
         层级模式:                                          11......
  • java基础-基础语法和数据类型
    2java环境搭建2.1安装jdk和配置环境变量#java的开发环境,需要安装jdk#java的运行环境,运行java项目,正常只需要装jre即可,但是好多人都装jdk#无论运行java程序还是开发java程序,直接装jdk即可#jdk:java开发环境JavaDevelopmentKit#jre:java运行环境#jvm:java虚拟机,j......
  • 计算机基础知识
    ⦁ 信息学奥赛简介:NOIP:全国青少年信息学奥林匹克联赛是教育部认可的五大学科(数学,物理,化学,生物,信息学)竞赛之一,由1984中国计算机学会(CCF)创办,联赛分为普及组和提高组。复赛可以使用c,c++,Pascal语言,2022年后只能使用c++。CSP-J/S:2019年CCF推出CSP(软件能力认证),CSP-J/S(非专业级别认证),C......
  • 408_C语言基础
    408_C语言基础学习内容掌握以下知识点足以应付408考试了:常量、变量、运算符、流程控制、函数、指针、结构体。变量变量其实只不过是程序可操作的存储区的名称。C中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上......
  • 《机器人SLAM导航核心技术与实战》第1季:第6章_机器人底盘
    《机器人SLAM导航核心技术与实战》第1季:第6章_机器人底盘 视频讲解【第1季】6.第6章_机器人底盘-视频讲解【第1季】6.1.第6章_机器人底盘_底盘运动学模型-视频讲解【第1季】6.2.第6章_机器人底盘_底盘性能指标-视频讲解【第1季】6.3.第6章_机器人底盘_典型机器人底......