mybaits一些基础应用

来源:互联网 发布:jquery查找子元素数组 编辑:程序博客网 时间:2024/03/29 22:09

Mapper接口的动态代理实现,需要满足以下条件:

1. 映射文件中的命名空间与Mapper接口的全路径一致

2. 映射文件中的statementId与Mapper接口的方法名保持一致

3. 映射文件中的statement的ResultType必须和mapper接口方法的返回类型一致(即使不采用动态代理,也要一致)

4. 映射文件中的statement的parameterType必须和mapper接口方法的参数类型一致(不一定,该参数可省略)

1.1.     settings设置

settings参数有很多,咱们只需要学习以下4个参数就行了

设置参数

描述

有效值

默认值

cacheEnabled

该配置影响的所有映射器中配置的缓存的全局开关。

true | false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。

true | false

false

aggressiveLazyLoading

当启用时,带有延迟加载属性的对象的加载与否完全取决于对任意延迟属性的调用;反之,每种属性将会按需加载。

true | false

true

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。

true | false

False

 

开启驼峰匹配:完成经典的数据库命名到java属性的映射

              经典数据库命名:如果多个单词之间,通常使用下划线进行连接。

              java中命名:第二个单词首字母大写。

驼峰匹配:相当于去掉数据中的名字的下划线,和java进行匹配

mybatis-config.xml中开启驼峰匹配:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

  PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <!-- 引入外部资源文件,resourceclasspath路径,url:绝对路径(不建议使用) -->

   <propertiesresource="jdbc.properties"></properties>

   <settings>

     <!-- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接) -->

     <settingname="mapUnderscoreToCamelCase"value="true"/>

  </settings>

   <environmentsdefault="development">

      <environment id="development">

          <transactionManager type="JDBC"/>

          <dataSource type="POOLED">

             <property name="driver"value="${driver}"/>

             <property name="url"value="${url}"/>

             <property name="username"value="${username}"/>

             <property name="password"value="${password}"/>

          </dataSource>

      </environment>

   </environments>

   <mappers>

      <mapper resource="UserMapper.xml"/>

      <mapper resource="UserDaoMapper.xml"/>

   </mappers>

</configuration>

1.1.  typeAliases

咱们在映射文件中用到java类型时,都是使用类的全路径,书写起来非常麻烦

解决方案:

类型别名是为Java 类型命名的一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

1.1.1.        方式一:typeAlias

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

  PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <!-- 引入外部资源文件,resourceclasspath路径,url:绝对路径(不建议使用) -->

   <propertiesresource="jdbc.properties"></properties>

   <settings>

      <!-- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接) -->

      <setting name="mapUnderscoreToCamelCase"value="true"/>

   </settings>

   <typeAliases>

     <!-- 类型别名:type-pojo类的全路径,alias-别名名称(可随便写,推荐和类名一致) -->

     <typeAliastype="cn.itcast.mybatis.pojo.User"alias="user"/>

  </typeAliases>

   <environmentsdefault="development">

      <environment id="development">

          <transactionManager type="JDBC"/>

          <dataSource type="POOLED">

             <property name="driver"value="${driver}"/>

             <property name="url"value="${url}"/>

             <property name="username"value="${username}"/>

             <property name="password"value="${password}"/>

          </dataSource>

      </environment>

   </environments>

   <mappers>

      <mapper resource="UserMapper.xml"/>

      <mapper resource="UserDaoMapper.xml"/>

   </mappers>

</configuration>

缺点:每个pojo类都要去配置。

1.1.1.        方式二:package

扫描指定包下的所有类,扫描之后的别名就是类名,大小写不敏感(不区分大小写),建议使用的时候和类名一致。

   <typeAliases>

      <!-- 类型别名:type-pojo类的全路径,alias-别名名称(可随便写,推荐和类名一致) -->

      <!-- <typeAlias type="cn.itcast.mybatis.pojo.User"alias="user" /> -->

      <!-- 开启别名包扫描,name:包路径,扫描的别名就是类名,并且大小写不敏感 -->

     <packagename="cn.itcast.mybatis.pojo"/>

   </typeAliases>

在映射文件中使用类型别名:

 

已经为普通的 Java类型内建了许多相应的类型别名。它们都是大小写不敏感的,需要注意的是由于重载原始类型的名称所做的特殊处理。

别名

映射的类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator


1.1.     typeHandlers(类型处理器)

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java类型。下表描述了一些默认的类型处理器。

 

类型处理器

Java 类型

JDBC 类型

BooleanTypeHandler

java.lang.Boolean,boolean

任何兼容的布尔值

ByteTypeHandler

java.lang.Byte,byte

任何兼容的数字或字节类型

ShortTypeHandler

java.lang.Short,short

任何兼容的数字或短整型

IntegerTypeHandler

java.lang.Integer,int

任何兼容的数字和整型

LongTypeHandler

java.lang.Long,long

任何兼容的数字或长整型

FloatTypeHandler

java.lang.Float,float

任何兼容的数字或单精度浮点型

DoubleTypeHandler

java.lang.Double,double

任何兼容的数字或双精度浮点型

BigDecimalTypeHandler

java.math.BigDecimal

任何兼容的数字或十进制小数类型

StringTypeHandler

java.lang.String

CHAR VARCHAR类型

ClobTypeHandler

java.lang.String

CLOB LONGVARCHAR类型

NStringTypeHandler

java.lang.String

NVARCHAR NCHAR类型

NClobTypeHandler

java.lang.String

NCLOB 类型

ByteArrayTypeHandler

byte[]

任何兼容的字节流类型

BlobTypeHandler

byte[]

BLOB LONGVARBINARY类型

DateTypeHandler

java.util.Date

TIMESTAMP 类型

DateOnlyTypeHandler

java.util.Date

DATE 类型

TimeOnlyTypeHandler

java.util.Date

TIME 类型

SqlTimestampTypeHandler

java.sql.Timestamp

TIMESTAMP 类型

SqlDateTypeHandler

java.sql.Date

DATE 类型

SqlTimeTypeHandler

java.sql.Time

TIME 类型

ObjectTypeHandler

Any

其他或未指定类型

EnumTypeHandler

Enumeration Type

VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)

EnumOrdinalTypeHandler

Enumeration Type

任何兼容的NUMERICDOUBLE类型,作为位置存储(而不是代码本身)。

1.1.     plugins(插件又称拦截器)

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括:

·       Executor (update, query, flushStatements, commit,rollback, getTransaction, close, isClosed)

·       ParameterHandler (getParameterObject,setParameters)

·       ResultSetHandler (handleResultSets,handleOutputParameters)

·       StatementHandler (prepare, parameterize, batch,update, query) 


1.1.     environments(环境)

MyBatis 可以配置成适应多种环境,例如,开发、测试和生产环境需要有不同的配置;

尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

虽然,这种方式也可以做到很方便的分离多个环境,但是实际使用场景下,我们更多的是选择使用spring来管理数据源,来做到环境的分离。


1.1.     environments(环境)

MyBatis 可以配置成适应多种环境,例如,开发、测试和生产环境需要有不同的配置;

尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

虽然,这种方式也可以做到很方便的分离多个环境,但是实际使用场景下,我们更多的是选择使用spring来管理数据源,来做到环境的分离。


原创粉丝点击