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 映射器
如果不将XXXMapper接口注册为映射器,则会报出一个常见错误(常见就是因为容易忘记注册了!!):
org.apache.ibatis.binding.BindingException: Type interface com.dao.StuMapper is not known to the MapperRegistry.
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、结果截图

浙公网安备 33010602011771号