Mybatis介绍与应用

1. 项目中引用mybatis

<!--mybatis 依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.0</version>
</dependency>

<!-- mysql的jdbc 依赖 https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
</dependency>

mybatis 日志相关依赖

<!--日志框架
-->
<!--slf4j 为抽象的日志框架 主要提供日志接口 其具体的日志实现 可以交给 logging,log4j,logback-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!--logback 是 log4j的后续版本,核心重写,性能提升将近10倍,作为slf4j 的具体实现的日志框架 -->
<!--核心-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>
<!--logback-classic 实现了SLF4J API ,可以在 logback 和 其他日志记录系统之间切换-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<!--logback-access 集成了Servlet 容器,可以提供 HTTP访问日志功能。
    https://logback.qos.ch/access.html
    -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>

注:mybatis3的官方文档

2 mybatis 原理

String myBatisConfigResourceConfig="mybatis-config.xml";
String jdbcConfigResourceConfig="jdbc_config.properties";
SqlSession sqlSession=null;
try {
    InputStream myBatisInputStream = Resources.getResourceAsStream(myBatisConfigResourceConfig);
    InputStream jdbcInputStream = Resources.getResourceAsStream(jdbcConfigResourceConfig);
    Properties properties=new Properties();
    properties.load(jdbcInputStream);
    //建造 sql会话工厂
    //注意构建者 方式
    SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(myBatisInputStream, properties);
    //build(InputStream inputStream, String environment, Properties properties)   添加 environment 参数可以指定数据源
    //通过SqlSessionFactory 映射  SqlSession
    //sqlSessionFactory.getConfiguration();//取得 sqlSessionFactory 中的配置
    sqlSession=sqlSessionFactory.openSession();//打开一个会话  一个SqlSession 可以执行 一组的 sql
    Assert.assertNotNull(sqlSession);
    List<RoleDto> roleList= sqlSession.selectList("com.ceba.mybatis.demo.dao.RoleDao.selectRole");
    //映射Mapper
    Assert.assertNotNull(roleList);
} catch (IOException e) {
    log(e.getMessage());
}finally {
    if(sqlSession != null){
        sqlSession.close();
    }
}

mybatis 主要是通过 sql 映射 来执行 sql
SqlSessionFactory 就相当于 数据库连接池
SqlSession 代表 要操作一次数据库
sqlSession.selectList 代表 执行那一条SQL的映射语句
SqlSessionFactoryBuider 用来 建造数据库 连接池
在这里插入图片描述
连接池的名称,就是数据源的名称,一个配置文件可以配置多个 数据源,同一时间只能使用一个数据源。

3.配置文件讲解

mybatis-config.xml 配置

