mybatis的归纳以及主键返回之自增主键

2024-06-22 18:18

本文主要是介绍mybatis的归纳以及主键返回之自增主键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mybatis的了解:

    mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。

当mybatis没有用mapper文件时,建立实体和映射文件的规则:

    映射文件的命名:Userinfo.xml是ibatis的命名方式,
    mybatis推荐的命名方式XXXMapper.xml UserinfoMapper 
    namespace:命名空间,分类标识sql语句,起到sql隔离的作用,如果在mapper代理开发中namespace有特殊的含义

select标签:如下属性:

    id属性作用:标识映射文件中的sql,将sql语句封装到mapped statement对象中,所以称为statement的id
    parameterType:指定输入参数类型
    #{}:表示一个占位符,会自动拼接字符串;
    #{userId}:其中的userId表示接收的输入参数,参数名称就是userId,如果输入参数是简单类型,#{}中的参数名可以任意,可以为value或者其他
    ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,使用${}容易引起sql注入
   ${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能用value,但是#{}就没有这个限制
          注意!!!见解:无论是#,还是$,他们都是从parameterType里面取出属性,如果是嵌套对象,那么就从嵌套的对象里面继续取属性
       eg:如下的demo,就是从嵌套的对象里面继续取属性

 <select id="getByVo2" parameterType="cn.jzh.entity.UserVo2" resultType="cn.jzh.entity.User">select * from tb_user where userName like '%${user.userName}%' and sex = #{user.sex}</select>

  resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象
    SQL片段:sql片段可以让代码有更高的可重用性,Sql片段需要先定义后使用
        在select里面引入SQL片段:
        eg:

<include refid="nameSex"></include>

mybatis开发dao的方式:原始dao的开发方式+Mapper代理的开发方式(推荐)
    原始dao的开发方式: 

    Mapper代理的开发方式(推荐):

          Mapper代理使用的是jdk的代理策略。
          Mapper代理的开发规范
          1、 mapper接口的全限定名要和mapper映射文件的namespace值一致。
          2、 mapper接口的方法名称要和mapper映射文件的statement的id一致。
          3、 mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致,而且它的参数是一个。
          4、 mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

      mapper标签属性详细解释:        

           1.id属性作用:标识映射文件中的sql,将sql语句封装到mapper的statement对象中,所以称为statement的id
            2.parameterType:指定输入参数类型
            3.#{}:表示一个占位符,${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中
            4.#{userId}:其中的userId表示接收的输入参数,参数名称就是userId,如果输入参数是简单类型,#{}中的参数名可以任意,可以为value或者其他
            ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,使用${}容易引起sql注入,${value}:接受输入参数的内容,
            如果传入类型是简单类型,${}中只能用value
            5.resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象
            注意:如果使用resultType作为输出映射,数据库表字段和实体对象属性名称不一致的将获取不到值

主键自增和序列:

        主键返回之自增主键

        将插入数据的主键返回,返回到user对象中
        SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值只适用于自增主键
        keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
        order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
        resultType:指定SELECT LAST_INSERT_ID()的结果类型
    eg:

<insert  id="addUser" parameterType="cn.entity.Userinfo"><selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Long">SELECT LAST_INSERT_ID()</selectKey>   insert into userinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})
</insert>

       主键返回值UUID
            order:如果主键自增,那么为after;如果主键不自增,那么为before
            UUID函数是mysql的函数
        eg:

<insert id="insert" parameterType="cn.entity.Userinfo"> <!-- 此处的主键不让自增,而是显示的赋值 --><selectKey keyProperty="id" resultType="java.lang.String" order="before">select UUID()</seledtKey>insert into userinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})
</insert>

     主键返回值序列
            order:只要不是自增主键,那么就设置为before
            序列也就是sequence,它是Oracle的主键生成策略
            eg:

<insert id="insert" parameterType="cn.entity.Userinfo"> <selectKey keyProperty="userId" resultType="java.lang.String" order="before">select seq.nextval from dual</seledtKey>insert intouserinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})
</insert>

mybatis-config.xml的配置内容和顺序如下(顺序不能乱!!!):

       properties(属性)用于配置属性信息
       settings(全局参数设置)用于配置MyBatis的运行时方式
      mybatis全局配置参数,全局参数将会影响mybatis的运行行为
        typeAliases(类型别名)配置类型别名,可以在xml中用别名取代全限定名
        typeHandlers(类型处理器)配置类型处理器
        objectFactory(对象工厂)
        plugins(插件)配置拦截器,用于拦截sql语句的执行
        environments(环境信息集合)
            environment(单个环境信息)配置数据源信息、连接池、事务属性等
            <environments>标签元素的default属性,这个属性作用就是指定当前情况下使用哪个数据库配置,
        也就是使用哪个<environment>节点的配置,default的值就是配置的<environment>标签元素的id值。
        transactionManager(事务)
        dataSource(数据源)
        mappers(映射器)配置SQL映射文件   

mybatis关系映射:

        使用resultType来进行一对一结果映射,查询出的列的个数和映射的属性的个数要一致。而且映射的属性要存在与一个大的对象中,它是一种平铺式的映射,即数据库查询出多少条记录,则映射成多少个对象。
        注意:如果使用resultType作为输出映射,数据库表字段和实体对象属性名称不一致的将获取不到值        
        <!-- 用户信息 一对一 -->  
        association指定一对一的关系 property="属性名称" javaType="该属性的全限定类名" 
        association是用于一对一和多对一,而collection是用于一对多的关系

        eg: <association property="user" javaType="com.sxt.model.User">  
        collection :一对多映射,多对多映射是一对多映射的特例
         property="集合的名称" ofType="集合中元素的类型,该属性的全限定类名"
        eg:<collection property="list" ofType="cn.zzsxt.entity.OrderDetail">
mybatis延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在需要的时候,再去加载从信息。
        在mybatis中,resultMap标签的association标签和collection标签具有延迟加载的功能。
        
Mybatis的缓存,包括一级缓存和二级缓存
        一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。
        一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。
        二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。
        一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。
        一级缓存是默认使用的。
        二级缓存需要手动开启。
        整合ehcache
Mybatis本身是一个持久层框架,它不是专门的缓存框架,所以它对缓存的实现不够好,不能支持分布式。
        Ehcache是一个分布式的缓存框架。


        

这篇关于mybatis的归纳以及主键返回之自增主键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085045

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。