MyBatis简介

更简化的办法:通过packge的name属性直接直接指定包名,mybatis会自动扫描指定包下的JavaBean,

并默认设置一个别名,默认名称为JavaBean的非限定类名.

例:

<typeAliases>

              <package name="cn.smbms.model"/>

</typeAliases>

mappers元素

<mappers>

//第一种:设置指定mapper文件相对路径

         <mapper resource="cn/smbms/dao/UserMapper.xml" />

//第二种:设置mapper文件所在包

         <package name="cn.smbms.dao" />

</mappers>

 

mapper.xml SQL映射文件

<!DOCTYPE mapper 

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace的值为UuserMapper文件的所在路径 -->

<mapper namespace="cn.smbms.dao.UserMapper">

   <!-- 查询用户表记录数   id为唯一调用的方法名   resultType为返回值类型-->

      <select id="getAllUserName" resultType="String">

         select userName from smbms_user

      </select>

      <select id="getAllUser" resultType="User">

            select * from smbms_user

   </select>

</mapper> 

为什么需要使用框架技术?

框架技术是一个应用程序的半成品,提供可重用的公共结构,是按一定规则组织的一组组件。

主流框架

Strtus2

MVC设计模式的实现,拦截器,可变和可重用的标签.

HIBERNATE

ORM,简化数据库操作 DAO层.

Spring

依赖注入容器/AOP的实现

声明式事物

简化JavaEE应用

粘合剂,将上面两个框架组装起来

Spring MVC

结构最清新的MVCModel2实现

高度可配置,支持多种视图技术

定制化开发

MyBatis

半自动化的ORM实现

dao层

动态SQL

小巧灵活,简单易学

 

使用maven创建自动导包

  1. 1.       下载maven压缩包:http://maven.apache.org/download.cgi
  2. 2.       解压下载好的压缩包,创建环境变量

a)       设置MAVEN_HOME:解压目录

b)      设置PATH环境变量为:%MAVEN_HOME%in

  1. 3.       eclipse导入maven:Window-Preferences-Maven-Installations-Add添加maven选中,设置User Settings 两个都设置为maven解压目录下的conf-settings.xml文件.
  2. 4.       配置settings.xml文件

设置压缩包储存目录

<localRepository>F:apache-maven-3.5.2warehouse</localRepository>

设置JDK版本(放在<profiles></profiles>)

<profile>   

              <id>jdk-1.8</id>   

                     <activation>   

                             <activeByDefault>true</activeByDefault>   

                             <jdk>1.8</jdk>   

                     </activation>   

              <properties>   

              <maven.compiler.source>1.8</maven.compiler.source>   

              <maven.compiler.target>1.8</maven.compiler.target>   

              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>   

</properties>

</profile>

设置阿里云库(放在<mirrors></mirrors>)

 <mirror>

        <id>nexus-aliyun</id>

        <mirrorOf>central</mirrorOf>

        <name>Nexus aliyun</name>

       <url>http://maven.aliyun.com/nexus/content/groups/public</url>

       </mirror>

  1. 5.       设置Window-Preferences-Maven-User Settings重新导入settings.xml文件应用,自动下载常用包文件到设定目录.
  2. 6.       创建maven项目,pom.xml文件里编写需要导入的包

查询所在目录:http://maven.aliyun.com/nexus/content/groups/public/

或自己配置的文件保存目录下查询

格式参考:

<dependencies>

<dependency>

       <groupId>所在目录名</groupId>

       <artifactId>文件名</artifactId>

       <version>文件版本</version>

      </dependency>

      <dependency>

       <groupId>org.mybatis</groupId>

          <artifactId>mybatis</artifactId>

          <version>3.4.5</version>

      </dependency>

      <dependency>

          <groupId>log4j</groupId>

       <artifactId>log4j</artifactId>

       <version>1.2.17</version>

      </dependency>

 </dependencies> 

MyBatis环境搭建或自己导包

第一步:导包

第二步:编写MyBatis核心配置文件

  

编写数据库连接配置文件 db.properties

jdbc.url=jdbc:mysql://localhost:3306/nodemgr_node_and_auth?serverTimezone=GMT&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.user=nodeManagement
jdbc.password=nodeManagement
jdbc.filters=stat
jdbc.maxActive=20
jdbc.initialSize=1
jdbc.maxWait=60000
jdbc.minIdle=10
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.validationQuery=SELECT 'x'
jdbc.testWhileIdle=true
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.maxOpenPreparedStatements=20
jdbc.removeAbandoned=true
jdbc.removeAbandonedTimeout=1800
jdbc.logAbandoned=true

编写logback配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 开发环境 -->
   
<springProfile name="dev">
        <appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    %d - %msg%n
                </pattern>
            </layout>
        </appender>
        <!--配置文件日志输出-->
       
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 配置日志打印过滤 -->
            
<filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>DENY</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
               
<fileNamePattern>D:/logs/info.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>
        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
               
<fileNamePattern>D:/logs/error.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>

        <!--配置控制台日志输出-->
       
<root level="info">
            <appender-ref ref="consolelog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    </springProfile>

    <!-- 测试环境 -->
   
<springProfile name="test">
        <appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    %d - %msg%n
                </pattern>
            </layout>
        </appender>
        <!--配置文件日志输出-->
       
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 配置日志打印过滤 -->
           
<filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>DENY</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
               
<fileNamePattern>D:/logs/info.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>

        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
               
<fileNamePattern>D:/logs/error.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>

        <!--配置控制台日志输出-->
       
<root level="info">
            <appender-ref ref="consolelog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    </springProfile>

    <!-- 生产环境 -->
   
<springProfile name="prod">
        <appender name="consolelog" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>
                    %d - %msg%n
                </pattern>
            </layout>
        </appender>
        <!--配置文件日志输出-->
       
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 配置日志打印过滤 -->
           
<filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>DENY</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
                
<fileNamePattern>var/logs/info.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>

        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>
                    %d - %msg%n
                </pattern>
            </encoder>
            <!--滚动策略-->
           
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--路径-->
               
<fileNamePattern>var/logs/error.%d.log</fileNamePattern>
            </rollingPolicy>
        </appender>

        <!--配置控制台日志输出-->
       
<root level="info">
            <appender-ref ref="consolelog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    </springProfile>
</configuration>

 

编写MyBatis核心文件

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPEconfiguration 
PUBLIC"-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"
>
<configuration>
   <!-- 配置全局懒加载 -->
   
<settings>
      <setting name="logImpl" value="LOG4J"/>
        <setting name="lazyLoadingEnabled" value="false"/> 
        <setting name="aggressiveLazyLoading" value="true"/> 
    </settings
   <!-- 配置分页插件 -->
  
<plugins>
      <plugin interceptor="com.github.pagehelper.PageInterceptor">
      </plugin>
   </plugins>
  
  
</configuration>

 

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的项目.

MyBatis的三个基本要素

MyBatis核心接口和类

SqlSessionFactoryBuilder

用过即丢,其生命周期只存在于方法体内

可重用其来创建多个SqlSessionFactory实例->调用build()方法

负责构建SqlSessionFactory,并提供多个build方法的重载

SqlSessionFactory

是每个mybatis应用的核心

作用:创建SqlSession实例 调用openSession(boolean autoCommit)方法,注:参数默认为true(关闭事务控制),false(开始事务控制)

作用域:Application

生命周期与应用的生命周期相同

单例模式:存在于整个运行时,并且同时只存在一个对象实例

SqlSession

包含了执行SQL所需的所有方法

对应一次数据库会话,会话结束必须关闭

线程级别,不能共享

两种使用方式:

通过SqlSession实例直接运行映射的sql语句

*  基于Mapper接口方式操作数据

在mapper.xml同级目录下创建一个接口,返回值类型为sql语句接收的类型,方法名跟mapper里面指定的id一致

 

mybatis-config.xml系统核心配置文件

settings的常用全局属性的设置(红色为默认的)

cacheEnabled 对在此配置文件下的所有缓存进行全局性开关  (true/false);

lazyLoadingEnabled 全局设置懒加载.(相关联不进行初始化加载).(true/false);

autoMappingBehavior mybatis对于resultMap自动进行映射匹配(NONE/PARTIAL/FULL);

 

typeAliases类型别名设置(简化返回类型冗余的代码)

原文地址:https://www.cnblogs.com/it-xiaoBai/p/10814815.html