您的位置:首页 > 大数据 > 人工智能

mybaits一些基础应用

2017-08-24 14:30 134 查看

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中开启驼峰匹配:

<?xml
version="1.0"encoding="UTF-8"
?>
<!DOCTYPE
configuration
  PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  
<!-- 引入外部资源文件,resource:classpath路径,url:绝对路径(不建议使用)
-->
   <properties
resource="jdbc.properties"></properties>
  
<settings>
     
<!-- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接)
-->
     
<setting
name="mapUnderscoreToCamelCase"value="true"/>
  
</settings>
   <environments
default="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

<?xml
version="1.0"encoding="UTF-8"
?>
<!DOCTYPE
configuration
  PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  
<!-- 引入外部资源文件,resource:classpath路径,url:绝对路径(不建议使用)
-->
   <properties
resource="jdbc.properties"></properties>
   <settings>
     
<!-- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接) -->
     
<setting name="mapUnderscoreToCamelCase"value="true"/>
   </settings>
  
<typeAliases>
     
<!-- 类型别名:type-pojo类的全路径,alias-别名名称(可随便写,推荐和类名一致)
-->
     
<typeAlias
type="cn.itcast.mybatis.pojo.User"alias="user"
/>
  
</typeAliases>
   <environments
default="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>
  
e39e
</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:包路径,扫描的别名就是类名,并且大小写不敏感
-->
     
<package
name="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
任何兼容的NUMERIC或DOUBLE类型,作为位置存储(而不是代码本身)。

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来管理数据源,来做到环境的分离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: