1:解决实体类成员变量和数据库表中字段名称不一致的问题:

方法1:在写sql语句时,给表中的列名起别名,名字和实体类名称一样

方法2:使用resultMap来解决:

例如:实体类中成员变量为id,name,数据库表中的列名叫bookid,bookname,两者不一致则使用resultmap:

List<Book> getall();

    <resultMap id="bookmap" type="book">
<!-- 主键绑定-->
<id property="id" column="bookid"></id>
<!-- 非主键绑定-->
<result property="name" column="bookname"></result>
</resultMap>
<select id="getall" resultMap="bookmap">
select bookid,bookname from book
</select>

表的关联关系:一对多,多对一,一对一,多对多等关联关系

数据库中有两张表,分别为student和teacher

一对多关系:(一个老师对应多个学生)

Teacher getById(Integer id);

    <resultMap id="teachermap" type="teacher">
<!-- 主键绑定-->
<id property="id" column="teid"></id>
<!-- 非主键绑定-->
<result property="name" column="tname"></result>
<!-- student实体类绑定,由于为List类型,所以-->

<collection property="students" ofType="student">
<!-- student中主键绑定-->
<id property="id" column="sid"></id>
<!-- stduent中非主键绑定-->
<result property="name" column="sname"></result>
<result property="tid" column="tid"></result>
</collection>
</resultMap>

<select id="getById" parameterType="int" resultMap="teachermap">
SELECT s.id sid, s.name sname, tid, t.id teid,t.name tname
FROM teacher t left JOIN student s ON s.tid=t.id
WHERE t.id=1
</select>

Teacher byId = teacherMapper.getById(1);
System.out.println(byId);

多对一关系:

Student getbyid(Integer id);

<mapper namespace="com.ztb.dao.StudentMapper">

<resultMap id="studentmap" type="student">
<!-- 主键绑定-->
<id property="id" column="sid"></id>
<!-- 非主键绑定-->
<result property="name" column="sname"></result>
<result property="tid" column="tid"></result>

<association property="teacher" javaType="teacher">
<id property="id" column="teid"></id>
<result property="name" column="tname"></result>
</association>

</resultMap>

<select id="getbyid" parameterType="int" resultMap="studentmap">
SELECT s.id sid, s.name sname, tid, t.id teid,t.name tname
FROM teacher t LEFT JOIN student s ON s.tid=t.id
WHERE s.id=#{id}
</select>

Student byId = studentMapper.getbyid(1);
System.out.println(byId);

一对一与上两个类似

多对多关系需要有个第三张表来表示两表之间的关系。

总之无论是什么关联关系,如果某方持有另一方的集合,则使用<collection>标签完成映射,如果某方持有另一方的对象,则使用<association>标签完成映射。

2:事务:多个操作同时完成,或同时失败称为事务处理

四个特性:原子性,一致性,隔离性,持久性

在mybatis中设置事务:

<transactionManager type="JDBC"/>:程序员自己控制处理的提交和回滚

可以设置为自动提交:

sqlsession=factory.openSession():默认是手动提交,设置为false也是手动提交

sqlsession=factory.openSession(true):自动提交,不必再写sqlsession.commit().

3:缓存:mybatis框架提供两级缓存,一级缓存和二级缓存,默认开启一级缓存

缓存的目的就是为了提高查询效率

流程:先到缓存里查,查不到的就去数据库查,查完放缓存里,下次在查询的时候直接从缓存里取,不在访问数据库。如果数据库发生commit操作,则清空缓存

一级缓存使用的是sqlsession的作用域,同一个sqlsession共享一级缓存的数据

二级缓存使用的是mapper的作用域,不同的sqlsession只要访问的是同一个mapper.xml文件,则共享二级缓存作用域

二级缓存步骤:

3.1在核心配置文件中加入

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

3.2.在mapper.xml中开启二级缓存

<cache></cache>

3.3实体类必须实现java.io.serializable,保证实体可序列化

Mybatis的使用(4)的更多相关文章

  1. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  2. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  3. [原创]mybatis中整合ehcache缓存框架的使用

    mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...

  4. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  5. mybatis plugins实现项目【全局】读写分离

    在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...

  6. MyBatis基础入门--知识点总结

    对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...

  7. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  8. MyBatis源码分析(一)开篇

    源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...

  9. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

  10. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

随机推荐

  1. 283. Move Zeroes - LeetCode

    Question 283. Move Zeroes Solution 题目大意:将0移到最后 思路: 1. 数组复制 2. 不用数组复制 Java实现: 数组复制 public void moveZe ...

  2. 122_Power Pivot&Power BI不连续日期的日环比

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 这两天有朋友在交流,dax中使用时间智能函数写日环比,一个 dateadd 就可以了.但是有些业务不是每天都连续 ...

  3. Netty是什么,Netty为什么速度这么快,线程模型分析

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,现在下着大雨看来是去 ...

  4. 基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  5. Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景

    在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...

  6. VS Code - Vim 插件自动切换输入法

    前言: 在使用 Linux 的过程中,vim 是一个不错的编辑器,以至于多数人将其用成了习惯,在没有 vim 的环境下还是习惯用 vim 的快捷键来编辑文本.所以便有开发者们为众多的 IDE 和文本编 ...

  7. rabbitMq急速安装教程

    背景 我们在工作中很多时候其实也用过mq.但是仅仅只是会用,所以老猫在此想完整地归纳一下mq相关的知识点,在此分享给大家.首先给大家带来的是mq的单机急速安装.操作系统时centos7.(本来想记录到 ...

  8. SpringBoot之:SpringBoot中使用HATEOAS

    目录 简介 我们的目标 构建Entity和Repository 构建HATEOAS相关的RepresentationModel 构建Controller HATEOAS的意义 总结 简介 HATEOA ...

  9. Python调用腾讯云API,实现人脸年龄变化

    网上看到了一个教程,调用腾讯云的人脸识别api和修改年龄api来实现模拟人物不同年龄的面貌 但是大多数教程的代码都是想同的,估计是抄袭哪个人的关键是执行不了 刚好周杰伦马上要发新专辑了,小改一下,拿杰 ...

  10. (win环境)使用Electron打造一个桌面应用翻译小工具

    初始化项目 npm init 修改package.json {"name": "trans","version": "1.0.0& ...