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,就是从嵌套的对象里面继续取属性

 

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

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:


        
             SELECT LAST_INSERT_ID()
           
        insert into userinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})

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

 
            
                
                    select UUID()
                
                insert into userinfo (userId,userName,userpass,usertype,address) values(#{userId},#{userName},#{userPass},#{userType},#{address})

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

 
                
                    select seq.nextval from dual
                
                insert into
                     userinfo (userId,userName,userpass,usertype,address) 
                values
                    (#{userId},#{userName},#{userPass},#{userType},#{address})

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

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

mybatis关系映射:

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

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


        

你可能感兴趣的:(mybatis,mybatis)