MyBatis的基本用法

1.MyBatis的持久化解决方案将用户从原始的JDBC访问中解放出来,用户只需要定义需要的操作的sql语句,无需关注底层的JDBC,就可以面向对象的方式进行持久层操作。

2.SqlSessionFactory是MyBatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder来获得,而SqlSessionFactoryBuilder则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。其也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在,在应用运行期间不要重复创建多次,建议使用单例。

3.SqlSession是MyBatis的关键对象,是执行持久化操作的对象,类似于JDBC中的Connection。它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。使用玩SqlSession之后关闭Session很重要,应该确保使用finally块来关闭它。

4.配置文件

InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");

SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);

SqlSession session = ssf.openSession();

typeAliases类型命名

<typeAliases>

  <typeAlisa alias="user" type="com.pojo.User">

</typeAliases>

也可以指定包名

<typeAliases>

  <typeAlisa name="com.pojo">

</typeAliases>

mapper映射器

MyBatis需要自己写sql语句,mapper映射器告诉MyBatis到哪里去找映射文件

使用类路径

<mappers>

<mapper resource="com.mapper.User.xml">

</mappers>

使用本地文件

<mappers>

<mapper url="file:///c:mapper/User.xml">

</mappers>

使用类接口

<mappers>

<mapper class="com.mapper.IUser">

</mappers>

使用包名

<mappers>

<package name="com.mapper">

</mappers>

MapperXML映射文件

select查询

insert插入

update更新

delete删除

sql可被其它语句引用的可重用语句块

cache给定命名空间的缓存配置

cache-ref其它命名空间缓存配置的引用

resultMap描述如何从数据库结果集中加载对象

5.动态sql

if

choose

where

set

foreach

bind

<mapper namespace="com.mapper.User">

  <select id="selectUserByIdLike">

    select * from user where state=‘ACTIVE‘

    <if test="id != null">

      and id = #{id}

</select>

</mapper>

6.事务管理

事务具备的四个特性:原子性(事务是应用中不可再分的最小逻辑执行体),一致性(事务执行的结果,必须从一种一致性到另一种一致性,一致性是通过原子性来保证的),隔离性(各个事务的执行互补干扰,并发执行的事务之间也不能相互影响),持续性(事务一旦提交,对数据所做的任何改变都要记录到永久存储器中,保存到物理数据库中)

MyBatis的事务管理分为两种

JDBC的事务管理机制:利用java.sql.Connection完成事务的提交,回滚,关闭

MANAGED事务管理机制:MyBatis自身不会去实现事务管理,而是交给WebLogic,JBOSS来实现事务的管理

事务的配置在xml中

<environment id="mysql">

<transactionManager type="JDBC"/>

</environment>

JdbcTranction使用java.sql.Connection来完成事务操作

ManagedTranction让容器来管理的

7.缓存机制

一级缓存是SqlSession级别的缓存,二级缓存是mapper级别的缓存,二级缓存是多个SqlSession共享的

一级缓存在操作数据库时需要构造SqlSession对象,在对象中有一个HashMap用于存储数据,不同的SqlSession之间的缓存数据区域互不影响

当同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存,第二次查询时会从缓存中获取数据,不再去底层数据库中查询,从而提高查询效率。如果SqlSession执行了DML操作,insert,update,delete,并提交到了数据哭,MyBatis则会清空SqlSession中的一级缓存。当一个SqlSession结束后它的以及缓存也就不存在了,默认开启一级缓存

不同的SqlSession两次执行相同的namaespace下的sql语句,第一次执行完毕会将数据中查询的数据写到缓存,第二次查询会从缓存中获取数据,不再去底层数据库查询。需要在setting全局参数配置开启二级缓存

<settings>

<setting name="cacheEnabled" value="true">

</settings>

<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>开启mapper的namespace下的二级缓存

eviction回收策略

LRU最近最少使用的策略,移除最长时间不被使用的对象

FIFO先进先出策略,安对象进入缓存的顺序来移除它们

SOFT软引用策略,移除基于垃圾回收状态和软引用规则的对象

WEAK弱引用策略。更积极地移除基于垃圾回收状态和弱引用规则的对象

使用二级缓存时,与查询结果映射的java对象必须实现java.io.Serializable接口的序列化操作和反序列化操作,因为二级缓存数据存储介质多种多样,不一定在内存,有可能在硬盘或远程服务器

时间: 2024-10-11 23:52:09

MyBatis的基本用法的相关文章

02—mybatis的基本用法01

深入mybatis的配置文件(mybatis-config.xml) MyBatis的配置文档结构 顶层configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 |-environment 环境变量 |-transactionManager 事务管理器 |-dataSource 数据源 databaseId

Mybatis的map用法

当Mybatis传过来的值是map类型的时候,有两种处理方法 1.将数值装入类封装起来 public interface IStudentDao { // 根据姓名和年龄查询 List<Student> selectStudentsByCondition(Map<String, Object> map); // 根据姓名和年龄查询 List<Student> selectStudentsByCondition2(String name,int age); } 2.map

mybatis中@Param用法

用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 我们先来看Mapper接口中的@Select方法 package Mapper; public interface Mapper { @Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}")

Mybatis标签bind用法

Mybatis使用bind元素进行模糊查询,不用在乎数据库是mysql还是oracle从而提高可移植性 使用bind元素传递多个参数 public List<Student> findStudents(@Param("studentName")String studentName,@Param("note")String note) <select id="getStudent" resultMap="studentM

Mybatis中&lt;resultMap&gt;用法(主要用于一对多去重)

一.创建部门表和员工表: 创建部门信息表`t_department`,其中包括`id`, `name` CREATE TABLE t_department (         id INT AUTO_INCREMENT,         name VARCHAR(20) UNIQUE NOT NULL,         PRIMARY KEY(id)     ) DEFAULT CHARSET=UTF8; 往部门表中插入数据: INSERT INTO t_department (name) VA

Mybatis之foreach用法----List、Array、Map三种类型遍历

在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件.特此记录下不同情况下书写方式!-------仅供大家参考------ 1. foreach元素的属性 collection: 需做foreach(遍历)的对象,作为入参时,list.array对象时,collection属性值分别默认用"list"."array"代替,Map对象没有默认的属性值.但是,在作为入参时可以使用@Param("keyName")注解来设置自

mybatis like的用法

oracle数据库: Java代码   SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 Java代码   SELECT * FROM user WHERE name like '%'||#{name}||'%' SQLServer数据库: Java代码   SELECT * FROM user WHERE name like '%'+#{name}+'%' mysql数据库: Java代码   SELECT * FROM

[已解决] MyBatis 中bind用法

JAVA: TC_ENTR_FLOW selectFlowForUpdate(String ENTR_ID); XML: <select id="selectFlowForUpdate" resultMap="BaseResultMap" parameterType="java.lang.String"> <bind name="ENTR_ID" value="'%' + _parameter&qu

mybatis if高级用法

<select id="qryCord4Mgr" parameterType="map" resultMap="com.lecing.qry.ms.dao.QryCord4MsDAO.rs_CordVO"> select a.cordno,a.rity,a.flatno,a.flatn,a.fsubno,a.fsubn,a.fordno,a.custno,a.custname,a.custmbl,a.idcard,a.cardpic2