Mybatis笔记02-----MyBatis的核心配置文件以及模糊查询的实现
认识MyBatis核心配置文件mybatis-config.xml
这个文件名是随意可以起,但为了规范一般都命名为mybatis-config.xml;配置文件与MyBatis的行为和属性信息息息相关。
一、配置文件的内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<!--事务管理器-->
<transactionManager type="JDBC"/>
<!--数据源-->
<dataSource type="POOLED">
<!--旧版mysql应使用com.mysql.jdbc.Driver-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--useSSL=true 使用安全连接-->
<!--& 转义 &-->
<!--useUnicode=true 防止编码错误-->
<!--characterEncoding=UTF-8 防止中文乱码-->
<property name="url" value="jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<!--数据库名-->
<property name="username" value="root"/>
<!--数据库密码!!!!-->
<property name="password" value="hytsql"/>
</dataSource>
</environment>
</environments>
<!--mapper-->
<mappers>
<!--到具体的XXXMapper.xml文件 (必须是com/dao/StuMapper.xml而不是com.dao.StuMapper.xml)-->
<mapper resource="com/dao/StuMapper.xml"/>
</mappers>
</configuration>
说明:这部分是mybatis核心配置文件的头文件(固定的)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
二、配置文件中的常用的元素(重点)
configuration 配置
properties 属性
settings 设置
typeAliases 类型起别名
typeHandlers 类型处理器
objectFactory 对象工厂
environments 环境配置
environment 环境变量
transactionManage 事务管理器
dataSource 数据源
mappers 映射器
注意:在使用这些元素时,注意他们的先后顺序,不然会出错!!!!
properties 属性:导入.properties属性文件,简化配置文件
properties存在的意义就是优化配置,可以将连接数据库的信息添加到一个单独文件,然后在这个核心配置文件中使用peoperties标签引入这个单独的文件。这样就简化了核心配置文件的配置信息。
步骤过程:1、在resources目录下创建一个存放连接数据库的单独文件:db.properties

