Mybatis学习 && 配置解析

1、核心配置文件

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

注意:在增加配置时要严格按照指定顺序,否则可能会报错
 

2、environments(环境配置)

默认事务管理器:JDBC

默认连接池:POOLED

MyBatis可以配置成适应多种环境,但每个SqlSessionFactory实例只能选择一种环境。即可以有多个id不同的环境,default就是要使用的那个环境

在这里插入图片描述
 

3、properties(属性)

有三种配置properties的方法:

方法一:使用外部配置文件db.properties,然后使用${}取值

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username = root
password = 123456

<configuration>

    <properties resource="db.properties">properties>

    <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="com/Nana/dao/UserMapper.xml"/>
    mappers>
configuration>

方法二:直接在mybatis配置文件中配置



<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="com/Nana/dao/UserMapper.xml"/>
    mappers>
configuration>

方法三:可以在db.properties中配置一半,在mybatis配置文件中配置一半

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8


<configuration>
    
    <properties resource="db.properties">properties>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="com/Nana/dao/UserMapper.xml"/>
    mappers>
configuration>

注意:如果外部配置文件和mybatis配置文件中有同一字段,优先使用外部配置文件的
 

4、typeAliases(类型别名)

类型别名即为Java类型设置一个端的名字,存在的意义仅在于用来减少类完全限定名的冗余

基本数据类型的别名是在前边加上_,如int的别名为__int

包装类的别名是将首字母变为小写,如Integer的别名为integer

有三种方法可以给实体类取别名:

方法一:在mybatis配置文件中编写typeAliases

<typeAliases>
    <typeAlias type="com.Nana.pojo.User" alias="user">typeAlias>
typeAliases>

方法二:可以指定一个包名,在没有使用注解的时候,会扫描这个包下的所有类,以类名首字母小写作为别名

<typeAliases>
    <package name="com.Nana.pojo">package>
typeAliases>

方法三:在类名前使用注解,注意要导包

import org.apache.ibatis.type.Alias;

@Alias("user")

三种方法选择:第一种可以自定义别名,第二种则不行,如果非要使用第二种还要自定义别名的话要使用注解
 

5、settings(设置)

比较重要的设置:

Mybatis学习 && 配置解析_第1张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lFRC2OYJ-1597330009593)(Mybatis学习笔记.assets/image-20200528105822702.png)]
 

6、mappers(映射器)

每一个Mapper.xml都需要在Mybatis核心配置文件中注册,有三种注册Mapper方法:

方法一:推荐方法!

<mappers>
    <mapper resource="com/Nana/dao/UserMapper.xml"/>
mappers>

方法二:使用class文件

<mappers>
    <mapper class="com.Nana.dao.UserMapper"/>
mappers>

方法三:使用扫描包

<mappers>
    <package name="com.Nana.dao"/>
mappers>

方法二和方法三注意点:

  • 接口和其Mapper配置文件必须同名
  • 接口和其Mapper配置文件必须在同一个包下
     

7、其他配置

  • typeHandlers(类型处理器)
  • objectFactor(对象工厂)
  • plugins(插件)
    • mybatis-generator-core
    • mybatis-plus
    • 通用mapper
       

8、生命周期和作用域

Mybatis运行逻辑关系:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFQjXlmR-1597330009594)(Mybatis学习笔记.assets/image-20200528115331373.png)]

生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder:

  • 生命周期:一旦创建了SqlSessionFactory就不再需要
  • 作用域:局部变量

SqlSessionFactory:

  • 作用:可以简单理解为数据库连接池
  • 生命周期:一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃或者重新创建一个实例
  • 作用域:应用作用域,最简单的是使用单例模式或者静态单例模式

SqlSession:

  • 作用:可以理解为连接到连接池的一个请求

  • 生命周期:SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。用完之后需要赶紧关闭,否则会占用资源

  • 用完之后需要赶紧关闭,
     

9、属性名和字段名不一致问题及解决方案

问题描述:假设数据库中的密码字段字段名为pwd,而在建立实体类的时候该字段对应的属性名为password,就有可能会导致命名有值查出来却为null的情况
 

解决方案一:在查询的select语句中给原来的字段起别名,过于简单粗暴


解决方案二:使用ResultMap

ResultMap特点:

  • 是 MyBatis 中最重要最强大的元素
  • 设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了
  • 最优秀的地方在于,即使对它已经相当了解,但是根本就不需要显示地用到它们
<resultMap id="UserMap" type="User">
	result>
resultMap>

<select id="getUserById" parameterType="int" resultMap="UserMap">
    select * from mybatis.user where id=#{id}
select>

你可能感兴趣的:(#,Mybatis学习,java,mybatis)