• Mybatis主配置文件常见使用讲解


    在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件。

    其实最后mybatis解析的还是一个主配置文件。

    而映射文件会通过我们配置<mappers>属性,或指定扫描路径,将映射文件导入主配置文件,最后一起解析。

    下面是主配置文件常见使用讲解:

    Mybatisproperties文件的引入

    properties导入后可以将可能会改变的属性放在单独的文件,例如连接数据时的账号密码等,方便管理,

    在mybatis中使用properties标签,如下,resource是类路径,url是网络路径或磁盘路径资源

    <properties resource="org/mybatis/example/config.properties">
    </properties>

     导入后就可以用${}进行属性引用,如配置dataSource的几个属性

    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>

    Mybatis<setting>的使用

    格式

    <settings>
      <setting name="mapUnderscoreToCamelCase" value="false"/>
    </settings>

    mapUnderscoreToCamelCase配置后查询时会自动将数据表的_命名格式转换成驼峰命名,然后对实体bean进行注入。如user_name会转成userName;

    Mybatis<mappers>的使用

    mappers用作指定要映射文件的位置

    使用格式

    <mappers>
      <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
      <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
      <mapper resource="org/mybatis/builder/PostMapper.xml"/>
    </mappers>

    Mapper可以添加resource URL class属性

    Resource:指定类路径的xml文件

    URL:从网络获取xml文件

     

    如何将映射xml文件与dao接口建立对应关系

    方式一、将xml和接口类放在同一目录下,直接指定接口类的全限类名

    方式二、基于注解的接口类

    推荐: 重要Dao接口需要写SQL映射文件

    不重要,简单的Dao接口使用注解

    <package>批量注册 name属性指定包名 自动扫描包内的xml文件

    如何在添加数据后让方法返回这条数据的id

    在<intsert >中添加useGeneratedKeys="true" keyProperty="" 两个属性

    keyProperty指定将id注入Bean的哪个属性

    Oracle不支持自增id是从序列中拿到,然后插入到数据表

    可以在<insert>查询语句前添加<selectKey keyProperty=”id” order=”before”>标签

    从序列中获取一个id : select EMPLOYEES_SQL.nextval from dual ,然后注入到beanid

    然后再查询填充其他数据。

     

    参数的传递

    当只传一个参数时,#{paramName},paramName可以随便命名

    当传入多个参数时,会被封装成一个map

    Key :param1,param2,...paramN;1,2....N

    Value :真实值

    所以需要使用#{param1}#{1}

    如果想简单化

    方法一、可以在Dao的方法参数添加@Param注解,自定义Key的值

    方法二、如果参数时业务逻辑的数据模型,可以传入POJO,这样可以用#{attrName}获取

    方法三、如果参数不是业务逻辑模型数据,可以传入MAP,这样可以用#{keyName}获取

    方法四、如果多个参数不是业务模型数据,但要经常使用,可以编写TO(Transfer Object)数据传输对象

    Page{

    Int index;

    Int size;

    }

    如果传入的的是collectionListSet)类型或数组,会被特殊处理

    Key=Collection(collection) 或者Listlist

    关于取值符号#{}

    #{}${}都可以进行取值

    区别:

    #{}:以预编译的形式(可以防止SQL注入),将参数设置到SQL语句中,PrepareStatement

    ${}:取出的值直接拼装到SQL语句中

    大多情况下取参数使用#{}

    原生jdbc不支持占位符的地方可以使用${}进行取值

    例如:使用分表,按年份拆表

    Select * from ${tableName};

    #{}:更丰富的用法

    规定参数规则

    JavaTypejdbcTypemode(存储过程)、numericScale

    resultMaptypeHandlerjdbcTypeNameexpression(未来准备支持的功能)

    jdbcType通常需要在某种特定的条件下被设置;

    在我们数据为null的时候,有些数据库可能不能识别mybatisnull的默认处理。如Oracle

    报错JdbcType OtherType:无效类型。

    因为mybatis对所有NULL映射的都是原生JdbcOtherType类型

    解决方法:

    1、#{email,jdbcType=OTHER};

    2、jdbcTypeForNull=NULL

  • 相关阅读:
    《SQL Server 2008从入门到精通》--20180628
    2019国赛
    [蓝桥杯2020] 湖北省省赛
    2019第十届蓝桥杯B组决赛题解第五题
    试题 算法提高 分解质因数
    大数相加减
    试题 算法提高 汉诺塔
    试题 算法提高 欧拉函数
    试题 算法提高 天天向上-dp
    算法训练 猴子吃包子-构造
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/7842873.html
Copyright © 2020-2023  润新知