首页 > 其他分享 >Mybatis学习_03_配置学习

Mybatis学习_03_配置学习

时间:2023-03-02 22:24:51浏览次数:31  
标签:03 配置文件 作用域 别名 学习 mybatis user Mybatis id

Mybatis学习_03

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

1、环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

image-20230302162847979

 <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/mybatis?useSSL=true&amp;usseUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;usseUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

2、属性(properties)

这些属性可以在外部进行配置,并可以进行动态替换。既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。

新建db.properties文件

image-20230302170112828

driver= com.mysql.cj.jdbc.Driver
urll = jdbc:mysql://localhost:3306/mybatis?useSSL=true&usseUnicode=true&characterEncoding=UTF-8
username=root
pwd=123456

引入到核心配置文件中:

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

替换:

<environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${urll}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${pwd}"/>
    </dataSource>
</environment>

注:

    <properties resource="db.properties">
		<property name="username" value="root"/>
        <property name="password" value="123456"/>   <!--这些属性可以放入db.properties文件里-->
    </properties>

可以在properties里加入属性,如果属性property和外部文件db.properties里的冲突则外部的优先,外部文件里的优先级更高。

3、类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

方式一:

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

未使用别名:

<select id="getUserByID" parameterType="int" resultType="com.zhaolei.pojo.User">
    select * from mybatis.user where id=#{id}
</select>

使用别名;

<select id="getUserByID" parameterType="int" resultType="user">
    select * from mybatis.user where id=#{id}
</select>

方式二:

每一个在包 com.zhaolei.pojo.User 中的 Java User,在没有注解的情况下,会使用 User的首字母小写的非限定类名来作为它的别名。 比如 com.zhaolei.pojo.User 的别名为 user;若有注解,则别名为其注解值。

<typeAliases>
    <package name="com.zhaolei.pojo"/>
</typeAliases>

未使用别名:

<select id="getUserByID" parameterType="int" resultType="com.zhaolei.pojo.User">
    select * from mybatis.user where id=#{id}
</select>

使用别名;

<select id="getUserByID" parameterType="int" resultType="user">
    select * from mybatis.user where id=#{id}
</select>

总结:

  • 当包类较少时适合采用方法一;
  • 类较多时适合采用方法二;
  • 方法一可以diy别名,方法二一般采取默认别名;

image-20230302193738148

image-20230302193752860

对于基本类型,它的别名前一般加个下划线;

对于包装类一般采用首字母小写;

4、映射器(mappers)

MapperRegistry: 注册绑定我们的Mapper文件;

方式一:(首选方案)

<!-- 使用相对于类路径的资源引用 -->
<mappers>
    <mapper resource="com/zhaolei/dao/UserMapper.xml"/>
</mappers>

方式二:

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
    <mapper class="com.zhaolei.dao.UserMapper"/>
</mappers>

注意点:

  1. 接口和他的类的名字必须保持一致!
  2. 接口和它的配置文件必须在同一个包下!
  3. 接口和它的配置文件名称必须一致,如(Mapper和Mapper.xml)!

方式三;

<!-- 将包内的映射器接口全部注册为映射器 -->
<mappers>
    <package name="com.zhaolei.dao"/>
</mappers>

注意点:

  1. 接口和他的类的名字必须保持一致!
  2. 接口和它的配置文件必须在同一个包下!
  3. 接口和它的配置文件名称必须一致,如(Mapper和Mapper.xml)!

5、作用域(Scope)和生命周期

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

SqlSessionFactoryBuilder:

  • 一旦创建了 SqlSessionFactory,就不再需要它了。
  • qlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)!

SqlSessionFactory:

  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
  • SqlSessionFactory 的最佳作用域是应用作用域。
  • 最简单的就是使用单例模式或者静态单例模式.
  • 本质上相当于数据库连接池。

