1. Mapper配置文件处理特殊字符

用 &gt; 和 &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 入门 (二)的更多相关文章

  1. mybatis入门二-----增删改查

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  2. mybatis 入门二

    1.新建一个java项目 2.加入mybatis.jar和mysql.jar 3.加mybatis的配置文件 mybatis.xml <?xml version="1.0" ...

  3. mybatis入门(二):增删改查

    mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...

  4. <MyBatis>入门二 全局配置文件

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  5. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

  6. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  7. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  8. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  9. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

随机推荐

  1. H5新特性 本地存储---cookie localStorage sessionStorage

    本地存储的作用 :避免登录网站时,用户在页面浏览时重复登录,也可以实现快速登录,一段时间内保存用户的登录效果,提高页面访问速率 在html5中提供三种数据持久化操作的方法: 1.cookie 可看作是 ...

  2. 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)

    题目链接 简单区间dp 令\(f[i][j]\)表示\([i,j]\)的最短长度 先枚举区间,然后在区间中枚举长度\(k\),看这个区间能不能折叠成几个长度为\(k\)的,如果能就更新答案. #inc ...

  3. 服务端php之文件上传

    知识点 echo $_SERVER['PHP_SELF']; 自动获取当前文件的路劲(即提交地址为当前页面) 当一个表单有文件域(即文件上传)的时候,method(提交方式)要设置post,这样更加安 ...

  4. 8. :before 和 ::before 区别?【CSS】

    单冒号(:)用于CSS3伪类 双冒号(::)用于CSS3伪元素 对于CSS2之前已有的伪元素,比如:before,单冒号和双冒号的写法::before作用是一样的.

  5. iOS 静态、全局变量、常量

    关键字static 两个概念:生命周期.作用域生命周期:这个变量能存活多久,它所占用的内存什么时候分配,什么时候收回.作用域:这个变量在什么区域是可见的,可以拿来用的. static分两种情况:修饰局 ...

  6. lxterminal命令打开新窗口并执行python脚本

    lxterminal -e python3 -i test.py 注意,路径要写对,用绝对路径

  7. Js网站开发学习第一天

    1.登录时,记住密码单选框,鼠标移上去显示div里的内容,移开则消失: <head> <meta http-equiv="Content-Type" conten ...

  8. 【mysql】centos7下mysql的安装以及基本操作

    centos7使用的MariaDB,替代了早期版本默认的MySQL.MariaDB是MySQL的一个分支,由开源社区维护,采用GPL授权许可,且MariaDB完全贱人MySQL. 检查centos7下 ...

  9. UTF-8 中文编码范围

    主流的匹配字符有两种 [\u4e00-\u9fa5]和[\u2E80-\u9FFF],后者范围更广,包括了日韩地区的汉字 import re pattern = re.compile("[\ ...

  10. eclipse更改web项目访问路径(修改配置文件)

    1.打开你的web项目,然后找到 .settings文件夹,如果你的项目中没有这个文件夹,请搜索如何显示web项目中的隐藏文件夹就能够看到了. 2.打开.settings文件夹找到这个文件. 3.在这 ...