ibatis

配置 mybatis 打印出执行的 sql 及返回的结果集

此生再无相见时 提交于 2020-12-03 01:25:01
在开发过程中, 经常会遇到想要看到应用所执行的 sql 这样的需求. 比如你写了一个查询的功能, 但查询出来的结果与你预期的不符合, 你想搞清楚到底哪里出了问题, 你自然需要看看所执行的 sql 语句, 必要的话甚至还要亲自拷贝到数据库里去查查. 自然, 这就要求应用要能把执行的 sql 输出出来. 以常用的 mybatis 框架为例, 来看一个最终的效果: 14:48 ==> Preparing: select * from user where id = ? 14:48 ==> Parameters: 1(Integer) 14:48 <== Total: 1 另注: 这里的日志布局我启用了一种极简的风格, 只有"分钟:秒数", 具体见 配置简化开发阶段日志输出布局 的介绍. 那么, 在 mybatis 里, 这个要怎么做到呢? 配置 sql 输出 具体来说, 是要增加一个日志级别的配置, 将 dao(或 mapper) 包级别调整到 DEBUG . 示例: # log sql statement logging.level.net.xiaogd.sample.mybatis.dao=DEBUG 注: 上述配置建议放在你的本地开发环境配置文件中, 通常为 application-dev.properties, 关于 spring-boot 的 分环境配置 的 profile

Mybatis的前世今生

巧了我就是萌 提交于 2020-12-02 10:12:10
一、MyBatis的简介 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二、MyBatis的历史 原是 apache 的一个开源项目 iBatis , 2010年6月这个项目由 apache software foundation 迁移到了 google code ,随着开发团队转投 Google Code 旗下, ibatis3.x 正式更名为 Mybatis ,代码于2013年11月迁移到 Github 。 iBATIS 一词来源于“ internet ”和“ abatis ”的组合,是一个基于Java的持久层框架。 iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO) 三、MyBatis的基本说明 (1) 、 MyBatis 是一个工作在持久层的框架,它不再是一个标准的 ORM 框架 我们先看看Hibernate是如何对数据库进行操作 我们再来看看Mybatis如何对数据库进行操作 因为它只管理了SQL语句和Java之间的关联和映射

MyBatis 关联查询的实现:一对一

