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. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

  2. 8条github使用小技巧

    1 简介 作为全球最大的开源及私有软件项目托管社区平台,github可以显著地帮助从事编程相关工作的人员提升自己的技术水平,也是费老师我日常最常浏览学习的技术类网站. github为了使得其使用更加便 ...

  3. IDEA找不到类但实际存在的问题解决

    不知道某天开始Idea就开始抽风了. 现象: 一个service的接口类,就在同一个包下,但总是找不到,编辑器一直标红 编译可以通过 说明类本身应该是没什么问题的.问题是怎么重新编译重新reload ...

  4. AT32F415 修改时钟和晶振方法(原创)

    1. 简介 我们几乎是国内第一批使用AT32F415芯片的客户,那个时候芯片还没涨价,岁月一切静好.使用AT32F415 做了几个小产品,也在持续出货.后来大家都知道,涨价缺货愈演愈烈.好在我们提前囤 ...

  5. VSCode进一步深入了解学习

    紧接上一章节趁热打铁吧,未关注博主的记得关注哦! VSCode设置 (1)关闭预览模式 我们在 VScode 上打开一个新文件的话会覆盖掉以前的文件,这是因为 VSCode 默认开启了预览模式,预览模 ...

  6. Linux(Centos7)静默安装Oracle19C

    Oracle数据库服务器一般都是Linux,Linux服务器一般都是在非图形界面的操作,本文章手把手教你如何在非图形界面安装Oracle19C. ORACLE 19C 的安装包自行在官网下载,下载免费 ...

  7. TDSQL|三篇论文入选国际顶会SIGMOD,厉害了腾讯云数据库

    好消息!6月13日,腾讯云数据库三篇论文再次入选数据库行业顶会SIGMOD,被SIGMOD 2022 Research Full Paper(研究类长文)收录. 本次被收录的研究成果中,新型数据结构设 ...

  8. ExtJS 布局-Border 布局(Border layout)

    更新记录: 2022年6月11日 发布. 2022年6月1日 开始. 1.说明 边框布局允许根据区域(如中心.北部.南部.西部和东部)指定子部件的位置.还可以调整子组件的大小和折叠. 2.设置布局方法 ...

  9. JS:对象调方法1

    找调用者 1.如果有this,就先看this在哪个函数中,就是离this最近的function,没有就是window 2.找到函数后,辨别哪个是调用者 例1: 点击查看代码 function fn() ...

  10. jenkins+k8s部署

    1. jenkins配置部署,从git或者svn等拉取代码,编制打包,在博客的jenkins那块有具体的讲解 2. 将打好的包war/java包拷贝到k8s-Master,或者在jenkins上也行, ...