mybatis的环境搭建以及问题

1、mybatis中3个重要的类或者接口

1)SqlSessionFactoryBuilder类

    用它来创建工厂对象,它重载了9次build()方法,我们常用build(inputstream)来创建工厂.
    该类通常在项目中以单例的形式存在。
    API列表:
    build(Reader reader)
    build(InputStream inputStream)
    build(InputStream inputStream, String environment)

2)SqlSessionFactory接口

    用它来创建对指定数据库的一个连接对象,即sqlsession。
    它重载了8次openSession()方法,这些方法都可以用来产生sqlsession连接对象。
    该类通常在项目中以单例的形式存在。
    API列表:
    openSession()                                    默认非自动提交事务
    openSession(boolean autoCommit)                    指定true或者false提交事务
    openSession(Connection connection);             通过一个JDBC连接对象构建sqlsession
    openSession(TransactionIsolationLevel level);    指定事务隔离级别
    getConfiguration()方法                            返回Configuration对象

4)SqlSession接口

    用它可以执行增删改查的命令,还可以用它获取mapper接口,还可以管理JDBC事务(例如手动或者自动提交、回滚)。
    一句话,它代表了一次跟数据库的连接会话,跟JDBC中的Connection对象相似。另外,事务就是一个不可分割的原子性的业务行为,即要么都成功,要么都失败。
    该类通常在项目中以多例的形式存在,并且要注意线程安全问题,不能声明为实例变量,否则一个线程关闭了sqlsession会导致其他线程无法使用。
    API列表:
    insert()
    delete()
    update
    selectXXX()系列
    commit()
    rollback()
    close()
    getMapper()
    clearCache()
    flushStatements()
    getConnection()        返回JDBC的一个Connection对象
    getConfiguration()    返回Configuration对象

2、和配置相关的类

1)Configuration类

    用它封装mybatis-config.xml和mapper.xml里面所有的信息,另外还给出了一些默认配置,例如:
    safeRowBoundsEnabled = false;
    safeResultHandlerEnabled = true;
    mapUnderscoreToCamelCase = false;
    lazyLoadingEnabled = false;
    aggressiveLazyLoading = true;
    multipleResultSetsEnabled = true;
    useGeneratedKeys = false;
    useColumnLabel = true;
    cacheEnabled = true;
    defaultStatementTimeout
    resultMaps
    keyGenerators
    有关事务设置的........
    JDBC
    MANAGED
    有关连接池设置的........
    JNDI
    POOLED
    UNPOOLED
    有关缓存设置的........
    PERPETUAL
    FIFO
    LRU
    SOFT
    WEAK
    ..........等等。

    
    API列表:
    属性的get/set方法
    addMapper(Class<T> type)        向配置对象中添加指定的mapper接口到MapperRegistry中
    addMappers(String packageName)    向配置对象中添加指定包下的mapper接口到MapperRegistry中

    
    包含的一些重要的工具类:
    MapperRegistry
    TypeAliasRegistry
    TypeHandlerRegistry
    CacheRefResolver
    ResultMapResolver
    JdbcTransactionFactory
    ManagedTransactionFactory
    JndiDataSourceFactory
    PooledDataSourceFactory
    UnpooledDataSourceFactory
    ParameterHandler
    ResultSetHandler
    StatementHandler
    SimpleExecutor
    BatchExecutor
    ReuseExecutor
    CachingExecutor
    InterceptorChain
    Transaction
    JdbcType
    Environment
    MappedStatement
    举例:config.getMappedStatement("selectByNameAndClass").getTimeout()获得id为“selectByNameAndClass”对应的SQL设置中的timeout的值。
    可见,Configuration类封装了整个项目中所有的xml配置信息,包括mybatis-config.xml和mapper.xml,这些信息都是在项目启动的时候就读进去的,运行时由于配置错误,会导致看似不相关的SQL执行失败。

    
    映射详情:
    <parameterMap>标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。
    <resultMap>标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。
    每一个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

    

2、认识mybatis-config.xml配置文件

1) 标签,读取properties类型的配置文件

2) 为类指定别名,以便在其他地方引用,例如在mapper.xml里面引用。

    有两种方式为类取别名:
    第一,单个取:<typeAlias alias="Address" type="dashuju.mybatis.pojo.Address"/>
    第二,批量取:<package name="dashuju.mybatis.pojo"/>

