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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

mybatis-plus分页无效问题解决

《mybatis-plus分页无效问题解决》本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可... 昨天在做一www.chinasem.cn个新项目使用myBATis-plus分页一直失败,后来经过多方

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu