07-MyBatis 核心配置文件

MyBatis 核心配置文件

目录

  • properties 定义属性及读取属性文件
  • settings 设置运行时行为
  • typeAliases 类型别名
  • 定义单个别名
  • 批量定义别名
  • typeHandlers 类型处理器
  • Plugins(后续有文章专门介绍这个)
  • Environments 运行环境
  • databaseIDProvider 定义数据库厂商
  • mappers 加载映射文件
  • mapper resource=" "
  • mapper class=" "
  • package name=" "

 

关于这些配置文件,实际上我们只要写一份模板文件,以后都是可以参照的,特此记录。

以下操作全部是在 MyBatis 的核心配置文件中进行的。
可以查看 MyBats 文档:MyBatis 文档

properties 定义属性及读取属性文件

我们可以将数据库驱动,用户名,密码等信息放到单独的文件中,然后在配置文件中加载这个文件,这样有利于管理配置信息。

注:必须放在资源文件夹(resources)下,建立一个 db.properties ,在里面写入数据库配置信息。
在这里插入图片描述

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1234

然后在配置文件 SqlMappingConfig.xml 中加载这个文件即可:

<!--定义属性及提取属性文件-->
<properties resource="db.properties"/>

接下来在数据库连接池中就可以动态获取 db.properties 中的属性了:

<!-- 数据库连接池 -->
<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>

settings 设置运行时行为

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
所有属性可以去 MyBatis 官方文档查看:MyBatis 官方文档

简单举个示例:
在这里插入图片描述
设置如上属性,开启自动驼峰命名规则映射。

<settings><!--开启自动驼峰命名规则映射--><setting name="mapUnderscoreToCamelCase" value="true"/><!--配置sql打印--><setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

然后 domain 类中的变量名就可以用驼峰命名法(与数据库不同)。
在这里插入图片描述

测试类:如果开启自动驼峰命名规则映射后,domain 类中必须驼峰命名法,否则将会无法查询到。

public void test(){SqlSession sqlSession = MybatisUtils.openSession();CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);Customer customer = mapper.getCustomerWithID(2, "李白");System.out.println(customer);sqlSession.close();}

运行结果:成功查询到结果并且封装成对象。

typeAliases 类型别名

typeAliases 可以为 Java 类型设置一个短的名字。

定义单个别名

下面我们为 com.itlike.domain.Customer 设置了别名,Customer,

<!--定义别名-->
<typeAliases><!--单个别名定义--><typeAlias alias="Customer" type="com.itlike.domain.Customer"></typeAlias>
</typeAliases>

则在映射文件中,resultType 不需要把整个包写上了,直接写别名 Customer 即可。

<!--根据id查询用户-->
<select id="getCustomerWithID" resultType="Customer">SELECT * FROM `customer` WHERE cust_id = #{id} AND cust_name = #{name}
</select>

批量定义别名

下面给 com.itlike.domain 这个包下的类设置了别名,别名就是类名。

<!--定义别名-->
<typeAliases><!--批量定义别名,别名为类名--><package name="com.itlike.domain"/>
</typeAliases>

注:如果在定义了别名的包下,还有多个子包,并且存在相同名称的类名。则与上面批量定义别名冲突了。解决方法: 利用 @Alias 注解给每个类定义新的名字。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

typeHandlers 类型处理器

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
JDK1.8之后实现全部的JSR310规范,日期时间处理上,我们可以使用 MyBatis 基JSR310(Date and Time API)编写的各种日期时间类型处理器。

MyBatis3.4以前的版本需要我们手动注册这些处理器,以后的版本都是自动注册的

Plugins(后续有文章专门介绍这个)

插件是 MyBatis 提供的一个非常强大的机制,MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。通过插件来修改 MyBatis 的一些核心行为。

Environments 运行环境

MyBatis 可以配置多种环境,比如开发、测试和生产环境需要有不同的配置。
每种环境使用一个 environmen t标签进行配置并指定唯一标识符。
可以通过 environments 标签中的 default 属性指定一个环境的标识符来快速的切换环境。
在这里插入图片描述
environment 中有两个子标签,transactionManager 事务管理、dataSource数据源。

实际开发中我们使用 Spring 管理数据源,并进行事务控制的配置来覆盖上述配置,不会使用 MyBatis 的environments 配置。 稍作了解即可。

databaseIDProvider 定义数据库厂商

MyBatis 可以根据不同的数据库厂商执行不同的语句。

<!--定义数据库厂商-->
<databaseIdProvider type="DB_VENDOR"><property name="MYSQL" value="mysql"/><property name="DB2" value="db2"/><property name="Oracle" value="oracle" /><property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>

