
mybatis
李逍遥自在
小菜鸟
展开
-
mybatis(1)--对于jdbc的回顾以及其缺点总结
mybatis是对原生的jdbc的封装,是一个持久层框架 那么为什么要用mybatis,首先我们来看看原生jdbc的操作 jdbc:首先打开eclipse,创建工程 加入mysql的jar包 创建JdbcTest类 打开SQLyog,创建 数据库mybatis,创建表userSHOW CREATE TABLE USERCREATE TABLE `user` ( `id` INT(11原创 2017-07-16 15:11:33 · 449 阅读 · 0 评论 -
mybatis进阶(2)--一对一查询(使用resultType)
1.需求分析:SELECT * FROM orderdetail SELECT orders.*, user.username, user.sex, user.address原创 2017-07-18 12:43:10 · 343 阅读 · 0 评论 -
mybatis进阶(3)--一对一查询(使用resultMap)
上一个使用的是resultType来返回值,这次使用resultMap来实现: sql分析:同上一个 使用resultMap实现的思路: 使用resultMap将查询结果的订单信息映射到orders对象中,在orders勒种添加user属性,将关联查询出来的用户信息映射到orders对象中的user属性中。 所以我们在orders中有一个user属性。接下来就是sql了:<!-- 查询订单关原创 2017-07-18 15:52:09 · 356 阅读 · 0 评论 -
mybatis进阶(4)--一对多查询
1.需求分析:SELECT orders.* ,user.username,user.sex,user.address,orderdetail.items_id,orderdetail.items_num,orderdetail.orders_idFROM orders,USER,orderdetail WHERE orders.user_id=user.id AND orderdetail.原创 2017-07-18 16:40:05 · 375 阅读 · 0 评论 -
mybatis进阶(5)--多对多查询
1.需求分析 查询用户及用户购买商品信息 2.sql分析SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id,原创 2017-07-18 17:46:10 · 271 阅读 · 0 评论 -
mybatis进阶(6)--延迟加载
1.what? resultMap可以实现高级映射(association,collection具备延迟加载功能) 需求:如果查询订单并且关联查询用户信息,如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。 对把用户信息的按需查询就叫做延迟加载延迟加载:先从单表查询(比多表关联查询速度快很多),需要时在从关联表中去关联查询 2.实现(使用association) 需要原创 2017-07-18 18:31:41 · 478 阅读 · 0 评论 -
mybatis进阶(7)--查询缓存之一级缓存
1.what? mybatis提供查询缓存,用于减轻数据压力,提高数据库性能 mybatis提供一级缓存,二级缓存 话不多说看图: 我们之前的测试中总是需要SQLSession来操作数据库,而这个sqlSession中有这样一个hashmap的数据结构用来存储缓存数据。不同的sqlSession之间的缓存区域(hashmap)是互不影响的。二级缓存是mapper级别的缓存,可以跨sqlSes原创 2017-07-18 22:11:11 · 331 阅读 · 0 评论 -
mybatis进阶(8)--查询缓存之二级缓存
话不多说看图: 上节中提到,二级缓存是mapper级别的。可以跨sqlSession使用。过程分析:首先我们需要手动开启mybatis的二级缓存 sqlSession1发起查询用户id为1的用户信息,先去缓存中后是否有id为1的用户信息,如果没有,从数据库查询用户信息,并将用户信息存储到二级缓存中去 如果sqlSession3去执行相同mapper下的commit操作(插入,更原创 2017-07-18 22:58:36 · 356 阅读 · 0 评论 -
mybatis(9)--整合ehcache
ehcache是什么?1.what? 它是一个分布式缓存框架(1)什么叫分布式缓存呢?我们系统为了提高系统并发,性能等,一半对系统进行分布式部署(集群部署方式)当用户在服务器1中登录,它的信息将会存储在1中的缓存中,但当下次去服务器2中访问时,2中的缓存中并没有,所以我们将缓存集中式管理起来。如果不使用分布式缓存,缓存的数据将在各个服务器的缓存中单独存储,不方便系统开发。 mybatis不支持分原创 2017-07-19 12:02:14 · 437 阅读 · 0 评论 -
mybatis进阶(1)--高级映射之数据模型分析
1.先回顾下我们之前的输入输出映射 parameterType和resultType是对sql执行进行入出映射,可以是一些简单类型,pojo,hashmap等 2.高级映射 将关联映射的列查询映射到一个pojo属性中。(1对1) 将关联映射的列查询映射到List<pojo>属性中。(1对多) 3.订单中的映射需求 数据模型分析思路: (1)每张表记录的数据内容 分模块对每张表记录的内原创 2017-07-18 11:28:03 · 500 阅读 · 0 评论 -
mybatis(10)--输出映射
输出映射: 第一种: resultType指定相应的返回结果类型进行输出映射 只有查询出来的列名与pojo中的属性名一致,才会映射成功创建pojo 若全部都不一致,则没有创建pojo,查询出来的结果类型都是空 若有一个一致,就会创建pojo,但是其他不一致的属性也会返回空首先,来个需求: 我们查询综合用户信息时可能需要它的总数来进行分页:解决:<!-- 综合查询用户信息总数 -->原创 2017-07-17 22:35:20 · 224 阅读 · 0 评论 -
mybatis(9)--输入映射
1.输入映射 通过parameterType指定输入参数类型,类型可以是简单类型,hashmap,pojo的包装类型 但是有时我们的需求传入的查询条件很复杂(可能包括用户信息,商品,订单信息等)此时我们可以根据这个需求来自定义包装类型的pojo 在包装类型的pojo中将复杂的查询条件包装进去package com.ddd.mybatis.pojo;/** * 一般的user是使用逆向工程代原创 2017-07-17 21:45:49 · 235 阅读 · 0 评论 -
mybatis(2)--什么是mybatis?
回顾:jdbc缺点 1.对数据库频繁开启关闭数据库 解决:使用数据库连接池 2.sql是写死的 解决:使用xml配置文件来写sql 3.设置参数ps.setXXX是写死的 解决:把sql语句的参数占位符全部配置在xml中去 4.结果集的遍历是写死的 解决:将结果集映射成Java对象,使用对象获取属性mybatis就是专门来解决这些问题的 概念要点: 1.持久层框架,是Apa原创 2017-07-16 15:34:12 · 347 阅读 · 0 评论 -
mybatis(3)--第一个mybatis的demo
首先就是搭建环境啦!!!https://github.com/mybatis/mybatis-3/releases从这个链接下载mybatis的开发包下载下来其中mybatis-3.4.4.jar就是其核心包 lib下的包就是相关的日志包,还有代理cglib包,common包等再加一个log.properties#开发环境下设置成debug,生产环境设置成info或者errorlog4j.roo原创 2017-07-16 17:06:43 · 1137 阅读 · 0 评论 -
mybatis(4)--完成基本的增删改查操作
上一个小demo只是演示了mybatis的执行过程是怎样的,我们先来回顾一下: 首先是写配置文件: sqlMapConfig.xml中定义数据源连接池的属性,用来与数据库获取连接; 接下来写usermapper.xml,来替换之前jdbc中写死的sql,其中有输入映射与输出映射; 这时候我们需要一个pojo来作为其中的输入或输出等,其属性与数据库中保持一致; 最后在test中要首先获取配置原创 2017-07-17 09:54:34 · 741 阅读 · 0 评论 -
mybatis(5)--mybatis和hibernate的区别和应用场景
接下来我们比较下这两个持久层的框架的不同: hibernate: 1.是一个标准的orm(Object Relational Mapping)框架,入门门槛比较高 2.有自带的hql语言,不需要程序员来写sql,sql会自定生成 3.对于sql的优化和修改比较困难 4.适用于需求变化不多的中小型项目,比如后台管理系统,erp,orm,oa等 5.Hibernate与数据库具体的关联都在X原创 2017-07-17 10:09:33 · 487 阅读 · 0 评论 -
mybatis(6)--mybatis开发dao之原始开发
(5)中的只是做了一个测试,是面向程序员的测试,那么接下来,我们要开发面向用户的dao层以及它的实现层。 首先来定义接口功能:package com.ddd.mybatis.dao;import com.ddd.mybatis.pojo.User;/** * 用户的dao接口 * @author Dan * */public interface UserDao { //根据id查原创 2017-07-17 15:04:19 · 291 阅读 · 0 评论 -
mybatis(7)--使用mapper代理开发代替原始的dao开发
在原始的dao中我们发现了很多问题,而mapper代理开发则会帮我们解决这些问题。 具体思路: 1.需要编写映射文件mapper.xml 2.使用mapper接口来代替dao接口 3.mybatis会自动实现mapper接口的代理类对象 how? mapper接口是有一定的编写规范,mybatis根据这些规范动态的使用反射获取方法名方法参数等,从而实现mapper的代理首先来看mappe原创 2017-07-17 17:26:06 · 1149 阅读 · 0 评论 -
mybatis(11)--动态sql
1.什么是动态sql? mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接组装。 2.需求 用户综合信息查询和用户综合信息查询总数的查询条件可能为空,那么我们可以增加条件查询条件不为空时才进行查询条件的拼接 3.解决 对其statement使用动态sql 4.具体实现 mapper.xml<!-- 综合查询用户信息 --> <select id原创 2017-07-18 10:02:51 · 276 阅读 · 0 评论 -
mybatis(8)--sqlMapConfig的一些小知识点
1.先前的数据源我们是直接写死在sqlMapConfig.xml配置文件中的,这次我们将它换成properties文件保存起来。 db.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8jdbc.username=root原创 2017-07-17 21:00:06 · 215 阅读 · 0 评论 -
mybatis(10)--二级缓存应用场景
1. 对于访问多的查询请求且用户对查询结果实时性要求不高的,可以使用mybatis的二级缓存,降低数据库访问量,提高访问速度,例如:耗时较高的统计分析sql,电话账单查询,前一个月的消费查询等。 实现:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,genuine数据变化频率设置缓存刷新时间间隔flushInterval,如:30min,60min,24h等根据需原创 2017-07-19 12:15:48 · 2420 阅读 · 0 评论