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…

Scala与Java差异(一)之基础语法

一、Scala解释器的使用 &#xff08;1&#xff09;REPL Read&#xff08;取值&#xff09;-> Evaluation&#xff08;求值&#xff09;-> Print&#xff08;打印&#xff09;-> Loop&#xff08;循环&#xff09;。 scala解释器也被称为REPL&#xff0c;会快速编译…

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搭…

jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】

正题 题目大意 nnn个人的圆桌&#xff0c;可以放男可以放女&#xff0c;然后要求不能有连续kkk个女生坐在一起。求方案总数。 解题思路 先不考虑圆桌&#xff0c;设fi,jf_{i,j}fi,j​表示放了i个人&#xff0c;最前面有连续jjj个女生&#xff0c;动态转移方程显然 fi,jfi−1,j…

Scala与Java差异(二)之条件控制与循环

一、if表达式 &#xff08;1&#xff09;if表达式的定义 在Scala中&#xff0c;if表达式是有值的&#xff0c;就是if或者else中最后一行语句返回的值。 例如&#xff0c;val age 30; if (age > 18) 1 else 0 可以将if表达式赋予一个变量&#xff0c;例如&#xff0c;va…

WebApi client 的面向切面编程

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

09-一对多关系建表

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

jzoj6191-[NOI2019模拟2019.5.31]Exchange【线段树】

正题 题目大意 一个序列&#xff0c;给定若干个区间[l..r][l..r][l..r] 从l∼rl\sim rl∼r任意一个位置出发&#xff0c;见到比手中大的数字就交换&#xff0c;到rrr求最小的交换次数 (注意&#xff0c;并不是真的交换) 解题思路 首先算出每个点的后继(在它后面第一个比他大的…

面试阿里挂了却拿到网易、点我达offer,一个三年经验Java程序员的面试总结

转载自 面试阿里挂了却拿到网易、点我达offer&#xff0c;一个三年经验Java程序员的面试总结 前言 15年毕业到现在有三年多了&#xff0c;最近去面试了阿里集团&#xff08;菜鸟网络&#xff0c;蚂蚁金服&#xff09;、网易、滴滴、点我达&#xff0c;最终收到点我达、网易o…

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…

欢乐纪中A组周六赛【2019.6.1】

前言 六一儿童节快乐(然而我还在学校) dalao都走了&#xff0c;导致只剩下我们这帮菜鸡在被虐 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC111(J−2)ZYC(J-2)ZYC(J−2)ZYC1301301303030301001001000002…

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更多的关注在架构设…

2019阿里天猫团队Java高级工程师面试题之三轮面试

转载自 2019阿里天猫团队Java高级工程师面试题之三轮面试 作者&#xff1a;编程砖家 https://www.cnblogs.com/xiaoyangjia/p/10697324.html 一.第一面 1.五分钟自我介绍&#xff0c;说说自己的擅长及拿手的技术 自我介绍是为了考察面试者的语言表达和总结概括能力&#x…

P2680-运输计划【LCA,树上差分,二分答案】

正题 题目链接:https://www.luogu.org/problemnew/show/P2680 题目大意 一棵带权无根树&#xff0c;给出若干条路径。选择一条边使其边权变为0&#xff0c;要求路径的长度的最大值最小。 解题思路 首先最大值最小我们可以想到二分答案&#xff0c;现在我们二分到midmidmid了…

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同样我们还是以循序…