3)environments和environment标签

    配置程序的运行环境,例如生产环境、测试环境等。
    如何切换运行环境?更改<environments default="test">中的default值即可。

4)transactionManager标签

    指定事务的管理方式,每一种方式都有对应的处理类,type的值有如下两个,不分大小写,不能写错否则报找不到对应的类:
    JDBC
    MANAGED

    

5)dataSource标签

    连接池类型,type的值有如下三个,每一种方式都有对应的处理类,不分大小写,不能写错否则报找不到对应的类:
    POOLED:会从连接池取一个连接,用完后再放回连接池,见日志
    UNPOOLED:会每次产生一个新连接,用完后直接关闭,见日志
    JNDI:需要容器支持,配置方式跟上述两种方式不同,见源码JndiDataSourceFactory类,建立一个properties文件,并且包含如下键:
    data_source=xxxxxxx
    env.xxx=xxxxxxx
    initial_context=xxxxxxx

    

6)property标签

    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    注意name的值区分大小写并且不能改变,变量的引用是${}格式,不是#{}

7)mappers标签

    加载映射文件,有3种方式:
    第一,<mapper resource="dashuju/mybatis/mapper/StudentMapper.xml" />
    第二,<mapper class="dashuju.mybatis.mapper.StudentMapper"/> 
    第三,<package name="dashuju.mybatis.mapper"/>
    第一种方式XXXmapper.xml的文件名称可以跟mapper接口的文件名称不一致,即只要能找到该xml就可以。
    第二、第三种由于扫描的是类,所以要求xml和mapper名称要一致,否则运行mapper接口方法时报找不到方法的异常。

    

3.xxxMapper.xml配置文件

1)namespace命名空间

    namespace是用于绑定Dao接口的,即面向接口编程,它的值是mapper接口的完全限定名也可以是任意取的名称。
    绑定后,mapper接口中的方法就可以与xml映射文件中的SQL语句的ID一一对应。
    例如dashuju.mybatis.mapper.StudentMapper。

    

2)缓存移除机制eviction的值:

    PERPETUAL
    FIFO
    LRU
    SOFT
    WEAK

4、mybatis中的常量,见源码DynamicContext类、DefaultSqlSession类

    _parameter
    _databaseId
    list
    array

    

5、mybatis中的数据类型对照表,见源码TypeAliasRegistry类

    string—String
    byte—Byte
    long—Long
    short—Short
    int—Integer
    integer—Integer
    double—Double
    float—Float
    boolean—Boolean
    byte[]—Byte[]
    long[]—Long[]
    short[]—Short[]
    int[]—Integer[]
    integer[]—Integer[]
    double[]—Double[]
    float[]—Float[]
    boolean[]—Boolean[]
    _byte—byte
    _long—long
    _short—short
    _int—int
    _integer—int
    _double—double
    _float—float
    _boolean—boolean
    _byte[]—byte[]
    _long[]—long[]
    _short[]—short[]
    _int[]—int[]
    _integer[]—int[]
    _double[]—double[]
    _float[]—float[]
    _boolean[]—boolean[]
    date—Date
    decimal—BigDecimal
    bigdecimal—BigDecimal
    object—Object
    date[]—Date[]
    decimal[]—BigDecimal[]
    bigdecimal[]—BigDecimal[]
    object[]—Object[]
    map—Map
    hashmap—HashMap
    list—List
    arraylist—ArrayList
    collection—Collection
    iterator—Iterator
    ResultSet—ResultSet

6、标签

sql

include

foreach

where

if

一、SQL映射文件基础file

  1. resultType="Student"和resultMap="ResultMapStudent"的区别和注意事项:

1)区别,后者会走resulmap并且会执行assiction等语句

2)resultType即使返回是list也是可以处理的

3)Student是别名

二、主键生成file

三、参数传递

file

四、高级映射file

ResultMap主要解决:

1)属性值和列名不一致

2)一对一、一对多、多对多

通常,使用ResultType即可,不要滥用ResultMapfile

五、cache元素file

六、动态SQLfile

七、resultMap元素file

八、Collection元素file

九、#和$的使用file

获取更多资源请关注微信公众号:AKA程序王

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值