2、在db.properties文件中编写连接数据库信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=hytsql
3、修改mybatis-config.xml配置文件中的内容
<configuration>
<!--引入db.peoperties文件-->
<properties resource="db.properties"/> <environments default="development">
<environment id="development">
<!--事务管理器-->
<transactionManager type="JDBC"/>
<!--数据源-->
<dataSource type="POOLED">
<!--旧版mysql应使用com.mysql.jdbc.Driver-->
<property name="driver" value="${driver}"/>
<!--useSSL=true 使用安全连接-->
<!--& 转义 &-->
<!--useUnicode=true 防止编码错误-->
<!--characterEncoding=UTF-8 防止中文乱码-->
<property name="url" value="${url}"/>
<!--数据库名-->
<property name="username" value="${username}"/>
<!--数据库密码!!!!-->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--mapper-->
<mappers>
<!--到具体的XXXMapper.xml文件 (必须是com/dao/StuMapper.xml而不是com.dao.StuMapper.xml)-->
<mapper resource="com/dao/StuMapper.xml"/>
</mappers>
</configuration>
settings 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。它可以设置很多功能,这里主要用于开启日志功能
(其它功能可看Mybatis的帮助文档)
1、为什么要开启日志功能
答:是为了方便排错,提高排错效率;在日志功能开启时,如果出现了相关对数据库操作的异常,根据日志的输出内容(大部分指的是输出的SQL语句)很容易发现错误及时改正。
2、如何开启日志
在mybatis-config.xml文件中添加<settings>标签
<!--开启日志 value属性必须写上-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
logImpl说明:
| 设置名 | 描述 | 有效值 | 默认值 |
| logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J(3.5.9 起废弃) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
3、此时测试在控制台上就会输出相关日志信息
typeAliases 类型别名
在mybatis帮助文档中有基本数据类型、包装类的别名
1、为什么存在类型别名
答:类型别名就是将java类型(类、接口、包等)这些设置一个比较短的名字,这样减少类完全限定名的冗余。
2、使用的方法
第一种(个人更喜欢):在mybatis-config.xml这个核心配置文件中使用<typeAliases>
<!--给实体类Stu起别名-->
<typeAliases>
<typeAlias type="com.pojo.Stu" alias="stu"/>
</typeAliases>
这种配置后,在任何com.pojo.Stu出现的地方都可以用stu来代替!!!
第二种方式:<typeAliases>标签与注解联合使用
首先在核心配置文件上添加
<!--指定包后mybatis会在包下扫描需要的javabean-->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
然后在该包下需要起别名的类上使用@Alias注解
//stu是新起的别名
@Alias("stu")
@Data
public class Stu {
private int sno;
private String sname;
private int sage;
private String saddress;
private String spwd;
}
这种配置后,同样在任何com.pojo.Stu出现的地方都可以用stu来代替!!!
3、测试
在StuMapper.xml文件中修改resultType属性值
<mapper namespace="com.dao.StuMapper">
<!--起别名的效果:resultType将com.pojo.Stu替换成stu-->
<select id="queryAll" resultType="stu">
<!--sql语句:查询-->
select * from stu;
</select>
environments 环境配置
environment 环境变量
transactionManage 事务管理器
dataSource 数据源
1、这四个共同使用来配置有关连接数据库的信息
<environments default="development">
<environment id="development">
<!--事务管理器-->
<transactionManager type="JDBC"/>
<!--数据源-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
2、在MyBatis中可以配置多个environment运行环境,这样可以将SQL映射到不同的多个数据库上,但是每次都需要environments
来指定此次的运行环境。
每一个environment运行环境都有一个id属性(如:id="development"),在environments中有一个default属性(如:id="development"),
其属性值用于指定默认的运行环境 (id属性值理论上可以随意起)
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
- 每个数据库对应一个 SqlSessionFactory 实例
3、transactionManager 事务管理器:
在mybatis中事务管理器有两种
<transactionManager type="[JDBC|MANAGED]"/>
常用的是JDBC,因为这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。而MANAGED 这个配置几乎
没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
注意:如果你使用的是Spring+mybatis,那么就不需要再去配置transactionManager事务管理器,因为在spring模块中会使用自带的管理
器会覆盖自己配置的!!
4、dataSource 数据源:这个元素使用标准的JDBC数据源接口来配置JDBC的连接对象的资源
有三种类型的数据源
<dataSource type="[unpooled|pooled|jndi]">
.....
</dataSource>
unpooled:当在被请求的时候会开启连接和关闭连接
- pooled:利用一种连接池的概念,当被请求的时候会创建一个连接对象,当操作完成时候,连接对象会归还给池。这是并发WEB开发快速 响应请求常用方式
- jndi:这个数据源的实现主要是为了能够在容器中使用,如在Spring或应用服务器这类容器中使用。而容器可以集中或者外部配置数据源, jndi这种数据源有引用上下文的作用
注:还有一些其它的数据源,如c3p0、druid、dbcp......
mappers 映射器
1、mappers 是MyBtis核心组件之一,是用于定义(注册)映射SQL语句的文件为映射器。
2、在前面的元素基本配置好MyBatis的行为了,还差配置SQL映射语句,我们需要告诉MyBatis到哪里去找这些语句,在java中并没有一个自动寻找的方法,所以我们需要手动配置去让MyBatis找到SQL映射语句,这就要用到<mappers>标签元素了。
主要有三种方式:
- 第一种:资源路径(用resource):相对类路径的资源引用,不要求文件名必须与XXXMapper接口一致、不要求与XXXMapper接口文件在同一目录下[com/dao/stuMapper.xml之间是/不是.]
<mappers>
<!--到具体的XXXMapper.xml文件 (必须是com/dao/StuMapper.xml而不是com.dao.StuMapper.xml)-->
<mapper resource="com/dao/StuMapper.xml"/>
</mappers>
第二种:直接使用XXXMapper接口名绑定(class),要求文件名(XXXMapper.xml)必须与XXXMapper接口一致、要求与XXXMapper接口文件在同一目录下!!![com.dao.stuMapper之间是.不是/]
<mappers>
<mapper class="com.dao.StuMapper"/>
</mappers>
第三种:绑定包名,该包下的XXXMapper接口对应的XXXMapper.xml都会被注册成映射器。要求文件名(XXXMapper.xml)必须与XXXMapper接口一致、要求与XXXMapper接口文件在同一目录下!!!
<mappers>
<!--mappers标签与package标签一起使用-->
<package name="com.dao"/>
</mappers>
3、在MyBatis3前,使用基于xml文件配置SQL映射语句,在MyBatis 3之后,MyBatis支持了注解开发!!但是使用注解也有不方便的地方
附加:写一个模糊查询
1、在StuMapper接口中写业务方法
//模糊查询
List<Stu> selectLike(String sname);
2、在StuMapper.xml中配置SQL语句
<select id="selectLike" parameterType="String" resultType="com.pojo.Stu">
<!--sql语句:select * from stu where sname like "%小%"-->
select * from stu where sname like "%"#{sname}"%";
</select>
3、测试
//模糊查询
@Test
public void test06(){
//得到数据连接对象
SqlSession sqlSession = MybatisUntil.getSqlSession();
//得到XXXMapper接口对象,然后就能调用接口中的方法(实现操作数据库)
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
//调用StuMapper接口中的方法
List<Stu> stus = mapper.selectLike("小");
for (Stu stu:stus) {
System.out.println(stu);
}
//关闭资源
sqlSession.close();
}
4、结果截图

