Mybatis三

Posted qiyuancc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis三相关的知识,希望对你有一定的参考价值。

$和#符号的区别

  • 相当于是预处理语句,会将# 换成占位符? ,字符串等数据赋值时自动拼接引号,可以避免SQL注入

  • $ 相当于是处理语句, 直接原样将数据取出 ,直接拼接

Mybatis缓存

缓存主要目的是为了 提高查询效率 .缓存其实就是一个内存空间,存储在程序的某个地方,存储数据.
mybatis支持缓存的,且有两级缓存

  • 一级缓存
  • 二级缓存

有无缓存:

无缓存:用户在访问相同数据时,需要发起多次对数据库的直接访问,导致产生大量IO、读写硬盘的操
作,效率低下
有缓存:首次访问时,查询数据库,将数据存储到缓存中;再次访问时,直接访问缓存,减少IO、硬盘
读写次数、提高效率

MyBatis的 一级缓存是默认的 .无需配置,自动实现.
默认的 一级缓存是SqlSession级别 ,是指同一个SqlSession发起的多次查询同一条数据,会使用缓存.

ps:: Mybatis内部存储缓存使用的是一个HashMap对象,key为 hashCode + sqlId + sql 语句。而value值就
是从查询出来映射生成的java对象。

关闭一级缓存

一级缓存也叫本地缓存(LocalCache),Mybatis的一级缓存是会话级别(SqlSession)层面进行缓存
的。Mybatis的一级缓存是默认开启的。开发项目中不需要做任何配置,但是如果想关闭一级缓存,可以在mybatis配置文件的settings下面使用localCacheScopde=statement来关闭。

二级缓存

二级缓存是Mapper级别 ,比SqlSession级别范围更大.
使用时需要手动设置

  • 1)需要在全局配置文件中开启缓存(默认开着的
<settings>
<!-- 开启缓存(默认就是true) -->
<setting name="cacheEnabled" value="true"/>
</settings>
  • 2需要在mapper中设置caceh即可

使用二级缓存

  • 1)需要在全局配置文件中开启缓存(默认开着的)
  • 2)需要在mapper中设置caceh即可
  • 3)每个会话执行完,要关流close,才会将查询是数据放入缓存
  • 4)实体类需要系列化,实现Serializable接口

mybatis 学习三 关键文件解析

1:  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>  
    <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径  -->  
    <typeAliases>    
         <typeAlias type="com.deppon.test04.entity.StudentEntity" alias="StudentEntity"/>   
    </typeAliases>   
    <mappers>  
        <mapper resource="StudentMapper.xml" />    <!--  可以定义多个mapper>
    </mappers>  
</configuration>  

2: StudentMapper.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.deppon.test04.dao.StudentMapper">  
    <resultMap type="StudentEntity" id="studentResultMap">  
        <id property="studentID" column="STUDENT_ID"/>  
        <result property="studentName" column="STUDENT_NAME"/>  
        <result property="studentSex" column="STUDENT_SEX"/>  
        <result property="studentBirthday" column="STUDENT_BIRTHDAY"/>  
    </resultMap>  
    <!-- 查询学生,根据id -->  
    <select id="getStudent" parameterType="String" resultType="com.deppon.test04.entity.StudentEntity" resultMap="studentResultMap">  
        <![CDATA[ 
            SELECT * from STUDENT_TBL ST 
                WHERE ST.STUDENT_ID = #{studentID}  
        ]]>   
    </select>  
    <!-- 查询学生列表 -->  
    <select id="getStudentAll"  resultType="com.deppon.test04.entity.StudentEntity" resultMap="studentResultMap">  
        <![CDATA[ 
            SELECT * from STUDENT_TBL 
        ]]>   
    </select>   
</mapper>  

3:  mysql.properties

jdbc.driverClassName=com.mysql.jdbc.Driver  
jdbc.url=jdbc:mysql://localhost:3306/student_manager?user=root&password=root&useUnicode=true&characterEncoding=UTF-8

4: dispatcherServlet

 <mvc:annotation-driven />  
    <context:component-scan base-package="liming.maven.example" /> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
    <!-- 导入属性配置文件 -->  
    <context:property-placeholder location="classpath:mysql.properties" />  
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <property name="driverClassName" value="${jdbc.driverClassName}" />  
            <property name="url" value="${jdbc.url}" />  
    </bean>  
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
    <property name="dataSource" ref="dataSource" />  
</bean>  
  
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <property name="configLocation" value="classpath:mybatis-config.xml" />  
    <property name="dataSource" ref="dataSource" />  
</bean>  
<bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
    <property name="mapperInterface" value="com.deppon.test04.dao.StudentMapper" />  
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
</bean>  

 

以上是关于Mybatis三的主要内容,如果未能解决你的问题,请参考以下文章

(转)MyBatis & MyBatis Plus

三Mybatis 操作数据库

Mybatis三

mybatis 学习三 关键文件解析

Mybatis笔记三:iBatis与MyBatis区别

mybatis入门截图三