配置解析
(真正要掌握的东西,就是配置文件里面的配置信息)
核心配置文件 mybatis-config.xml
配置文件会影响mybatis的行为设置和属性信息
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
-
configuration(配置)
-
-
- environment(环境变量)
-
-
-
-
- transactionManager(事务管理器)
- dataSource(数据源)
-
-
在配置文件里面添加这些配置,要按顺序来添加,因为约定大于配置,不然会报错
环境配置
- 不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- POOLED是数据库连接的类型,不止一种方式,这个是连接池
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
属性
可以用这个来优化配置文件,在外部配置数据库信息
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
在核心配置文件中映入
//引入外部配置文件
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
- 可以直接引入外部文件
- 可以在其中增加一些属性配置
- 如果两个文件有同一个字段,优先使用外部配置文件
类型别名
注:这个标签可以给实体类起别名,在调用实体类的时候就不需要再用全限定类名
有两种方式,一种是扫描包,一种是自定义
类型别名可为
<!--给实体类起别名-->
<typeAliases>
<typeAlias type="com.q.pojo.User" alias="User"/>
<!-- 使用时候用类的名字代替全限定名,大小写都行-->
</typeAliases>
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean(这个比较好用)
<!--给实体类起别名-->
<typeAliases>
<!--使用包的形式-->
<package name="com.q.pojo"/>
</typeAliases>
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。
实体类少就用第一种,可以div类别名
实体类多用指定包名,如果使用注解的方法,那么就要在实体类上面添加注解,然后 根据注解的来使用别名(写注解很难维护)
设置(settings)
【日志就是在这里写的】
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
映射器(mappers)
【写在最后,用于注册】 也就是工厂去找一些mapper业务放进mybatis容器里面给工人sqlsession去执行
- 注册mapper,映射sql语句,告诉mybatis到哪里去找映射文件
- 有两种方式配置映射文件 一:使用类路径;二:使用包扫描
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等
方式一:使用类路径
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
方式二:使用包扫描注入绑定
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
注意:重要!!!
-
使用包扫描的时候,要注意接口和它的Mapper配置文件同名 【名字要一样,放在同一个包里面】
-
接口和Mapper配置文件必须在同一个包下【这个很重要,否则扫描不到】
这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了。
优化!!!
注意:
-
将数据库配置文件外部引入
db.properties
jdbc.Driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSl=false&;useUnicode=true&;characterEncoding=UTF-8 jdbc.username=root jdbc.password=abcde
-
实体类别名
<!--优化1,引入外部配置文件--> <properties resource="db.properties"/> <!--优化2,给实体类起类型别名--> <typeAliases> <!-- <typeAlias type="com.q.pojo.User" alias="User"/>--> <!-- 使用时候用类的名字代替全限定名,大小写都行--> <!--使用包的形式 这个好用,现在使用这个,调用实体类的时候,写大小字母都可以调用--> <package name="com.q.pojo"/> </typeAliases>
-
保证UserMapper接口和UseMapper.xml文件改为一致,并且放到一个包下面
生命周期和作用域
自己理解:
-
SqlSessionFactoryBuilder就是工厂的创造者,创造完了就消失了,用局部变量进行储存。
-
SqlSessionFactory就是工厂,里面很多接口等着会话过来连接,是一直存在的。最佳作用域是应用作用域。
-
sqlSession就相当于是一个会话,一个顾客,去连接请求。这个实例不是线程安全的,不能被共享,所以最佳的作用域是请求或者方法作用域。用完之后关闭,否则资源占用,就好像接口一共10个,占着不释放就会没接口
**这里面
这里面的每一个Mapper就代表具体的业务