Mybatis配置解析-03

1.核心配置文件
JDBC中连接数据库的URL转义:"jdbc:mysql://localhost:3306/mybatis?useSSL=true&**amp**;useUnicode=true&characterEncoding=utf8"
mybatis-config.xml
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
2.环境配置(environments)
MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
学会使用多套运行环境
Mybatis默认的事务管理器就是JDBC,连接池 POOLED
3.属性(properties)
我们可以通过properties来实现引用配置文件
编写一个配置文件
db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true&;characterEncoding=utf8
user=root
password=123

顺序:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

还可以在内部使用
在这里插入图片描述4.类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写

<select id="getUserList" resultType="User">
    select * from mybatis.user
  </select>
<select id="getUserById" parameterType="int" resultType="com.Pojo.User">

    select *from mybatis.user where id=#{id}

</select>
    <!--可以给实体类起别名-->
    config.xml
    <typeAliases>
        <typeAlias type="com.Pojo.User" alias="User"/>

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,

<select id="getUserList" resultType="user">
    select * from mybatis.user
  </select>
<select id="getUserById" parameterType="int" resultType="com.Pojo.User">

    select *from mybatis.user where id=#{id}

</select>
    <!--可以给实体类起别名-->
    config.xml
    <typeAliases>
               <package name="com.Pojo.User"/>

如果实体类多的话就用第二种
如果少的话就用第一种因为可以DIY

但是如果有注解、
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:

@Alias("author")
public class Author {
    ...
}

注解在实体类的上边
5.设置(settings)
在这里插入图片描述

在这里插入图片描述6.其他配置
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
7.映射器(mappers)
注册绑定我们的
MapperRegistry:注册绑定我们的Mapper文件。
方式一:

   <mappers>
        <mapper resource="com/Dao/UserMapper.xml"/>
    </mappers>

方式二:使用Class文件绑定Mapper文件

   <mappers>
           <mappers>
<!--        <mapper resource="com/Dao/UserMapper.xml"/>-->
        <mapper class="com.Dao.UserMapper"/>
    </mappers>

    </mappers>

注意点:接口和他的配置文件必须同名,同包
方式三:

<mappers>
        //<mapper resource="com/Dao/UserMapper.xml"/>
        <package name="com.Dao.UserMapper"/>

    </mappers>

注意点:接口和他的配置文件必须同名,同包
8.生命周期和作用域
生命周期和作用域都是至关重要的,因为错误的使用会导致非常严重的并发问题
生命周期和作用域

作用域(Scope)和生命周期

理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。

我们可以先画一个流程图,分析一下Mybatis的执行过程!

作用域理解

SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。

SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。

由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。

因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。

如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try...catch...finally... 语句来保证其正确关闭。

所以 SqlSession 的最佳的作用域是请求或方法作用域。

在这里插入图片描述在这里插入图片描述
学会了Crud,和基本的配置及原理,后面就可以学习些业务开发

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值