Mybatis笔记02-----MyBatis的核心配置文件以及模糊查询的实现的更多相关文章
- MyBatis(三):核心配置文件的重要配置
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...
- Mybatis笔记01-基本原理,配置文件,映射文件,以及调用过程
Mybatis基本原理 应用程序找Mybatis要数据 mybatis从数据库中找来数据 2.1 通过mybatis-config.xml 定位哪个数据库 2.2 通过Category.xml执行对应 ...
- mybatis入门,CRUD,万能Map,模糊查询
第一个Mybatis程序 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?& ...
- MyBatis(三):核心配置文件的重要配置-Log
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...
- mybatis笔记02
目录 0. 文章目录 1. Mybatis映射文件 1.1 输入映射 1.2 输出映射 1.3 resultMap 2. 动态SQL 2.1 if和where 2.2 foreach循环 2.3 sq ...
- Linux实战教学笔记02:计算机系统硬件核心知识
标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...
- mybatis转义反斜杠_MyBatis Plus like模糊查询特殊字符_、\、%
在MyBatis Plus中,使用like查询特殊字符_,\,%时会出现以下情况: 1.查询下划线_,sql语句会变为"%_%",会导致返回所有结果.在MySQL中下划线" ...
- Mybatis mysql 一个搜索框多个字段模糊查询 几种方法
第一种 or 根据搜索框给定的关键词,模糊搜索用户名和账号都匹配的用户集合 <select id="list" parameterType="com.user.Us ...
- Bootstrap-table学习笔记(二)——前后端分页模糊查询
在使用过程中,一边看文档一边做,遇到了一些困难的地方,在此记录一下,顺便做个总结: 1,前端分页 2,后端分页 3,模糊查询 前端分页相当简单,在我添加了2w条测试数据的时候打开的很流畅,没有卡顿. ...
随机推荐
- 七分钟学会 HTML 网页制作
什么是HTML 点击打开视频讲解更加详细 Hyper Text Markup Language(超文本标记语言) 标签控制排版 体积小,方便传输 编写HTLML 推荐使用:VS Code <!D ...
- Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类
系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...
- Spring 10: AspectJ框架 + @Before前置通知
AspectJ框架 概述 AspectJ是一个优秀的面向切面编程的框架,他扩展了java语言,提供了强大的切面实现 本身是java语言开发的,可以对java语言面向切面编程进行无缝扩展 AOP常见术语 ...
- CobaltStrike插件编写(1)-权限维持
自嘲:今天打开博客园一看,好家伙我竟然还有账户,原来我注册了博客园啊. CobaltStrike插件-权限维持模块 方法都是网上常见的,正好在学怎么写插件,练手之作,大佬勿喷. popup beaco ...
- 【Traefik二次开发】中间件 Middleware 开发
本篇只讨论HTTP中间件 中间件定义 https://doc.traefik.io/traefik/middlewares/overview/ Attached to the routers, pie ...
- .NET使用StackTrace获取方法调用者信息
前言 在日常工作中,偶尔需要调查一些诡异的问题,而业务代码经过长时间的演化,很可能已经变得错综复杂,流程.分支众多,如果能在关键方法的日志里添加上调用者的信息,将对定位问题非常有帮助. 介绍 Stac ...
- 流媒体协议扫盲(rtp/rtcp/rtsp/rtmp/mms/hls)
RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细 ...
- kingbaseES V8R6集群备份恢复案例之---备库作为repo主机执行物理备份
案例说明: 此案例是在KingbaseES V8R6集群环境下,当主库磁盘空间不足时,执行sys_rman备份,将集群的备库节点作为repo主机,执行备份,并将备份存储在备库的磁盘空间. 集群架构 ...
- Oracle 与 PostgreSQL 函数行为的差异引发性能差异
对于Oracle,对于数据修改的操作通过存储过程处理,而对于函数一般不进行数据修改操作.同时,函数可以通过 Select 进行调用,而存储过程则不行. 一.对于volatile 函数的行为 1.Ora ...
- 读完 RocketMQ 源码,我学会了如何优雅的创建线程
RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时.高可靠的消息发布与订阅服务. 这篇文章,笔者整理了 RocketMQ 源码中创建线程的几点技巧,希望大家读完之后,能 ...