MyBatis开发中如何配置?

10 篇文章 0 订阅
7 篇文章 0 订阅

一、纯Springboot环境下

配置在properties.yml 、properties.xml下,该文件放置在resosurces下,建议使用properties.yml,层次感强。

可以多个配置文件或配置,然后指明active的配置是那组。

二、Springboot+MyBatis整合环境下

可以配置在properties.yml 、properties.xml下,默认调用。

Mybatis核心配置文件一般命名为MyBatis-config.xml(也可以是其他名称),核心配置文件一般存放的位置:src/main/resources

1、直接配置

也快配置在MyBatis核心配置文件的<enviroments> 标签的子标签<enviroment>下:

(1)单一数据源环境配置

           <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

注:

1)enviorments:配置多个连接数据库环境,default:默认使用的环境的ID

2)enviroment:配置某个具体的环境,id:表示连接数据库有的唯一标识,不能重复

3)transactionManager:设置事务管理方式,type:"JDBC/MANAGED":

        JDBC:表示当前环境中,执行sql时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动;

        MANAGED:表示被管理,例如被Spring

(2)多数据源环境配置

可以在environments标签下,配置多个标签:多数据源,进行多环境的配置

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <environment id="mybatisDB">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisDB?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

配置说明:

(1)<environments default="development"> 表示默认的环境配置,通过id来指定

(2)一个环境下对应一个SqlSessionFactory 对象

(3)使用默认的环境

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
 SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
 

(4)指定mybatis的环境
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"mybatisDB");

三、properties标签

        properties标签是用来加载Mybatis外部属性的标签,该标签用来将内部的配置外在化,即通过外部的配置来动态为内部定义的属性赋值。具体方式如下:

(2)使用配置文件加载属性的三种方式

  • 使用resource加载相对路径下配置文件中的属性
    • <properties resource="jdbc.properties" ></properties>
  • 使用url加载绝对路径下配置文件的属性
  • <properties url="file:///Users/yinyw/Documents/WorkSpace/MybatisDemo/src/main/resources/jdbc.properties" ></properties>
  • 使用property加载属性
<properties>
    <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
    <property name="jdbc.url" value="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</properties>

(2)、在配置文件中使用属性

<dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</dataSource>

(3)在JAVA代码中使用属性

@Test
public void getProperty() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    Configuration configuration = sqlSessionFactory.getConfiguration();
    Properties properties = configuration.getVariables();
    String property = properties.getProperty("jdbc.driver");
    System.out.printf("jdbc.driver:" + property);
}

4、使用时的注意事项

  • resource和url不能同时使用,但是resource和property或者url和property能同时使用。
  • 如果同时使用了resource和property或者是url和property,并且两者存在重复的属性,那么以resource或url中的属性为准,因为mybatis在加载配置的属性时,先加载property中的属性,后加载resource或url中的属性,所以在加载后者时,前者的属性就会被覆盖。
  • 除了上述在xml文件中配置属性之外,还可以在JAVA代码中为mybatis配置属性,并且这种方式配置的属性优先级最高,也就是说如果配置文件中配置的属性和下面JAVA代码中配置的属性重复了,那么以JAVA代码中配置的属性为准。具体使用如下所示:
@Test
public void getProperty() throws IOException {
    // 创建Properties对象,用来存放属性
    Properties properties = new Properties();
    properties.setProperty("yinyw.mybatisDemo.port","9888");
    // 在mybatis构建SqlSessionFactory时将Properties对象作为参数传入进去
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream,properties);
}
  • 属性命名建议:项目名.模块名.属性名。这样做的好处在于易识别。

2、properties标签的属性及子标签的值

通过properties标签的resource属性,指明外部的配置文件,提供表MyBatis核心配置文件读取其中的值。

<properties resource="org/mydemo/config/config.properties">

        <property name="username" value="dev_user"/>

        <property name="password" value="f2fa3!33tyyg"/>

</properties></span>

MyBatis核心配置文件中的enviroment的子标签dataSource中的值,将被以上动态替换。

<datasource type="pooled">

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

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

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

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

</datasource>

以上, username 和 password 将会由 properties 元素中设置的相应值来替换。driver 和 url 属性将会由 config.properties 文件中对应的值来替换。

例:

(1) MyBatis-config.xml核心配置文件中

<properties resource="jdbc.properties"></properties>
(2) jdbc.properties文件:

        jdbc.driver=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql://localhost:3306/mybatis
        jdbc.username=root
        jdbc.password=12345

注:

dataSource:配置数据源,

type:"POOLED\UPOOLED\JNDI"、POOLED:表示使用数据库连接池缓存数据库连接(最经常使用)、UNPOOLED:表示不适用数据库连接池、JNDI:表示使用上下文数据源

三、类型别名配置

设置一个别名来代替一个类的全类名,设置完以后,就可以在Mapper.xml里的resultType/resultMap中直接写别名大小写不敏感

typeAliases单个设置别名,ypeAlias设置一个类的类型别名

  • type:一个类型的全类名,必须设置

  • alias:这个类型的别名,可以不设置,默认自动为类名,并且大小写不敏感

<typeAliases>
<typeAlias type="全类名" alias="别名"></typeAlias>
</typeAliases>

package包下所有类都自动设置别名

以包为单位,自动设置指定包下所有类的类型别名,默认为该类的类名并且大小写不敏感

<package name="com.atguigu.mybatis.pojo"></package>

预设的类型别名,这些别名都大小写不敏感

四、Mapper映射配置

1、映射文件命名规则

  • 表对应的实体类的类名+Mapper.xml

  • 存放位置为src/main/resource/mappers

表t_user,映射实体类User,映射文件UserMapper.xml

2、面向接口编程

表——实体类——mapper接口——映射文件

  • 映射文件的namespace和mapper全类名一致

  • 映射文件中sql语句的id和mapper接口的方法名一致

3、引入映射文件配置

mapper单个引入

<mappers>
        <mapper resource="mappers/UserMapper.xml"></mapper>
</mappers>

<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
    <insert id="insertUser" >
                insert into t_user values(null,"asd","123","12","m","123@123.com")
    </insert>    
</mapper>

其中,UserMapper为针对实体类(pojo)的Mapper文件名,这个mapper文件针对该类定义了一个数据库操作。

4、调用

直接以sqlSession调用

可以在在java程序中,用sqlSession的相应数据库操作函数调用

        sqlSession.insert("insertOneCar",map);

创建Mapper接口调用

        MyBatis中的Mapper接口相当于以前的Dao,区别在于mapper仅仅是接口,不需要提供实现类(其实现,由Mybatis根据MyBatis配置文件中指定的mapper标签的属性、sql语句去组装)

public interface UserMapper {
        public int insertUser();
​}

其中,insertUser()映射为对数据集表的操作。

package引入包下所有映射文件

  • mapper接口所在的包要和映射文件所在的包的名字一致

  • mapper接口和映射文件的名字一致

  • 创建目录的时候需要以斜线进行分割,而不是点

<mappers>
        <package name="com.atguigu.mybatis.mapper"></package>
</mappers>

补充:优先级别

mybatis 将读取核心配置文件,按照下面的顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值