zoukankan      html  css  js  c++  java
  • mybatis 学习笔记 -详解mybatis 及实例demo

    快速入门1 要点:

    首先明白mybatis 是什么

    这是一个持久层的框架。之前叫做ibatis。所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶。不是写错了,它确实就是这个样子的。

    首先,我们来看看mybatis是个什么东西,它有什么用?我们为什么要学习它。mybatis是一个持久层的框架。所谓的持久层,就是我们三层中的dao层。主要负责跟数据库进行交互。可以建立数据库表和系统中的对象的一对一映射关系。这种框架我们称之为orm框架。但是mybatis框架需要自己写sql语句,且不能像hibernate那样自动生成sql语句,并且建立实体类和数据库的映射。所以我们说它是不完全的orm框架。

    首先导入mybatis jar 数据库的驱动包。

    创建myBatis.config.xml配置

    首先配置数据库连接,数据库连接可以单独创建一个db.config.properties 文件进行单独存放

    创建一个properties 文件,取名为db.config 里面配置好数据库连接

    #oracle连接字符串定义
    pacsdb.type=oracle #数据库指定类型
    pacs.driverClassName:oracle.jdbc.driver.OracleDriver #连接数据库要加载驱动.前面oracle.jdbc.driver是包名,类名是OracleDriver
    pacs.url:CWUiPEP9glDkHFwo1E8OOD4cWwdkfTiG9eNGROvijF+jYFm6rPzK9kUW5hod/OUz #数据库的地址 例如:10.68.4.29:8020/oracl
    pacs.username:UiA8nxqOjyo=  #用户名
    pacs.password:9sFRpfIc/oAcWr8+zX5Q6g==

    下一步:需要把刚才创建的数据库连接配置文件加载进来

    <!--数据源配置----->
    <bean id="propertyconfigurer" class="com.msunsoft.rmtdx.security.EncryptPropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:db.config.properties</value>
    </list>
    </property>
    </bean>

    数据库的配置文件加载进来之后,在当前的配置文件里面就可以取到配置文件里面配置的一些变量了。配置如下

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!-- 基本属性 url、user、password -->
    <property name="url" value="${pacs.url}"/>
    <property name="username" value="${pacs.username}"/>
    <property name="password" value="${pacs.password}"/> 
    <property name="connectionProperties" value="${pacs.driverClassName}"/>
    <!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize" value="1"/>
    <property name="minIdle" value="1"/>
    <property name="maxActive" value="20"/>
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="60000"/>
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000"/>
    <property name="validationQuery" value="select 'x'"/>
    <property name="testWhileIdle" value="true"/>
    <property name="testOnBorrow" value="false"/>
    <property name="testOnReturn" value="false"/>
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <property name="poolPreparedStatenents" value="true"/>
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
    !-- 配置监控统计拦截的filters --通过别名的方式配置扩展插件,常用的插件有: 
    监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall-->
    <property name="filters" value="stat"/>
    <!---https://www.cnblogs.com/wuyun-blog/p/5679073.html--这个网站提供了DRUID连接池的实用 配置详解 及全部的配置参数详解--->
    </bean>

    想在程序运行时输出一些日志信息,那么我们就需要配置日志包

    下面配置日志包log4j 

    配置log4j 有两种方式,一种是log4jproperties 另一种是log4j.xml的方式。我们这里用配置xml的方式来配

    下面附上配置代码,这个配置的时候直接复制就可以

    <?xml version="1.0" encoding="UTF-8"?>
    <!--设置log4j2的自身log级别为warn-->
    <configuration status="warn">
        <appenders>
            <console name="Console" target="SYSTEM_OUT">
                <PatternLayout   pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            </console>
            <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/info.log"
                         filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
                <Filters>
                    <ThresholdFilter level="INFO"/>
                    <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                </Filters>
                <PatternLayout  pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
            <RollingFile name="RollingFileDebug" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/debug.log"
                         filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
                <Filters>
                    <ThresholdFilter level="DEBUG"/>
                    <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                    <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
                </Filters>
                <PatternLayout  pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
            <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/remote_diagnosis_pacs/error.log"
                         filePattern="${sys:user.home}/logs/remote_diagnosis_pacs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
                <ThresholdFilter level="ERROR"/>
                <PatternLayout   pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="100 MB"/>
                </Policies>
            </RollingFile>
        </appenders>
        <loggers>
            <!-- 第三方的软件日志级别 -->
            <AsyncLogger name="org.springframework" level="info" additivity="true">
                <AppenderRef ref="RollingFileInfo"/>
            </AsyncLogger>
            <asyncRoot level="all">
                <appender-ref ref="Console"/>
                <appender-ref ref="RollingFileInfo"/>
                <appender-ref ref="RollingFileDebug"/>
                <appender-ref ref="RollingFileError"/>
            </asyncRoot>
        </loggers>
    </configuration>

    下面这个配置是可配,如果集成的是spring 则需要配上mybatis的一个sqlsession工厂

    Mybatis 的sqlsession工厂
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dynamicDataSource"/> 因为数据源已经写好所以这个地方用ref引用 。指定数据源
        <property name="typeAliasesPackage" value="com.msunsoft.rmtdx.entity"/> 这个是类型别名包 默认是类的名称
        <property name="configLocation" value="classpath:mybatis.config.xml"/>
        <property name="mapperLocations" value="classpath*:mapper/${pacsdb.type}/*.xml"/>
    </bean>
    
    Mybatis 自动扫描加载sql映射文件、接口:
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>引用上面配好的sqlSessionFactory
        <property name="basePackage" value="com.msunsoft.rmtdx.mapper"/>自动扫描加载sql文件映射文件,包括接口
    </bean>

    以上咱们的mybatis 配置就算完成了。

    下面就是Mybatis 的用法,

    mybatis 主要的就是两个文件一个是mapping.xml 文件 这个文件里面主要就是sql语句,注意,所有的sql都存在这个文件里面,我觉得这是mybatis的一个特性,特别容易方便管理,代码里压根就不体现sql语句了。 。另一个就是mapping的接口文件。我的个人理解以上就是

    下面弄一个实例demo 

    首先建造数据库表的model类文件 用于映射数据库表

    public class User {
        private int id;
        private String username;// 用户姓名
        private String sex;// 性别
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
            @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", sex=" + sex
                    +  "]";
        }
    
        
        
    
    }

    接着创建一个mapping.xml文件

    注意:mapping.xml里面的namespace 必须是与之对应的接口的全路径。

    下面标签里面的属性可以自行百度下,这里就不详解了。

    <?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.msunsoft.rmtdx.mapper.UserMapping">
      <resultMap id="BaseResultMap" type="com.msunsoft.rmtdx.entity.po.User">
        <id column="ID" jdbcType="DECIMAL" property="id" />
        <result column="username" jdbcType="VARCHAR" property="name" />
    
    
      </resultMap>
      <select id="selectBlApplyAll" resultMap="BaseResultMap"  parameterType="com.msunsoft.rmtdx.entity.vo.getUser">
        select ID, username    from User     
    </select>
    
    </mapper>

    在创建mapping.xml 对应的一个接口

    public interface UserMapper {
        /**
         * 获取数据列表
         * @param
         * @return
         * 添加标识:2018-01-03 10:55 赵成伟
         */
        List<PacsConsultationApply> selectBlApplyAll();
    
    }

    以上mybatis的环境全部配置完毕,下面就可以去程序里面跑了。

    下面记录下个别的用法resultMap 是个键值对的接口。 定义个别名

    <resultMap  id="BaseresultMap" type="指向model类文件的全路径">

    <id property=”id” jdbcType=”string” column=”order_id”/>

    注释,这个id是专门用来针对主键的。

    result 是针对一般字段的。

    <result peoperty=”name” column=”myname”/>

    <Association property=’’另一个表名” >

    <id property=”id” jdbcType=”string” column=”order_id”/>

    </Association >

    </resultMap>

    resultMap 用来封装一些映射关系,键值对。

    Association 关联的意思。一对一查询

    一级缓存与二级缓存

    二级缓存,是一个映射文件级的缓存

    只需要要在mapper里面加个标签就可以

    <cache>

    里面一些配置属性。

     </cache>

    练习。

    Spring 集成mybatis

    首先添加jar包 最重要的是mybatis-spring -1.1.1.jar

    数据库的驱动包等等。。。

    创建实体类

    User

    创建 mapper接口

    Interface userMapper

    创建userMapper..xml

    创建Spring的配置文件beans.xml

     Beans.xml 里面首先配置数据源

    所有的配置都是在bean标签里面配置

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password -->
        <property name="url" value="${pacs.url}"/>
        <property name="username" value="${pacs.username}"/>
        <property name="password" value="${pacs.password}"/>
        <property name="connectionProperties" value="${pacs.driverClassName}"></property>

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000"/>

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="validationQuery" value="SELECT 'x'"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="20"/>

        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="stat"/>
    </bean>

    Mybatis sqlsession工厂

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dynamicDataSource"/> 因为数据源已经写好所以这个地方用ref引用 。指定数据源
        <property name="typeAliasesPackage" value="com.msunsoft.rmtdx.entity"/> 这个是类型别名包 默认是类的名称
        <property name="configLocation" value="classpath:mybatis.config.xml"/>
        <property name="mapperLocations" value="classpath*:mapper/${pacsdb.type}/*.xml"/>
    </bean>

    Mybatis 自动扫描加载sql映射文件、接口:

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>引用上面配好的sqlSessionFactory
        <property name="basePackage" value="com.msunsoft.rmtdx.mapper"/>自动扫描加载sql文件映射文件,包括接口
    </bean>

    事物管理

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dynamicDataSource"/> 引用之前配置的数据源

    </bean>

    使用声明式事物

    <!-- 全注解方式   需加上@Transactional -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    这个配置引用上面定义好的事物管理器

    创建一个mybatis,xml

    里面不需要写啥了,但是得有

  • 相关阅读:
    微信公众平台开发介绍(一)
    C#使用iTextSharp操作PDF文件
    使用NPOI读取Excel文件
    jquery写的树状列表插件-alvintree
    分享一个图片上传插件(TP5.0)
    TP5.0实现无限极回复功能
    php静态缓存简单制作
    LinQ to SQL用法详解
    php简单实现socket通信
    简单分析JavaScript中的面向对象
  • 原文地址:https://www.cnblogs.com/zcwry/p/mybatis.html
Copyright © 2011-2022 走看看