SqlSession:

  • SqlSession 的实例不是线程安全的,因此是不能被共享的.
  • 它的最佳的作用域是请求或方法作用域.
  • 用完之后必须进行关闭,否则会导致资源被占用。
  • 本质上相当于连接连接池的一个请求。

image-20230302202407677

6、结果映射--->数据库字段名与实体类不一致问题

问题: 如果列名和属性名不能匹配上

image-20230302213812740

解决办法:

  1. 方法一:起别名
<select id="getUserByID" parameterType="int" resultType="user">
    select id,name,pwd as password from mybatis.user where id=#{id}
</select>

image-20230302214124306

方法二:resultMap

<resultMap id="usermap" type="user">
    <result column="pwd" property="password"/>
</resultMap>
<select id="getUserByID" parameterType="int" resultMap="usermap">
    select id,name,pwd from mybatis.user where id=#{id}
</select>

image-20230302214606422

  • resultMap 元素是 MyBatis 中最重要最强大的元素。
  • ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了.

标签:03,配置文件,作用域,别名,学习,mybatis,user,Mybatis,id
From: https://www.cnblogs.com/ZLey/p/17173758.html

相关文章

  • Yolov5环境报错解决:No labels found in 与 Could not run 'torchvision::nms' with ar
    问题记录yolov5环境1Nolabelsfoundin(Done)报错内容F:\WorkSpace\GitSpace\yolov5>pythontrain-self.pytrain-self:weights=weights/yolov5s.pt,cfg=models/y......
  • 小梅哥课程学习——串口发送应用之发送数据
    //此代码的注意事项,首先这个代码不能仿真成功会出现一定的时间延迟,//因为在做板级验证的时候把时间改成了100ms发送一次,要想仿真成功,把时间改成499999//使用上一节课设......
  • Pandas使用时间索引筛选时报错 AssertionError: <class 'numpy.ndarray'>
    Icameacrossthesimilarproblem,mysolutionwas:makesuretheindexistypeof'DatetimeIndex',Idothis:df.index=pd.to_datetime(df.index)sortedth......
  • 每日记录(十)2022.03.02
    今天学了很多,主要有网页的制作,但是不太熟练,明天继续    今天吃了铁板炒饭,味道还行,,我觉得那个鸡蛋还可以加点味道,不然不太好吃。晚上吃了麻辣烫,我发现学二食堂的麻......
  • 03.02 再不要给自己设限
    泥岗的饭堂虽好,也快吃腻了,终于打算尝试之前不敢尝试的油泼面。之所以不敢尝试只是因为辣,我固执地自认为并不能吃辣,直到端着一碗面坐下,吃上第一口,恍然发现辣事实上并不只是......
  • python+playwright 学习-18.select 下拉框操作
    前言select选择框是页面上常见的场景select用法<select>使用locator.select_option()选择元素中的一个或多个选项。您可以指定选项value,或label选择。可以选择多个选......
  • 【Mybatis】【事务管理器】【一】Mybatis源码解析-事务管理器
    1 前言在了解数据源后,我们来看下事务管理器,这个东西也很重要。2  事务管理器类型在MyBatis中有两种类型的事务管理器(也就是type="[JDBC|MANAGED]"):JDBC–这个......
  • Android学习-每日打卡APP-初步
    今天开始着手做个人作业-每日打卡APP今天首先实现了主要页面和简单功能,项目的结构基本确定,进展刚开始初步实现主要页面和页面跳转,之后的进展见之后的博客吧 ......
  • 2023年3月2日学习总结
    今天学习了使用监听器实现点击不同按钮的功能  学习了如何创建数据库和表,如何添加数据。 ......
  • 排列组合学习笔记
    以下部分内容摘自OIWiki排列数从\(n\)个数中选出\(m\)个数按照一定的顺序排列,用\(A_{n}^{m}\)表示。排列的计算公式如下:\(A_{n}^{m}=n(n-1)(n-2)...(n-m+1)=\dfr......