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三的主要内容,如果未能解决你的问题,请参考以下文章