首页 > 其他分享 >MyBatis - 基础学习4 - xml的核心配文件(优化)

MyBatis - 基础学习4 - xml的核心配文件(优化)

时间:2022-11-16 20:45:51浏览次数:51  
标签:xml mapper 实体类 Java 配置文件 作用域 数据库 MyBatis 优化

一.别名

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

1.利用typealiases来实现

   <typeAliases>
       <typeAlias type="top.lostyou.pojo.User" alias="user"/>
   </typeAliases>

 

2.利用page

指定一个包名,MyBatis会在包名下面搜索需要的Javabean,比如:

扫描实体类的包,它默认别名就是这个类名,首字母要小写

   <typeAliases>
       <package name="top.lostyou.pojo"/>
   </typeAliases>

 

使用范围:

  • 在实体类比较少的时候,使用第一种方式
  • 在实体类十分多的时候使用第二种
  • 第一种可以DIY,第二种不可以自己设置,如果非要改,需要在实体类上面增加注解

二.设置(setting)

mapUnderscoreToCamelCase:是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。

这是自动开启数据库的驼峰命名:

数据库:last_Name

Java:lastName

拓展:数据库用下划线命名是因为最早的数据库oracle会把命名全部转换为大写

命名:lastName

oracle:LASTNAME

辨识度十分低,所以后来的数据库命名默认使用下划线分割,oracle:LAST_NAME

三.映射器(mappers)

1.使用资源路径进行引用

每一个mapper.xml都需要在mybatis的核心配置文件中注册!

<mappers>
<mapper resource="top/lostyou/dao/UserMapper.xml"/>
</mappers>

 

2.使用Class文件绑定注册

代码1

<mappers>
<mapper class="top.lostyou.dao.UserMapper"/>
</mappers>

 

代码2

<mappers>
<mapper class="top.lostyou.dao.UserDao"/>
</mappers>

 

注意点:

  • 接口类和它的mapper配置文件必须同名!
  • 接口类和它的mapper配置文件必须在一个包下!

如果想代码2那样,就会找不到接口

3.使用扫描包进行注册

<mappers>
<package name="top.lostyou.dao"/>
</mappers>

 

注意点:

  • 接口类和它的mapper配置文件必须同名!
  • 接口类和它的mapper配置文件必须在一个包下!

三.作用域(Scope)和生命周期

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

1.SqlSessionFactoryBuilder:

一旦创建了 SqlSessionFactory,就不再需要它了

2.SqlSessionFactory:可以理解为数据库连接池

一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例

因此 SqlSessionFactory 的最佳作用域是应用作用域。(全局作用域)

3.SqlSession:连接到连接池的请求

SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域

用完就需要关闭,如果不关闭,就会一直占用资源,SqlSessionFactory的可用数越来月少

 

 

 

这里面的mapper都代表着一个业务

四.解决(Java类)属性名和(数据库)字段名不一致的问题

问题产生:

 

 

 我们Java的实体类和数据库对应的字段名不同,导致的结果是

 

 我们的查询结果为空

解决方式一:给我们的password在sql语句中取别名:password  AS pwd

这种方式老套,操作不好看,不建议使用

解决方式二:利用resultMap结果集映射

<mapper namespace="top.lostyou.dao.UserMapper">
    <!--id = 映射的结果集名   type =  映射给谁,一般是Java中的实体类-->
    <resultMap id="usermap" type="User">
        <!--column 数据库中的字段  property  实体类中的属性名-->
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
    <select id="getList" resultMap="usermap">
        select * from mybatis.user WHERE id =#{id}
    </select>
</mapper>

 

  • resultMap 元素是 MyBatis 中最重要最强大的元素
  • ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了(上面那个例子可以只映射 password,因为其它的都字段和属性都是对应的)

 

标签:xml,mapper,实体类,Java,配置文件,作用域,数据库,MyBatis,优化
From: https://www.cnblogs.com/5ran2yl/p/16897446.html

相关文章

  • OSI传输层TCP与UDP协议、应用层简介、socket模块介绍及代码优化、半连接池的概念
    目录传输层之TCP与UDP协议应用层socket模块socket基本使用代码优化半连接池的概念传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的通信的时候可以随心所欲的聊......
  • Tomcat的概述、部署、及优化
    一、Tomcat概述1.1Tomcat的概念Tomcat是Java语言开发的,服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下......
  • 页面性能优化:preload预加载静态资源
    本文主要介绍preload的使用,以及与prefetch的区别。然后会聊聊浏览器的加载优先级。preload提供了一种声明式的命令,让浏览器提前加载指定资源(加载后并不执行),在需要执行的......
  • 11月16日内容总结——OSI传输层之TCP与UDP协议、应用层简介、socket模块介绍及代码优
    目录一、传输层之TCP与UDP协议1.TCP协议(重要)三次握手建链接四次挥手断连接2.UDP协议3.tcp和udp的对比二、应用层简介三、socket模块1、简介2、基于文件类型的套接字家族3......
  • 关于软件常用的各种配置文件YAML、JSON、ini、XML比较
    如果我们的程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序出厂后还能根据需......
  • XML指南——XML 命名空间
    XML命名空间提供了一种避免元素命名冲突的方法。命名冲突因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。......
  • XMLDOM对象方法:对象事件
    Ondataavailable事件作  用 此事件会在XML文件有效时被触发。基本语法  此一事件有下面三种处理方式. Inline:<element ondataavailable = handler>;. Event pro......
  • XML指南——XML编码
    XML文档可以包含外文字符比如挪威语或者法语(中文当然也可以!这一部分还是不能照原文翻译,下面有些内容是我自己写的)为了让你的解析器能够明白这些字符,你必须在XML文档中统一的......
  • XML指南——XML CDATA
    在XML文档中的所有文本都会被解析器解析。只有在CDATA部件之内的文本会被解析器忽略。解析数据XML解析器通常情况下会处理XML文档中的所有文本。当XML元素被解析的时候,XML......
  • log4j2.xml 使用 application.yml 配置的属性
    转自:https://blog.csdn.net/xiaokanfuchen86/article/details/126695797 log4j2.xml 是不归spring管理的,所以也就没法读取到application.yml里面的配置了。解决方......