Mybatis笔记02-----MyBatis的核心配置文件以及模糊查询的实现

2022-12-24,,,,

认识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 使用安全连接-->
<!--&amp; 转义 &-->
<!--useUnicode=true 防止编码错误-->
<!--characterEncoding=UTF-8 防止中文乱码-->
<property name="url" value="jdbc:mysql://localhost:3306/demo?useSSL=true&amp;useUnicode=true&amp;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&amp;useUnicode=true&amp;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 使用安全连接-->
<!--&amp; 转义 &-->
<!--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笔记02-----MyBatis的核心配置文件以及模糊查询的实现.doc》

下载本文的Word格式文档,以方便收藏与打印。