mybatis核心配置介绍

mybatis核心配置

【mybatis全局配置介绍】

​ mybatis-config.xml,是MyBatis的全局配置文件,包含全局配置信息,如数据库连接参数、插件等。整个框架中只需要一个即可。

1、mybatis全局配置文件是mybatis框架的核心配置,整个框架只需一个;
2、mybatis全局配置文件中的配置顺序:注意如果配置多项,必须按照以下顺序进行配置
	properties:属性配置
	settings:设置
	typeAliases:类型别名设置
	typeHandlers:类型处理器
	enviroments:环境配置
		environment(环境变量)
		transactionManager(事务管理器)
		dataSource(数据源)
	mappers:映射器

1、properties(属性)

【作用】

1、加载外部的java资源文件(properties文件);
2、通过子标签property设置属性;

【需求】

使用properties属性,配置数据库连接参数;
【1】property标签设置
1、通过properties的子标签设置属性;
2、使用${key}获取设置的属性值;
【2】加载外部properties
第一步:新建资源文件

新建jdbc.properties文件,将连接参数抽取到配置文件中:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db4
username=root
password=1234
第二步:引入资源文件

在mybatis-config.xml文件中加载jdbc.properties文件;通过properties的属性resource引入;

在这里插入图片描述

【注意事项】:子标签和属性resource同时加载一个变量,先加载子标签,然后在加载resource关联的外部文件的值,那么子标签中的内容会被覆盖。此时子标签存在就没有意义了。

在这里插入图片描述

2、settings(设置)

settings参数有很多,今天咱们先学习驼峰匹配-mapUnderscoreToCamelCase。翻译过来就是映射下划线到驼峰式命名。

在这里插入图片描述

【作用】

在这里插入图片描述

开启驼峰匹配:完成经典的数据库命名到java属性的映射
		经典数据库命名:如果多个单词之间,通常使用下划线进行连接。
		java中命名:第二个单词首字母大写。
驼峰匹配:相当于去掉数据库的数据中的名字的下划线,和java进行匹配  

【应用场景】

从数据库中查到数据的字段名user_name和实体类属性名userName,不一致,导致查到的数据无法封装到实体类中。
但是,实体类中的属性userName符合驼峰命名,数据库字段名user_name符合数据库经典字段命名。

在这里插入图片描述

如果此时直接查询数据,那么用户名是null。

在这里插入图片描述

【1】配置驼峰映射

​ 在mybatis-config.xml中做如下配置:

settings设置:
 mapUnderscoreToCamelCase :驼峰自动映射配置 ,值是true表示开启驼峰自动映射。满足条件:数据库字段名  user_name   ,实体类属性名 userName
<!--
    2、settings设置:
 mapUnderscoreToCamelCase :驼峰自动映射配置 满足条件:数据库字段名  user_name   ,实体类属性名 userName
 -->
<settings>
  <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

​ 运行测试,查看结果:

在这里插入图片描述

【小结】

1、开启驼峰自动映射的作用:user_name ====> userName;
2、注意事项:字段名必须符合user_name格式,属性名必须符合驼峰命名规则;
【2】解决字段名和属性名不一致的方法
	如果数据库字段名和属性名不一致,或者是也不满足上面的命名规则。可以通过在SQL语句中为字段名取别名进行映射。

在这里插入图片描述

3、typeAliases(类型别名)

【1】作用

类型别名是给类的全限定名称(包名.类名) 取一个短名称。存在的意义仅在于用来减少类完全限定名的冗余。例如:

在这里插入图片描述

​ 这些全限定类名可通过设置类型别名–短名称代替。类型别名的设置有以下几种方式:

方式:使用typeAliases标签的子标签package包扫描映射别名;

【2】应用

【方式】package

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

设置别名:

<!--
        三、typeAliases(类型别名)
            【1】作用:给类的全限定名称 取一个短名称   com.heima.mybatis.pojo.User==>User
            【2】用法:
                1、单独取别名:<typeAlias type="com.heima.mybatis.pojo.User" alias="User"/>
                2、批量取别名:<package name="com.heima.mybatis.pojo"/> 扫描到当前包下的所有类
                              类的类名==》别名
    -->
    <typeAliases>
      
        <!--扫描com.itheima.sh.pojo包下所有的类,类名直接作为别名(别名不区分大小写)-->
        <package name="com.itheima.sh.pojo"/>
    </typeAliases>

使用别名:

在这里插入图片描述

【内置别名】

​ 这是一些为常见的 Java 类型内建的相应的类型别名。它们都是不区分大小写的,注意对基本类型名称重复采取的特殊命名风格。

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

【代码演示】

<!--parameterType="int" 表示sql语句参数id的类型,int是Integer的别名-->
    <select id="queryById" resultType="user" parameterType="int">
        select * from user where id = #{id}
    </select>

4、typeHandlers(类型处理器)【了解】

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

在这里插入图片描述

<!--
        四、typeHandlers(类型处理器)
            数据库数据类型:varchar    ===StringTypeHandler===> 实体类:String
            数据库数据类型:double   DoubleTypeHandler  实体类中的数据: java.lang.Double 
-->

5、environments

	MyBatis 可以配置成适应多种环境,例如,开发、测试和生产环境需要有不同的配置;
尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。
虽然,这种方式也可以做到很方便的分离多个环境,但是实际使用场景下,我们更多的是选择使用spring来管理数据源,来做到环境的分离。
      父标签: environments(环境配置)
			子标签:
                environment(环境变量)
                transactionManager(事务管理器)
                dataSource(数据源) 

【1】默认环境设置

