MyBatis

实例对比 hibernate, spring data jpa, mybatis 选型参考

被刻印的时光 ゝ 提交于 2020-04-24 17:45:18
原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一、它是spring的子项目能够和spring boot很好的融合,没有xml文件(关于这一点hibernate似乎也很符合);第二、简单优雅,比如不需要写SQL、对分页有自动化的支持等等,基于以上两点开始了重构之路。在这之前了解了一下hibernate、mybatis和spring data jpa的区别,在这里也简单的记录一下:Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行;Mybatis则在于POJO 与SQL之间的映射关系,通过ResultMap对SQL的结果集进行映射;Spring Data jpa是一个用于简化数据库访问,并支持云服务的开源框架,容易上手,通过命名规范、注解查询简化查询操作。这三者都是ORM框架,但是mybatis可能并没有那么典型,原因就是mybatis映射的是SQL的结果集,另外hibernate和spring data jpa都是jpa(Java Persistence API,是从JDK5开始提供的,用来描述对象 <--> 关系表映射关系,并持久化的标准)的一种实现,从这一点上将这两者是一种并列的关系,spring data

klg-jpa:spring-data-jpa 最佳实践

柔情痞子 提交于 2020-04-24 17:45:07
klg-jpa:spring-data-jpa 最佳实践 项目介绍 码云地址: https://gitee.com/klguang/klg-jpa JPA是sun为POJO持久化制定的标准规范,用来操作实体对象,执行CRUD操作,让开发者从繁琐的JDBC和SQL代码中解脱出来。 但是JPA有以下两个缺陷: 1. 臃肿的 动态条件查询 2.众所周知,复杂查询(联接表查询)的效率低 spring-data-jpa和mybatis可以整合在一起使用有什么优缺点 ,这个问答种了解到 spring-data-jpa-extra 这个库,让我们可用更方便的写sql查询。 klg-jpa, spring-data-jpa 最佳实践,用起来就像开了挂,更多例子 klg-j2ee-dataacess-demo 演示 单表查询最佳实践 1. find by attribute是一种较灵活的方式,需要用到jpa生成的metamodel,在快速开发的利器 BaseRepository api: //-------------find by attribute------------------------ public Page<T> findPage(Pageable pageable,AttrExpression...exprs); public List<T> findList(Sort sort

入门搭建一个简单的springcloud

可紊 提交于 2020-04-24 16:54:18
搭建父工程 创建新的项目,这里我习惯先创建一个空的项目 命名这个项目和工程存放的路径 然后点ok会弹出这个窗口, 然后点击new Module 选择maven,然后不用勾选任何东西,直接next 填写完毕后直接next 然后点击finish 点击ok即可 这样父工程就被我们创建出来了,然后我们删除一些不用的文件夹。 然后我们导入父工程的相关依赖 1 <packaging>pom</packaging> 2 3 <parent> 4 <groupId>org.springframework.boot</groupId> 5 <artifactId>spring-boot-starter-parent</artifactId> 6 <version>2.1.3.RELEASE</version> 7 <relativePath/> 8 </parent> 9 10 <properties> 11 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 12 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 13 <java.version>1.8</java.version> 14 <spring-cloud

大战设计模式(第二季)【2】———— 从源码看单例模式