在映射文件中就可以指定厂商,只有当数据库与指定厂商匹配时,才会执行语句。

<!--根据id查询用户-->
<select id="getCustomerWithID" resultType="Customer" databaseId="mysql" >SELECT * FROM `customer` WHERE cust_id = #{id} AND cust_name = #{name}
</select>

mappers 加载映射文件

mapper resource=" "

使用相对于类路径的资源:

<mappers><mapper resour ce="com/itlike/domain/Customer.xml"></mapper>
</mappers>

mapper class=" "

使用 mapper 接口类路径:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。

<mappers><!--1. 名称必须得要和接口名称一致2. 必须得要和 mapper 接口在同一目录下--><mapper class="com.itlike.mapper.CustomerMapper"></mapper>
</mappers>

在这里插入图片描述

package name=" "

加载指定包下的所有mapper接口。此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

<!--加载映射文件-->
<mappers><!--1. 名称必须得要和接口名称一致2. 必须得要和 mapper 接口在同一目录下--><package name="com.itlike.mapper"/>   
</mappers>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Office 365也是.NET Core应用开发新战场

最近有幸阅读了陈希章花了一年时间为国内开发者贡献的《Office 365 开发入门指南》。 虽然早期接触过SharePoint的开发&#xff0c;2007年之后就再也没有接触SharePoint的开发&#xff0c;这次阅读这本书让我重新认识了Office的系统开发技术&#xff0c;让我意识到现在的Office…

jzoj4802-[GDOI2017模拟9.24]探险计划【费用流,拆点】

正题 题目大意 一个nnn行的不完全矩阵第iii行有mi−1mi-1mi−1个格子&#xff0c;然后每个格子有危险度。 每次可以从(i,j)(i,j)(i,j)走到(i−1,j)(i-1,j)(i−1,j)或(i−1,j−1)(i-1,j-1)(i−1,j−1) 求 m次&#xff0c;每个格子和路不可以重复走的最小危险度。m次&#xff0…

08-输出类型

输出类型 目录 输出简单类型输出 Map 类型key:列名 value:列名对应的值key:自己指定的列 value:自定义对象resultMap输出简单类型 CustomerMapper.java&#xff1a;返回值为简单类型。 public interface CustomerMapper {/*查询总数*/public Integer getAccountCustomer();…

在Ubuntu 16.04环境下安装Docker-CE(附视频教程)

“ 任何的课程都逃不开理论的支持”久等了各位&#xff0c;上一篇说Docker开始的消息已经过去了一周多的时间&#xff0c;今天推送的消息是告诉大家视频可以学习了&#xff01;52ABP .NET CORE QQ群 : 633751348大纲Docker的介绍Ubuntu下安装Docker快速体验Docker利用Docker搭…

WebApi client 的面向切面编程

.Net的面向切面编程.Net的服务端应用AOP很常见&#xff0c;在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子&#xff0c;我们可以把一个服务方法“切”为很多面&#xff0c;日志面、验证面、请求方式处理、接口业务实现等多个面&#xff0c;有一些面可以使用过滤器特…

09-一对多关系建表

多表操作 目录 表之间关系一对多关系建表原则表之间关系 一对一关系&#xff1a;一夫一妻。 一对多关系&#xff1a; 一个部门有多个员工&#xff0c;一个员工只能属于某一个部门。 一个班级有多个学生&#xff0c;一个学生只能属于一个班级。 多对多关系&#xff1a; 一个…

10-多对一左连接查询分步查询(查询所有订单及订单对应的客户)

左连接查询&#xff08;级联查询&#xff09; 回顾一下&#xff1a;左连接查询&#xff0c;将左边表(order)里的全部内容查出&#xff0c;右边表(customer)查满足条件的。 SELECT * FROM order AS o LEFT JOIN customer AS c on o.cust_id c.cust_id;1那么在 MyBatis 中如何…

入门干货之Grpc的.Net 封装-MagicOnion

0x01、Grpc1、介绍Google主导开发的RPC框架&#xff0c;使用HTTP/2协议并用ProtoBuf作为序列化工具&#xff0c;支持多种语言。在.NET Core “大更新” 之前&#xff0c;也就是目前来说还算是个很不错的选择。2、吐槽a、有很多性能比较的文章拿Grpc开涮.b、搭建困难&#xff0c…

11-分步查询懒加载

