mybatis一对一

mybatis的缓存和注解开发(4)

人走茶凉 提交于 2020-01-16 20:42:01
第四天:mybatis的缓存和注解开发 mybatis中的加载时机(查询的时机) mybatis中的一级缓存和二级缓存 mybatis的注解开发 单表CRUD 多表查询 一、今日内容概要 1、Mybatis中的延迟加载 问题:在一对多中,当我们有一个用户,它有100个账户。 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来? 在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的。 在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来。 什么是延迟加载 在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载) 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。 在对应的四种表关系中:一对多,多对一,一对一,多对多 一对多,多对多:通常情况下我们都是采用延迟加载。 多对一,一对一:通常情况下我们都是采用立即加载。 2、Mybatis中的缓存 什么是缓存 存在于内存中的临时数据。 为什么使用缓存 减少和数据库的交互次数,提高执行效率。 什么样的数据能使用缓存,什么样的数据不能使用 适用于缓存: 经常查询并且不经常改变的。 数据的正确与否对最终结果影响不大的。 不适用于缓存: 经常改变的数据 数据的正确与否对最终结果影响很大的。 例如:商品的库存,银行的汇率,股市的牌价。 Mybatis中的一级缓存和二级缓存

Mybatis知识点总结

旧时模样 提交于 2020-01-15 05:56:52
1.什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2.MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 3.Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 推荐看起来比较清晰的PageHelper分页原理 3)PageHelper首先将前端传递的参数保存到page这个对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响,接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,完成分页。 4.Mybatis的插件运行原理

Mybatis框架相关知识详解

旧巷老猫 提交于 2020-01-14 03:17:03
Mybatis框架 1、什么是Mybatis? 2、Mybatis的优点 3、Mybatis的缺点 4、Mybatis框架的适用场合 5、#{}和${}的区别是什么 6、实体类中的属性名和表中的字段名不一样,怎么办? 8、编写模糊查询like语句 9、Dao接口的工作原理 10、Mybatis分页原理 11、Mybatis的映射形式 12、使用MyBatis的mapper接口调用时有哪些要求? 13、resultType与resultMap的区别 14、在mapper中如何传递多个参数? 15、Mybatis的Executor执行器 16、Mybatis的动态sql 17、Mybatis的关联查询和实现方式以及区别 18、Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系 19、Mybatis的接口绑定以及其实现方式 20、Mybatis缓存 21、Mybatis延迟加载 22、Mybatis的基本工作流程 23、Mybatis实行一对多的操作方式 24、Mybatis实行一对一的操作方式 1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能

Mybatis(二)自定义DAO与代理DAO && 配置文件含义

*爱你&永不变心* 提交于 2020-01-11 04:19:26
自定义流程再分析 基于代理 Dao 实现 CRUD 操作 使用要求: 1、持久层接口和持久层接口的映射配置必须在相同的包下 2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名 3、SQL 语句的配置标签<select>,<insert>,<delete>,<update>的 id 属性必须和持久层接口的 方法名相同 根据 ID 查询 在持久层接口中添加 findById 方法 User findById(Integer userId); <!-- 根据 id 查询 --> <select id="findById" resultType="com.itheima.domain.User" parameterType="int"> select * from user where id = #{uid} </select> 细节: resultType 属性: 用于指定结果集的类型。 parameterType 属性: 用于指定传入参数的类型。 sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。 #{}中内容的写法: 由于数据类型是基本类型,所以此处可以随意写。 public class MybatisTest { private

MyBatis 一对一查询方式二

☆樱花仙子☆ 提交于 2020-01-11 04:01:42
一、创建数据库 SQL CREATE TABLE user ( id INT , username VARCHAR ( 20 ) , phone VARCHAR ( 20 ) ) ; CREATE TABLE orderinfo ( id INT , uid INT , goods VARCHAR ( 20 ) , info VARCHAR ( 50 ) ) ; 二、创建与数据库表对应的实体类 public class User implements Serializable { private int id ; private String username ; private String phone ; . . . } public class OrderInfo implements Serializable { private int id ; private int uid ; private String goods ; private String info ; private User user ; . . . } 三、持久层接口 List < OrderInfo > findAll ( ) ; 四、持久层映射文件 < resultMap id = " orderInfoMap " type = " chu.yi.bo.domain.OrderInfo " > <

MyBatis的关联映射