不问归期 提交于 2020-11-19 02:28:52
有2个实体:用户、会员卡,一个用户只能办理一张会员卡,即一对一。 user_tb : 需要在一方引入另一方的主键作为外键。 card_tb: 使用扩展类 (1)在pojo包下新建User类: package com.chy.pojo; public class User { private Integer id; // 主键 private String name; // 姓名 private String tel; // 手机号 private String address; // 地址 public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getTel() { return tel; } public void setTel(String tel) { this .tel = tel; } public String getAddress() { return address; } public void setAddress(String

MyBatis学习总结(四)——MyBatis缓存与代码生成

戏子无情 提交于 2020-11-13 06:58:25
一、MyBatis缓存 缓存可以提高系统性能, 可以加快访问速度,减轻服务器压力,带来更好的用户体验 。缓存用空间换时间,好的缓存是缓存命中率高的且数据量小的。缓存是一种非常重要的技术。 1.0、再次封装SqlSessionFactoryUtils 为了配置缓存的学习我们将工具类再次封装。 原SqlSessionFactoryUtil工具类如下: package com.zhangguo.mybatis03.utils; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; /** * MyBatis 会话工具类 * */ public class SqlSessionFactoryUtil { /** * 获得会话工厂 * * */ public static SqlSessionFactory getFactory(){ InputStream inputStream = null ;

java架构师

那年仲夏 提交于 2020-11-10 02:47:11
如果你来到我们团队,那么你的职责可能包括但不限于: 1. 负责Alibaba客户服务相关的产品研发 2. 深入发掘和分析业务需求,撰写技术方案和系统设计 3. 核心代码编写、指导和培训工程师、不断进行系统优化 4. 参与或领导跨团队的研发项目 岗位要求: 1. JAVA基础扎实,理解io、多线程、集合等基础框架,对JVM原理有一定的了解; 2. 5年及以上使用JAVA开发的经验,对于你用过的开源框架,能了解到它的原理和机制;对Spring,ibatis,struts等开源框架熟悉; 3. 熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息等机制;能对分布式常用技术进行合理应用,解决问题; 4. 掌握多线程及高性能的设计与编码及性能调优;有高并发应用开发经验; 5. 掌握Linux 操作系统和大型数据库(Oracle、MySql);对sql优化有丰富的经验; 6. 学习能力强,适应能力好;具备耐心/细心的品质; 7. 喜欢去看及尝试最新的技术,追求编写优雅的代码,从技术趋势和思路上能影响技术团队 某上海一线大厂,职位对标阿里P7-P9 来源: oschina 链接: https://my.oschina.net/u/4128502/blog/3045870

MyBatis框架基础

冷暖自知 提交于 2020-11-07 10:15:16
1、ORM模型 在了解MyBatis之前,我们先了解一下什么是ORM模型,MyBatis就是一个ORM模型。 1.1、传统JDBC方式的缺点 a、工作量相对较大 b、必须对JDBC编程可能产生的异常进行捕获处理并正确关闭资源 因为有这样的缺点,导致编写简单的SQL都十分的复杂,所以出现了ORM模型,所有的ORM模型都是基于JDBC进行封装的,不同的ORM模型对JDBC封装的强度是不一样的。 1.2、ORM模型基本知识 定义:ORM即关系映射(Object Relational Mapping),简言之,数据库的表和简单Java对象(POJO)的映射关系模型。主要解决数据库和POJO对象的互相映射。 2、MyBatis 历史,MyBatis的前身是Apache的一个开元项目iBatis,2010年这个项目有Apache software foundation迁移到了Google code,并改名为MyBatis,2013年11月迁移到Github,目前MyBatis由Github维护。 2.1、MyBatis的基本构成 a、SqlSessionFactoryBuider(构造器):根据配置信息或代码来生成SqlSessionFactory(工厂接口) b、SqlSessionFactory(单例模式,工厂):依靠工厂生成SqlSession(会话)。 c、SqlSession

MyBatis一对一,一对多,多对一

只谈情不闲聊 提交于 2020-11-06 07:39:52
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBATIS 提供的持久层框架包括SQL Maps和Data Access Objects(DAOs) 当前,最新版本是MyBatis 3.5.4 ,其发布时间是2020年2月4日。 了解了 MyBatis 那么我们就来看看在Java中如何使用 MyBatis 做一对一,一对多,多对一查询吧。 java实体类对象 public class Teacher { private Integer id; private String name; private List <Student> students; //......此处省略get,set方法 } public class Student { private Integer id; private String name; private Teacher teacher ; //......此处省略get,set方法 } Java Dao层代码 /** *一对一

MyBatis】MyBatis一级缓存和二级缓存

时光毁灭记忆、已成空白 提交于 2020-10-29 04:33:13
MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。 也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中; 第二次以后是直接去缓存中取。 当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清空。 一级缓存的范围有SESSION和STATEMENT两种,默认是SESSION,如果不想使用一级缓存,可以把一级缓存的范围指定为STATEMENT,这样每次执行完一个Mapper中的语句后都会将一级缓存清除。 如果需要更改一级缓存的范围,可以在Mybatis的配置文件中,在下通过localCacheScope指定。 <setting name= "localCacheScope" value= "STATEMENT" /> 建议不需要修改 需要注意的是 当Mybatis整合Spring后,直接通过Spring注入Mapper的形式,如果不是在同一个事务中每个Mapper的每次查询操作都对应一个全新的SqlSession实例,这个时候就不会有一级缓存的命中,但是在同一个事务中时共用的是同一个SqlSession。 如有需要可以启用二级缓存。 二级缓存

JAVA安全之JAVA服务器安全漫谈

試著忘記壹切 提交于 2020-10-28 06:00:40
0x00 前言 本文主要针对JAVA服务器常见的危害较大的安全问题的成因与防护进行分析,主要为了交流和抛砖引玉。 0x01 任意文件下载 示例 以下为任意文件下载漏洞的示例。 DownloadAction为用于下载文件的servlet。 #!html < servlet > < description > </ description > < display-name > DownloadAction </ display-name > < servlet-name > DownloadAction </ servlet-name > < servlet-class > download.DownloadAction </ servlet-class > </ servlet > < servlet-mapping > < servlet-name > DownloadAction </ servlet-name > < url-pattern > /DownloadAction </ url-pattern > </ servlet-mapping > 在对应的download.DownloadAction类中,将HTTP请求中的filename参数作为待下载的文件名,从web应用根目录的download目录读取文件内容并返回,代码如下。 #!java protected

mybatis一级缓存二级缓存

风流意气都作罢 提交于 2020-10-28 04:25:08
一级缓存   Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。                  为什么要使用一级缓存,不用多说也知道个大概。但是还有几个问题我们要注意一下。    1、一级缓存的生命周期有多长?    a、MyBatis在开启一个数据库会话时,会 创建一个新的SqlSession对象,SqlSession对象中会有一个新的Executor对象。Executor对象中持有一个新的PerpetualCache对象;当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也一并释放掉。   b、如果SqlSession调用了close()方法,会释放掉一级缓存PerpetualCache对象,一级缓存将不可用。   c、如果SqlSession调用了clearCache()