分步查询——懒加载模式 目录 懒加载模式示例不使用懒加载使用懒加载aggressiveLazyLoadinglazyLoadTriggerMethods所谓懒加载&#xff0c;也称延时加载&#xff0c;是指不一下子加载完全部资源。需要用到哪些资源才去加载这些资源&#xff0c;用不到的资源&#xff0c;就不去…

利用Service Fabric承载eShop On Containers

从模块化到微服务化从Pet Shop 到eShop on Container都是Microsoft在技术演进的路径上给开发者展示.Net的开发能力和架构能力的Sample工程&#xff0c;Petshop的时候更多的是展现应用的分层架构&#xff0c;设计的抽象与模块间的通讯。到了eShop on Container更多的关注在架构设…

12-多对一添加操作(添加新客户及对应的新订单)

多对一添加操作 场景&#xff1a;现在想要添加一个新客户对应一个新订单&#xff0c;那么要怎么来添加呢&#xff1f; 分析&#xff1a;由于添加订单时&#xff0c;客户对订单是一对多的关系&#xff0c;所以添加订单的时候必须要指明一位客户。 要同时添加新客户以及一个新订…

.NET Core+MySql+Nginx 容器化部署

1. 引言上两节我们通过简单的demo学习了docker的基本操作。这一节我们来一个进阶学习&#xff0c;完成ASP.NET Core MySql Nginx的容器化部署。本文是基于CentOS 7.4环境进行演示&#xff0c;示例项目可以访问Docker.NetCore.MySql进行下载。2. Hello MySQL同样我们还是以循序…

HiveSQL常用优化方法全面总结

转载自 HiveSQL常用优化方法全面总结 Hive作为大数据领域常用的数据仓库组件&#xff0c;在平时设计和查询时要特别注意效率。影响Hive效率的几乎从不是数据量过大&#xff0c;而是数据倾斜、数据冗余、job或I/O过多、MapReduce分配不合理等等。对Hive的调优既包含对HiveQL语…

P3597-[POI2015]WYC【矩阵乘法,倍增】

前言 正题 题目链接:https://www.luogu.org/problemnew/show/P3597 题目大意 问第kkk长的路径长度(非简单路径) 解题思路 先考虑kkk比较小时的情况&#xff0c;我们可以求出长度为111的路径&#xff0c;长度为222的路径&#xff0c;然后以此类推找到第一个与前面的和到kkk就…

13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)

查询所有客户以及对应的订单 目录 左连接查询&#xff08;不支持懒加载&#xff09;分步查询&#xff08;支持懒加载&#xff09;左连接查询&#xff08;不支持懒加载&#xff09; 场景&#xff1a;我们想要查询出所有的客户&#xff0c;并且把每个客户对应的订单也查出来。…

实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作

转载自 实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作 供稿 | eBay ADI-Carmel Team 作者 | 金澜涛 编辑 | 顾欣怡 本文7309字&#xff0c;预计阅读时间22分钟 导读 本文介绍eBay Carmel团队利用Delta Lake&#xff0c;使Spark SQL支持Teradata的Update/Delete语法。…

14-多对多关系建表

多对多关系建表 目录 多对多关系多对多关系建表原则domain多对多关系 一个老师可以教多个学生&#xff0c;一个学生可以被多个老师教。一个学生可以选择多门课程&#xff0c;一门课程可以被多个学生选择。一个用户可以选择多个角色&#xff0c;一个角色可以被多个用户选择。…

DevOps文档中心的技术实践演进

这应该算是《Git企业开发者教程》的篇外篇&#xff0c;介绍一下这个教程是怎样写出来的。相信每个技术人都有类似下面的文件夹&#xff0c;保存着你辛苦工作的成果。实际的感觉&#xff1a;看着闹心&#xff0c;弃之不舍。一份文档久经修改&#xff0c;不能定稿&#xff0c;循环…

MySQL UPDATE 语句一个“经典”的坑

转载自 MySQL UPDATE 语句一个“经典”的坑 来源&#xff1a;ju.outofmemory.cn/entry/336774 有问题的SQL语句 why? 倒回去再重试验一把 最近好几次有开发同学在钉钉上问我&#xff0c;比如下图&#xff1a; 问题归纳起来就是&#xff1a;在MySQL里面update一条记录&…

jzoj4803-[NOIP2016提高A组模拟9.28]求导【模拟】

正题 题目大意 求一个标准多项式的求导 解题思路 暴力模拟即可&#xff0c;注意细节即可 一下是贴心的坑爹细节样例 (233x)−>(1)而不是(1)(233x)->(1)而不是(1)(233x)−>(1)而不是(1) (1)−>(0)而不是()(1)->(0)而不是()(1)−>(0)而不是() codecodecode …