Mybatis 入门 (二)
1. Mapper配置文件处理特殊字符
用 > 和 &It; 代替 > 和 <
2. 延迟加载
单表查询性能比多表关联查询要高得多,即先查询单表,如果需要关联多表时再进行查询
<!-- 全局配置参数 -->
<settings>
<!-- 延迟加载总开关 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置按需加载 -->
<setting name="aggressiveLazyLoading" value="false" />
</settings
3. resultType和resultMap
resultType:当查询字段名和Bean对象属性名一致时,查询结果自动映射
resultMap:当查询字段名与Bean对象属性名不一致时,需要配置resultMap与Bean属性的对应关系,才能映射
association和collection完成一对一和一对多高级映射。
<resultMap id="ResultMap" type="user" >
<!--
字段名:id_,username_,birthday_
id:主键
column:结果集的列名
property:type指定Bean的对应属性
-->
<id column="id_" property="id"/>
<!-- result就是普通列的映射配置 -->
<result column="username_" property="username"/>
<result column="birthday_" property="birthday"/>
</resultMap>
4. 返回主键
<insert id="insertUser" parameterType="User">
<selectKey keyProperty="id" order="AFTER" resultType="int">
select LAST_INSERT_ID()
</selectKey>
INSERT INTO USER(name,sex,age) VALUES(#{name},#{sex},#{age})
</insert>
5. 动态sql
<select id="findByCondition" resultType="User" parameterType="map">
select * from User
<where>
<if test="name!=null">
and name = #{name}
</if>
<if test="id!=null">
and sal = #{id}
</if>
</where>
</select>
6. 缓存
将查询数据放到缓存中,而不用再去数据库从而提高查询效率
- 一级缓存:每个SqlSession有自己的缓存,只能访问自己的(默认一级缓存)
- 二级缓存:每个Mapper有自己缓存,Mapper内的SqlSession可以互相访问
- 二级缓存将数据从内存写入磁盘,序列化和反序列化,所以映射的Bean对象需要实现serializable接口
- 两级缓存查询都将数据放入内存中,下次查询直接从内存读取,但执行其他语句会清空内从数据,下次查询需要再次从数据库拿出数据
<!-- Mybatis-config.xml全局配置参数 -->
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 再需要开启二级缓存的Mapper文件的<mapper namespace>下方添加 -->
<cache />
7. Mapper代理(推荐)
只需要写Bean接口,Bean接口的实现对象由mybatis自动生成,Mapper文件与Bean接口需要遵从下面原则
- mapper文件中namespace为Bean接口的全限定名
- mapper文件中sql语句id为Bean接口中的方法名
- mapper文件中parameterType为Bean接口中方法的输入参数类型
- mapper文件中resultType为Bean接口中方法的返回值类
Bean接口
package com.howl;
public interface userMapper {
public user findUserById(int id);
}
Mapper文件
<?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.howl.userMapper">
<!-- 通过id查询用户 -->
<select id="findUserById" parameterType="Integer" resultType="com.howl.user">
select * from user where id = #{id}
</select>
</mapper>
运行
//通过Bean接口获得Mapper代理对象
userMapper userMapper = sqlSession.getMapper(com.howl.userMapper.class);
//调用代理对象里的方法
user user = userMapper.findUserById(1);
Mybatis 入门 (二)的更多相关文章
- mybatis入门二-----增删改查
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- mybatis 入门二
1.新建一个java项目 2.加入mybatis.jar和mysql.jar 3.加mybatis的配置文件 mybatis.xml <?xml version="1.0" ...
- mybatis入门(二):增删改查
mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...
- <MyBatis>入门二 全局配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- MyBatis入门(二)---一对一,一对多
一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- MyBatis入门学习(二)
在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...
- mybatis入门系列二之输入与输出参数
mybatis入门系列二之详解输入与输出参数 基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...
随机推荐
- docker(一): 安装
开始 docker是一个可以帮助开发者使用容器(containers)开发.部署和运行应用程序的平台.llinux下使用容器部署系统称为containerization. container 是映像( ...
- spring源码解析前瞻
很多人有疑问:为什么要读源码?读源码有什么用?我也一直问自己这些问题,读源码非常枯燥,工作中又用不到,慢慢的自己读源码越发现自己知识的不足,无法把知识串起来,形成知识体系.从单系统中常用的Spring ...
- JDK提供的原子类和AbstractQueuedSynchronizer(AQS)
大致分成: 1.原子更新基本类型 2.原子更新数组 3.原子更新抽象类型 4.原子更新字段 import java.util.concurrent.atomic.AtomicInteger; impo ...
- asp.net core 一个中小型项目实战的起手式——Swagger配置
交流群:863563315 一.Swagger是什么 Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具. 二.如何在项目中加入Swagger ...
- 14 Scroll 滚动搜索
Scroll的用法: 第一次搜的时候,要指定 快照保留时间1min,分页的大小:2条/页: 对于第一次搜索,ES会返回一个这个scroll的id: 下次再搜的时候,就带着这个scrollid去搜就 ...
- 动画处理<并行和串行>
并行动画 当多个动画定义同时指向某个组件,并使用动画控制器启动时,就产生了并行动画(Parallel Animation).例如我们可以让一个组件: 移动的同时改变大小 旋转的同时边界颜色闪烁 圆形图 ...
- ES6- - Map与Set
Map和Set 是 ES6 中新增的一种数据结构.Map为类似于Object的键值对结构,Set为成员唯一的类数组结构.以Map为例介绍两种数据结构的遍历方法.for...of var map = n ...
- Java 解决Emoji表情过滤问题(转载)
本文作者 我是周洲 原文链接 https://blog.csdn.net/u012904383/article/details/79376707 本人使用的是第三种引入jar的方法 问题: Emoji ...
- orangepi获取cpu温度
cat /sys/devices/virtual/hwmon/hwmon1/temp1_input
- Android 设置横屏
以下介绍两种方式 1.1 设置清单文件 <activity android:name=".MainActivity" android:screenOrientation=&q ...