第一步:在environments标签中配置多个environment,通过属性default指定一个默认环境配置;

在这里插入图片描述

第二步:在构建SqlSessionFactory时,可指定具体环境,如果不指定就使用默认的环境配置;

在这里插入图片描述

【2】指定环境设置

第一步:在environments中配置多个环境

在这里插入图片描述

第二步:在构建SqlSessionFactory时,通过environment的id指定环境

在这里插入图片描述

代码演示:

<!--mybatis环境的配置-->
    <!--
        五、 environments(数据库环境配置)
                开发过程中会使用第三方的连接池:druid,C3P0
                Spring框架管理连接池
    -->
    <!--<environments default="test">-->
    <environments default="development">
        <!--通常我们只需要配置一个就可以了, id是环境的名字 -->
        <environment id="development">
            <!--事务管理器:由JDBC来管理-->
            <transactionManager type="JDBC"/>
            <!--数据源的配置:mybatis自带的连接池-->
            <dataSource type="POOLED">
                <!--
                    这里的value="${driver}"  driver 是子标签property的name属性值
                -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db4"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>


        <!--通常我们只需要配置一个就可以了, id是环境的名字 -->
        <environment id="test">
            <!--事务管理器:由JDBC来管理-->
            <transactionManager type="JDBC"/>
            <!--数据源的配置:mybatis自带的连接池-->
            <dataSource type="POOLED">
                <!--
                    这里的value="${driver}"  driver 是子标签property的name属性值
                -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db4"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    @Test
    public void queryById( ) throws Exception {
        //获取mapper接口的动态代理实现

        //1、从xml中构建SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //这里指定了环境为test
//        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
        //build不方法不指定环境就使用默认的 <environments default="development">
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3、获取UserMapper接口的动态代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = userMapper.queryById(1);
        System.out.println("user = " + user);
    }

【注意事项】

	虽然,这种方式也可以做到很方便的分离多个环境,但是实际使用场景下,我们更多的是选择使用第三方的连接池:druid,C3P0。并且使用spring来管理数据源(连接池),来做到环境的分离。 

5.6、mappers(映射器)

mappers(映射器):UserMapper.xml====>UserMapper.java接口 关联.

作用:维护接口和映射文件之间的关系.

​ 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。方式如下:

使用方式:
1、加载映射文件,关联UserMapper.java接口
【1】 从src下加载映射文件;

​ 2、加载接口,关联映射文件
​ 条件:1、接口名和映射文件名保持一致;2、路径保持一致;
​ 【2】批量加载class:

方式一:加载映射文件方式resource

​ 在mybatis-config.xml文件中,通过mapper标签的resource属性引入当前工程src下的映射文件。

在这里插入图片描述

【缺点】

有多少个映射文件就要配置多少次,麻烦。

方式二:加载接口,关联映射文件方式package

在mybatis-config.xml中,开启包扫描:扫描包下的所有接口和对应的映射文件。

条件:1、接口名和映射文件名保持一致;2、路径保持一致;

在这里插入图片描述

在mybatis-config.xml配置mapper接口的全路径:

    <mappers>
        <package name="com.itheima.sh.dao"/>
    </mappers>

【原理】:

扫描目标包目录下的mapper接口,并按照class的方式找到接口对应的映射文件。

其条件和设置class的条件一样:

1、映射文件和mapper接口在同一个目录下
2、文件名必须一致
3、映射文件的namespace必须和mapper接口的全路径保持一致

【缺点】:

1、需要遵守的条件太多
2、mapper.xml和mapper.java没有分离。
【mappers小结】:
mappers:配置映射文件
	mapper
		resource:配置类路径下的映射文件(掌握)
		
	   package:配置接口包扫描(掌握)
            1、要求接口和映射文件在同一个包下
            2、要求接口和映射文件同名
            3、要求namesapce的值必须为接口的全限定类名

【推荐使用】resource加载映射文件,如果使用注解开发只能使用 package方式,注解开发不能使用加载配置文件的方式,因为注解已经取代了xml文件。所有注解都使用在接口的方法上。

7、全局配置小结

一、全局配置:如果需要配置多个,必须按照以下顺序
    properties(属性)重点
    settings(设置)重点
    typeAliases(类型别名) 重点
    typeHandlers(类型处理器)
    environments(环境配置)
        environment(环境变量)
        transactionManager(事务管理器)
        dataSource(数据源)
    mappers(映射器)重点
二、常用配置:
	1、properties(属性)
		【作用】定义一些属性或者加载外部的资源文件
		【用法】
		   2、加载外部的资源文件(src, jdbc.properties)掌握
				<properties resource="jdbc.properties"></properties>
				获取参数: ${driver}
	2、settings(设置):
		驼峰自动映射:数据库下划线命名:user_name  ===》实体类属性命名:userName
			    <settings>
                      <setting name="mapUnderscoreToCamelCase" value="true"/>
                  </settings>
			说明:如果不满足驼峰式命名,查询时起别名。
   3、typeAliases(类型别名)
		【作用】给类的全名称 取 短名称  com.heima.pojo.User===>User,不区分大小写
		【配置】
			 <typeAliases>
           
                <package name="com.heima.mybatis.pojo"/> 掌握
            </typeAliases>

   4、mappers(映射器)
		【作用】把映射文件   和  接口 进行绑定
		【配置】
			加载xml文件:
				1、mapper resource="src下的映射文件"    多
			
			加载接口:【1】映射文件和接口名称必须一致; 【2】路径一致
				2、接口扫描: package name="com.heima.mybatis.dao" 多
  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攒了一袋星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值