感情迁移 提交于 2020-04-24 16:16:15
前言 对于单例模式我们其实已经非常熟悉了,如果不熟悉的话,那你随便百度一下就能看的一大堆关于单例模式的介绍。单例模式的实现是当前设计模式中可以说实现最简单的一种模式了,也很容易理解,但是其实单例模式并非你想的那么简单哦。 下面就从几个实际的源码中来看看,单例模式在什么样的情况下会被使用。 单例模式(高级点) 问你下面几个问题,如果你对这几个问题烂熟于心,那么证明你真的了解单例模式。 1、有几种常见的实现单例模式的方法? 2、通过序列化和反序列化可以破坏某些单例模式 3、通过反射可以破坏某些单例模式 4、可以用枚举实现单例模式,并且非常安全 5、如何针对每一个线程单独创建一个单例 单例模式的实现 单例模式的实现有很多方式,这里只是个人做一个记录,供参考。 package com.linkinstars.singleton; /** * (双重检查)单例模式 * @author LinkinStar */ public class DoubleCheckSingleton { private DoubleCheckSingleton(){} public volatile static DoubleCheckSingleton doubleCheckSingleton = null ; public static DoubleCheckSingleton getInstance(){

JAVA面试常见问题之设计模式篇

有些话、适合烂在心里 提交于 2020-04-24 15:45:24
1、常见的设计模式 单例模式、工厂模式、建造模式、观察者模式、适配器模式、代理模式、装饰模式. 参考:https://www.cnblogs.com/cr330326/p/5627658.html 2、设计模式的六大原则及其含义 单一职责原则: 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。主要作用实现代码高内聚,低耦合。 开闭原则: 一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。 里氏替换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象。里氏替换原则是实现开闭原则的方式之一 依赖倒置原则: 抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。 接口隔离原则: 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用。 参考:https://www.cnblogs.com/dolphin0520/p/3919839.html 3、常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单利模式 常见模式及优缺点 : 饿汉式: 优点:不用加锁可以确保对象的唯一性,线程安全。 缺点:初始化对象会浪费不必要的资源,未实现延迟加载。 懒汉式: 优点

Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑

帅比萌擦擦* 提交于 2020-04-24 13:31:45
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository 层中解耦出来,除了这些基本功能外,它还提供了动态 sql、延迟加载、缓存等功能。 相比 Hibernate,Mybatis 更面向数据库,可以灵活地对 sql 语句进行优化。 本文继续分析 Mybatis 的源码,第1点内容上一篇博客已经讲过,本文将针对 2 和 3 点继续分析: 加载配置、初始化 SqlSessionFactory ; 获取 SqlSession 和 Mapper ; 执行 Mapper 方法。 除了源码分析,本系列还包含 Mybatis 的详细使用方法、高级特性、生成器等,相关内容可以我的专栏 Mybatis 。 注意, 考虑可读性,文中部分源码经过删减 。 隐藏在Mapper背后的东西 从使用者的角度来看,项目中使用 Mybatis 时,我们只需要定义 Mapper 接口和编写 xml,除此之外,不需要去使用 Mybatis 的其他东西。当我们调用了 Mapper 接口的方法,Mybatis 悄无声息地为我们完成参数设置、语句执行、结果映射等等工作,这真的是相当优秀的设计。 既然是分析源码,就必须搞清楚隐藏 Mapper 接口背后都是什么东西。这里我画了一张

Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑

£可爱£侵袭症+ 提交于 2020-04-24 12:53:17
Mybatis源码详解系列(三)--从Mapper接口开始看Mybatis的执行逻辑 简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository 层中解耦出来,除了这些基本功能外,它还提供了动态 sql、延迟加载、缓存等功能。 相比 Hibernate,Mybatis 更面向数据库,可以灵活地对 sql 语句进行优化。 本文继续分析 Mybatis 的源码,第1点内容上一篇博客已经讲过,本文将针对 2 和 3 点继续分析: 加载配置、初始化SqlSessionFactory; 获取SqlSession和Mapper; 执行Mapper方法。 除了源码分析,本系列还包含 Mybatis 的详细使用方法、高级特性、生成器等,相关内容可以我的专栏 Mybatis。 注意,考虑可读性,文中部分源码经过删减。 隐藏在Mapper背后的东西 从使用者的角度来看,项目中使用 Mybatis 时,我们只需要定义Mapper接口和编写 xml,除此之外,不需要去使用 Mybatis 的其他东西。当我们调用了 Mapper 接口的方法,Mybatis 悄无声息地为我们完成参数设置、语句执行、结果映射等等工作,这真的是相当优秀的设计。 既然是分析源码

4000字干货长文!从校招和社招的角度说说如何准备Java后端大厂面试?

点点圈 提交于 2020-04-24 05:38:01
插个题外话,为了写好这篇文章内容,我自己前前后后花了一周的时间来总结完善,文章内容应该适用于每一个学习 Java 的朋友!我觉得这篇文章的很多东西也是我自己写给自己的,比如从大厂招聘要求中我们能看到哪些重要的能力,我们该朝什么方向努力? 共勉! 下面的文章的部分内容在我早期文章中出现过,老读者应该一眼就可以看出来了。嘿嘿!废话不多说,开始正文! 我觉得每一个技术人的梦想大概就是能够找一份大厂的 offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等大厂的技术氛围还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。 ps:当然,很多创业公司的锻炼也很大,不过大部分都是 CRUD 的工作,你甚至还要同时去写前端。刚毕业的时候做 CRUD 的工作没什么,如果一直这样做下去就有问题了。 不论是笔试还是面试都是有章可循的,但是,一定要不要想着如何去应付面试,糊弄面试官,这样做终究是欺骗自己。这篇文章的目的也主要想让大家知道自己应该从哪些方向去准备面试,有哪些可以提高的方向。 网上已经有很多面经了,但是我认为网上的各种面经仅仅只能作为参考,你的实际面试与之还是有一些区别的。另外如果要在网上看别人的面经的话,建议即要看别人成功的案例也要适当看看别人失败的案例。 看面经没问题

mybatis的报错总结_____2Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an ...

。_饼干妹妹 提交于 2020-04-24 03:55:15
在编写动态sql时 trim的属性写错了,如下图: 错误示范: (接口的xml配置文件中:) 1 < update id ="modifyBill" parameterType ="Bill" > 2 update smbms_bill 3 < trim suffix ="set" prefixOverrides ="," prefix ="where id=#{id}" > 4 < if test ="billCode!=null" > billCode=#{billCode}, </ if > 5 < if test ="productName!=null" > productName=#{productName}, </ if > 6 < if test ="productDesc!=null" > productDesc=#{productDesc} </ if > 7 </ trim > 8 </ update > 报错日志: Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the

助你技术上的提升,斩获阿里、京东、小米等Offer,Java最全体系脑图与面试题汇集

与世无争的帅哥 提交于 2020-04-23 22:24:46
所谓并发编程是指在一台处理器上“同时”处理多个任务。 并发是在同一实体上的多个事件。 多个事件在同一时间间隔发生,编写优质的并发代码是一件难度极高的事情。 Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的. 但是当我们对并发编程有了更深刻的认识和更多的实践后. 实现并发编程就有了更多的方案和更好的选择,并发编程的目标是充分的利用处理器的每一个核. 以达到最高的处理性能. 并发编程路线脑图 并发编程面试题汇集: Synchronized用过吗 ,其原理是什么 ? 什么是可重入性,为什么说 Synchronized是可重入锁 ? JVM对Java的原生锁做了哪些优化 ? 那么请谈谈AQS框架是怎么回事儿 ? 请尽可能详 尽地对比下Synchronized和ReentrantLock的异同 。 什么是原子操作,Java 中的原子操作是什么? 创建线程池的几个核心构造参数 ? 什么是Java的内存模型,Java中各个线程是怎么彼此看到对方的变量的 ? 在Java中CycliBarriar和CountdownLatch有什么区别? 请谈谈ThreadLocal是怎么解决并发安全的 ? 文末底下有面试题汇集以及学习全脑图 曾经我也对 JVM 感到很头痛,完全搞不懂应该如何入门 JVM 的学习。 但经过了几年的学习,我对 JVM 有了更深入的理解。