mybatis详述--20190903

MYBATIS
1.#{}相当于占位符,会自动拼接""、${}动态拼接的变量,不会自动拼接"",在业务层都需要增加@Param("AAA")来指定变量名;
2.Mapper文件执行原理:
    public UserMapper userMapper;
    @Before
    public void setUp() throws Exception {
        // 指定配置文件
        String resource = "mybatis-config.xml";
        // 读取配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 构建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 获取sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        // 1. 映射文件的命名空间(namespace)必须是mapper接口的全路径
        // 2. 映射文件的statement的id必须和mapper接口的方法名保持一致
        // 3. Statement的resultType必须和mapper接口方法的返回类型一致
        // 4. statement的parameterType必须和mapper接口方法的参数类型一致(不一定)
        this.userMapper = sqlSession.getMapper(UserMapper.class);
    }

3.mybatis一级缓存的作用域是sesson,当openSession后,若执行的是相同的sql,mybatis不会执行,会从缓存里取数据;一级缓存默认开启,无法关闭,满足条件:同一个Session,且sql和参数相同。
4.用sqlSession.clearCache()可以清除之前查询过程,重新出发查询;
5.mybatis 的二级缓存的作用域是一个mapper的namespace ,同一个namespace中查询sql可以从缓存中命中。
6.开启二级缓存:
<settings>
    <!--开启二级缓存,全局总开关,这里关闭,mapper中开启了也没用-->
    <setting name="cacheEnabled" value="false"/>
</settings>
7.<![CDATA[ < ]]>这个使用。sql不用转义。
8.mybatis文件的配置:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:properties/*.properties"/>
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url"
                  value="jdbc:mysql://${jdbc.host}:3306/${jdbc.database}?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull"/>
        <property name="username" value="${jdbc.userName}"/>
        <property name="password" value="${jdbc.passWord}"/>
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${jdbc.initialSize}"></property>
        <!-- 连接池最大数据库连接数  0 为没有限制 -->
        <property name="maxActive" value="${jdbc.maxActive}"></property>
        <!-- 连接池最大的空闲连接数,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态 0 为没有限制 -->
        <property name="maxIdle" value="${jdbc.maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${jdbc.minIdle}"></property>
        <!--最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制-->
        <property name="maxWait" value="${jdbc.maxWait}"></property>
    </bean>

    <!-- spring和MyBatis完美整合 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mappers/*.xml"></property>
        <!--如果mybatis-config.xml没有特殊配置也可以不需要下面的配置-->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zpc.mybatis.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- (事务管理)transaction manager -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

9.结果集映射
在PreparedStatementHandler中的query()方法中,是用ResultSetHandler.handleResultSets()来完成结果集的映射的。
1>每条结果都会生成一个java对象
2>根据构造方法实例化对象
3>自动映射(结果集有但在resultMap里没有配置的字段),有两情况会发生自动映射
在resultMap上配置了autoMapping="true"属性
在mybatis-config.xml配置了autoMappingBehavior="PARTIAL|FULL",默认为PARTIAL。
在实际应用中,都会使用自动映射,减少配置的工作。自动映射在Mybatis中也是默认开启的。
4>最后再映射属性。

 

[深入浅出了解mybatis]

Mybatis解读
1.Mybatis的运行可以分为两部分:读取配置文件(解析XML文件)缓存到Configuration对象里,用来创建SQLSessionFactory;第二部分就是sqlSession的执行过程。
2.代理模式:在原来的服务上增加一个占位,通过这个占位去控制访问。
3.动态代理一般分为两部分:JDK提供的反射机制(必须提供接口类来实现);CGLIB代理。
4.SQLSessionFactory是mybatis的核心类之一,用来创建SQLSession。
5.SQLSession的四大对象:Executor执行器,StatementHandler执行数据库的操作,是四大对象的核心,ParameterHandler对sql参数的处理,ResultHandler对结果集的封装返回。
6.Spring ioc是运用反射机制完成的。AOP则是根据动态代理实现,主要用处是事务的控制。
7.Spring的事务隔离(存在两个以上的事务会出现错误)和传播行为(方法之间的调用)。
8.SpringMVC:核心的DispatcherServlet,servlet根据拦截的配置,请求分发。增加@RequestBody能把结果集转换成Json数据,返回给视图层。
9.SqlSessionTemplate是mybatis的一个模板类,通过调用sqlSession来完成工作。
10.SpringAop分为申明式事务(xml文件里配置)和编程式事务。
11.mybatis的批量操作可以通过配置文件实现(settings增加配置属性:defaultExecutorType为BATCH)或者可以通过java代码实现(sqlSessionFactory.openSession(ExecutorType.BATCH)).
12.mybatis调用存储过程:
1》statementType=CALLABLE#申明调用存过。
2》参数定义:mode=IN(定义为输入参数)/OUT(定义为出参)。
13.分表查询:
例如公司账单,根据年份,那么查询sql可以写成:select * from t_bill_${year} where id=#{id}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值