本小妞迷上赌 提交于 2020-01-10 05:15:04
学习目标 ● 了解数据表之间以及对象之间的三种关联关系 ● 熟悉关联关系中的嵌套查询和嵌套结果 ● 掌握一对一、一对多和多对多关联映射的使用 1.1关联关系概述 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多 这三种关联关系的具体说明如下。 · 一对一: 在任意一方引入对方主键作为外键。 · 一对多: 在“多”的一方,添加“一”的一方的主键作为外键。 · 多对多: 产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。 1.2一对一 在现实生活中,一对一关联关系是十分常见的。例如,一个人只能有一个身份证,同时一个身份证也只会对应一个人,它们之间的关系模型图 那么使用MyBatis是怎么处理这种一对一关联关系的呢? 在<resultMap>元素中,包含了一个<association>子元素, MyBatis就是通过该元素来处理一对一关联关系的。在<association>元素中, 通常可以配置以下属性。 · property:指定映射到的实体类对象属性,与表字段一一对应。 · column:指定表中对应的字段。 · javaType:指定映射到实体对象属性的类型。 · select:指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询。 · fetchType:指定在关联查询时是否启用延迟加载

20200105——mybatis 第二天

为君一笑 提交于 2020-01-07 02:49:29
订单商品模型分析 对于数据模型分析思路 1)搞清楚每张表的数据内容 分模块对每张表的内容进行熟悉, 相当于你学习系统,需求功能的过程 2)每张表重要的字段设置 非空、外键字段 3)数据库级别,表与表之间的关系 外键关系 4)表与表之间的业务关系 在分析表与表之间的业务关系时,一定要建立在某个业务意义的基础之上 数据模型分析 用户表user 记录了购买商品的用户信息 id:自增主键 订单表order 记录了用户所创建的订单 number:订单号 user_id : 外键 用户id 订单明细表orderall 记录了订单的详细信息 order_id 外键 订单id items_id 商品id 商品表items 记录了商品信息 表与表之间的业务关系时需要建立,在某个业务意义基础上去分析 先分析数据级别之间有关系的表之间的业务关系 user和order user ->orders 一个用户可以创建多个订单 orders ->user 一个订单只能由一个用户创建 orders与orderall orders ->orderall 一个订单可以包括多个订单明细 因为一个订单可以购买多个商品,每个商品的购买信息在orderall记录,一对多 返回过来,一个订单明细 只能包括在一个订单中 一对一 orderall ->item 一个订单明细,只对应一个商品信息 item ->

Mybatis面试题

人走茶凉 提交于 2020-01-04 03:08:32
1、Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理? 答:动态Sql主要是根据对象中的不通的取值,来实现对Sql的一个动态的拼接,实现不同的Sql的语句。 主要动态Sql 的标签有 If语句(简单的条件判断) Choose(when/otherwise),相当于java语言中的switch,与jstl中choose类似 Trim(对包含的内容加上prefix,或者suffix) Where(主要是用来简化SQL语句中where条件判断,能智能的处理and/or 不用担心多余的语法导致的错误) Set(主要用于更新时候) Foreach(一般使用在mybatis in语句查询时特别有用) 以及 sql 标签来抽取sql 的片段,简化代码 执行原理: 2、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 答:Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled =true|false。 它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName()

MyBatis 注解开发+逆向(Generator)

笑着哭i 提交于 2020-01-02 18:42:50
注解开发 最初设计时,MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的。随着技术的更新发展,对于开发效率要求也原来越高,特别是一些小型项目;越来越多的框架开始支持注解, 到MyBatis3时,MyBatis对注解有了完善的支持,利用注解可以在一些情况下提高开发效率 但不幸的是,Java 注解的的表达力和灵活性十分有限。尽管很多时间都花在调查、设计和试验上, 最强大的 MyBatis 映射并不能用注解来构建 1. select 接口方法声明: import com.kkb.pojo.User; import org.apache.ibatis.annotations.Select; public interface UserMapper2 { @Select("select * from kuser where id = #{id}") public User selectUserByID(int id); } 测试方法: @Test public void selectTest(){ SqlSession session = factory.openSession(); UserMapper2 mapper = session.getMapper(UserMapper2.class); User user = mapper

mybatis中的懒加载

五迷三道 提交于 2020-01-02 04:00:41
知识点:mybatis中的懒加载的使用 参考:https://www.cnblogs.com/ysocean/p/7336945.html?utm_source=debugrun&utm_medium=referral (1)什么是mybatis的懒加载 通俗的讲就是按需加载,我们需要什么的时候再去进行什么操作。而且先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性能, 因为查询单表要比关联查询多张表速度要快。 在mybatis中,resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。 (2)使用实例 mapper.xml文件 <mapper namespace="com.agesun.attendance.privilege.provider.mapper.OrgMapper"> <resultMap id="BaseResultMap" type="com.agesun.attendance.privilege.provider.model.Org"> <id column="org_id" jdbcType="INTEGER" property="orgId" /> <result column="parent_id" jdbcType=