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 into
                     userinfo (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是一个分布式的缓存框架。


        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值