<?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>

    <!--设置 mybatis 的参数设置 解释请浏览 http://www.mybatis.org/mybatis-3/zh/configuration.html#properties -->
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultStatementTimeout" value="25"/>
        <setting name="defaultFetchSize" value="100"/>
        <setting name="safeRowBoundsEnabled" value="false"/>
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

        <!--mybatis 日志
            可选的日志类型
            SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING
        -->
        <setting name="logImpl" value="SLF4J"/>

    </settings>
    
    <!-- java 类型别名
        RoleDto  com.ceba.mybatis.demo.dto.RoleDto
        那么 RoleDto 就代表 com.ceba.mybatis.demo.dto.RoleDto 类的别名
        映射文件 里 resultType parameterType 就可以简写为 RoleDto
        别名的三种表现方式 -->
    <typeAliases>
        <!--   1.特指  具体到包.类名-->
        <!--<typeAlias alias="RoleDto" type="com.ceba.mybatis.demo.dto.RoleDto"></typeAlias>-->
        <!--   2.泛指  别名等于类名相同  -->
        <package name="com.ceba.mybatis.demo.dto"></package>
        <!--   3.枚举标识 @Alias("RoleDto")  com.ceba.mybatis.demo.dto.RoleDto 类上加枚举-->
    </typeAliases>

    <!-- 自定义类型转换
         数据库类型  与  java类型 的转换关系  接口 org.apache.ibatis.type.BaseTypeHandler
         解释请浏览 http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
         三种表现方式
    -->
    <!--<typeHandlers>
              1.特指  具体到包.类名
            <typeHandler  handler=""></typeHandler>
              2.泛指  别名等于类名相同
            <package name=""></package>
             3.枚举标识 @MappedJdbcTypes(JdbcType.VARCHAR)  并继承 BaseTypeHandler
        </typeHandlers>-->

    <!-- 对象工厂
        <objectFactory type=""></objectFactory>
    -->

    <!--插件
        拦截处理,有点像 过滤器
        <plugins>
            <plugin interceptor=""></plugin>
        </plugins>
    -->






    <!--mybatis 数据源 配置
        default 属性标识 默认的数据源
    -->
    <environments default="development">
        <environment id="development">

            <!-- 事务管理配置 -->
            <transactionManager type="JDBC"/>

            <!-- 数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.demo.driver}"/>
                <property name="url" value="${jdbc.demo.url}"/>
                <property name="username" value="${jdbc.demo.username}"/>
                <property name="password" value="${jdbc.demo.password}"/>
            </dataSource>
        </environment>


        <environment id="dzyzpt">
            <!-- 事务管理配置 -->
            <transactionManager type="JDBC"/>

            <!-- 数据源
                type 数据源类型
                    UNPOOLED 没有连接池,每次请求都会 打开连接,关闭连接,速度慢,适用于 简单的应用
                    POOLED 含有连接池,每次请求都会在池中找连接
                    JNDI 使用在DJB 或 应用服务器中,容器可以集中 或在外部配置数据源

                    通过实现接口 的类型
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.dzyzpt.driver}"/>
                <property name="url" value="${jdbc.dzyzpt.url}"/>
                <property name="username" value="${jdbc.dzyzpt.username}"/>
                <property name="password" value="${jdbc.dzyzpt.password}"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>

        <!-- 使用相对于类路径的资源引用 -->
        <mapper resource="roleMapper.xml"/>

        <!-- 将包内的映射器接口实现全部注册为映射器 -->
        <!--<package name="org.mybatis.builder"/>-->

        <!-- 使用完全限定资源定位符(URL) -->
        <!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>-->


        <!-- 使用映射器接口实现类的完全限定类名 -->
        <!--<mapper class="org.mybatis.builder.AuthorMapper"/>-->

    </mappers>
</configuration>

jdbc_config.properties

jdbc.demo.driver=com.mysql.jdbc.Driver
jdbc.demo.url=jdbc:mysql://127.0.0.1:3306/shiro_demo?useUnicode=true&characterEncoding=utf8
jdbc.demo.username=root
jdbc.demo.password=ceba


jdbc.dzyzpt.driver=com.mysql.jdbc.Driver
jdbc.dzyzpt.url=jdbc:mysql://127.0.0.1:3306/dzyzpt?useUnicode=true&characterEncoding=utf8
jdbc.dzyzpt.username=root
jdbc.dzyzpt.password=ceba

roleMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ceba.mybatis.demo.dao.RoleDao">
    <select id="selectRole" resultType="RoleDto">
        select * from u_role
    </select>


    <!--
        <cache />
        myBatis 缓存的使用
        select 语句 会查询缓存
        insert,delete,update 操作过后 会更新缓存

        具体参考 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
    -->



    <!--myBatis 自定义缓存
        1.自定义的缓存必须实现 Cache 接口
        2.编写缓存类
        <cache type="com.domain.something.MyCustomCache">
          <property name="cacheFile" value="/tmp/my-custom-cache.tmp"/>
        </cache>
    -->

</mapper>

logback.xml

<configuration  debug="false" xmlns="http://ch.qos.logback/xml/ns/logback"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
               https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--mybatis 日志-->
    <logger name="com.ceba.mybatis.demo.dao" level="TRACE"></logger>
    <!-- 日志级别 -->
    <root level="INFO">
        <appender-ref ref="console"></appender-ref>
    </root>

</configuration>

项目结构
在这里插入图片描述
logback.xsd 是 logback xml 的语法约束文档,书写时 有提示作用 下载

mybatis 的语法 官方文档

4 mybatis 的日志

mybatis 内置了日志工厂,可以使用不同的 日志框架 SLF4J,LOG4J,LOGGIN

  1. 在配置中选择一种 日志 框架

    <setting name="logImpl" value="SLF4J"/>
    
  2. 为 sql映射接口 加上 日志记录器

     <logger name="com.ceba.mybatis.demo.dao" level="TRACE"></logger>
    

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190215171707122.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDAwMjU3,size_16,color_FFFFFF,t_70)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值