hibernate

一言难尽,Jpa这个功能差点让我丢了工作

穿精又带淫゛_ 提交于 2020-08-15 13:56:44
故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。 在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。 其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。 这个配置就是: spring.jpa.hibernate.ddl-auto create( 危险系数 2 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 create-drop( 危险系数 3 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会将表中的数据清空。 程序停止的时候会将数据库中所有表删除掉。 update( 危险系数 1 颗星 ) 应用启动的时候,如果数据库中没有对应的表,就会自动根据实体类的结构创建一个表结构。如果表已经存在了就会判断有没有新增字段或者修改长度之类的,如果有则会更新表结构,不会影响数据。 validate( 危险系数 0 颗星 ) validate 不会更新和删除表或者数据

Hibernate HQL语句--where(限制)

僤鯓⒐⒋嵵緔 提交于 2020-08-15 12:27:06
参考文章: Hibernate HQL语句--where(限制) where子句 :逻辑表达式。用来设置查询的条件来限制返回的查询结果。 比较运算 :将持久化类的属性与给定的查询条件来进行比较。 比较运算符: =、<>、<、>、>=、<= null值判断— is [not] null 或者使用相等(=)、不等(<>)进行判断。x=null -> x is null; x<>null -> x is not null @Test public void testWhere1(){ String hql="from Commodity c where c.price>400"; Query query=session.createQuery(hql); List<Commodity> commodities=query.list(); for (Commodity commodity : commodities) { System.out.println("name:"+commodity.getName()); System.out.println("price:"+commodity.getPrice()); } } 控制台: @Test public void testWhere1(){ String hql="from Commodity c where c

我的开发日记(二)

大城市里の小女人 提交于 2020-08-15 10:39:12
今天主要做了测试用户模块的基础数据的管理,遇到了一个比较头大的问题,用户属性存的都是 id ,但是返给前端需要转成相应的 string 类型,然后还有各种 非必传 参数的验证,一下子来个这么复杂的 SQL ,特别在是在 mybatis 的 XML 文件中配置,着实让我学习了一阵子。分享一下学习成果。 需求图如下,按照几种筛选条件获取当前用户创建的测试用户列表: 接口文档如下: 里面都是必传参数, string 类型默认 "" , number 默认 0 表示全部。 下面是我的 XML 文件内容: <sql id="table"> qa_test_user </sql> <sql id="user_status"> qa_user_status_name </sql> <sql id="env"> family_base_env </sql> <sql id="user_role"> qa_role_name </sql> <select id="findUsers" parameterType="com.okay.family.common.bean.testuser.SearchUserBean" resultType="com.okay.family.common.bean.testuser.TestUserBean"> select tu.id,tu.descc,tu

Mybatis 和 JPA 选用哪个好

99封情书 提交于 2020-08-15 06:36:24
一、事件起因 关于 Mybatis 和 JPA 孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。 我也看过知乎上一些问答,各有各的理由,感觉都挺有道理。如果让我不带感情色彩地去分辨,其实我也是懵的,因为真的是公说公有理婆说婆有理。 而在国内,不得不承认,用 Mybatis 的公司确实是要比用 JPA 的多,但是在 2015 年以前,用 Hibernate 的公司确实也是很多的。 为什么在国内,会有这样的现象发生? 二、目前生态 在最近(2018)的 JVM 生态报告中 可以看出,Mybatis 的占比只有可怜的 6%,大家看到这个统计结果应该会很吃惊,你会觉得,不对啊,我公司以及我很多朋友都在用 Mybatis 啊,好像没听说过有人用 JPA 的,这个统计结果是错的吧? 再从下面这个对比来看,MyBatis 的关注主要集中在中日韩。 首先,必须指出,对于青年程序员,其实都会质疑这个图的可信度。 中老年程序员都在感叹国外其实更注重开发效率和面向对象的分析和设计。但我可以非常负责任地告诉你,这图是真的。那么,造成这种现象的原因是? 三、国人喜欢 Mybatis 的原因 总结起来,有如下原因: 1.大厂带节奏 国内做互联网的 Java 程序很多都是拷贝阿里的,阿里一开始用例 iBatis,大量的老系统都是基于 iBatis/MyBatis 的

Logback配置文件这么写,还愁不会整理日志?

穿精又带淫゛_ 提交于 2020-08-14 22:41:25
摘要: 1.日志输出到文件并根据 LEVEL 级别将日志分类保存到不同文件 2.通过异步输出日志减少磁盘 IO 提高性能 3.异步输出日志的原理 1、配置文件logback-spring.xml SpringBoot 工程自带 logback 和 slf4j 的依赖,所以重点放在编写配置文件上,需 要引入什么依赖,日志依赖冲突 统统都不需要我们管了。 logback 框架会默认加载 classpath 下命名为 logback-spring.xml 或 logback.xml 的配置文件。 如果将所有日志都存储在一个文件中,文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将 error 日志和其他日志分开,并且不同级别的日志根据时间段进行记录存储。 配置文件: <? xml version="1.0" encoding="UTF-8" ?> < configuration debug ="true" > <!-- 项目名称 --> < property name ="PROJECT_NAME" value ="project-api" /> <!-- 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 --> < property name ="LOG_HOME" value ="logs" /> <!-- 控制台输出 --> < appender

学完25岁美团T3架构师推荐633页JavaEE核心框架实战直接入职美团

☆樱花仙子☆ 提交于 2020-08-14 12:02:32
前言 从近几年用人单位对人才招聘的要求来看,越来越趋向于“实战性”,也就是要求新入职的员工能立即融入团队,迅速上手项目开发,快速创造经济利益。 要想学好Java语言或Java EE框架,掌握其中丰富的编码技巧、设计模式、代码优化方法,将它们熟练地综合应用在项目开发中,并没有捷径可走。 而本文则希望可以成为读者学习掌握JavaEE的***。 本文不仅涵盖学习主流Java框架所须掌握的核心技术,还涵盖使用它们进行项目实战的必备知识,其主旨就是让读者尽快上手,掌握开源Java EE框架的核心内容,汲取Java EE的思想,正确进行项目开发。 现在,主流的Java EE框架还是MyBatis、Hibernate. Struts 2、Spring MVC、Spring。 尽管有些Java开源框架的确能极大提升开发效率,但由于用户数不多,并没有普及开来; 而软件公司在招聘时的技术要求则是“大众化”的,这就要求应聘人员具备主流JavaEE框架的使用经验。本文通过近200个开发案例对上述主流的JavaEE框架开发技术进行了详细讲解,可以让读者充分认识、学习、掌握这些核心技术,为他们的求职就业和项目开发提供帮助。 目录 主要内容 本文涵盖了MyBatis 3、Struts 2、Ajax+ JSON、Spring 4 MVC、Hibernate 4、Spring 4、WebLogic

Java常见面试题

霸气de小男生 提交于 2020-08-14 09:16:47
一、Java基础 1. String类为什么是final的。 2. HashMap的源码,实现原理,底层结构。 3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别。 6. 反射中,Class.forName和classloader的区别 Class.forName会执行静态代码块, 7. Java7、Java8的新特性(baidu问的,好BT) 8. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高 9. Java内存泄露的问题调查定位:jmap,jstack的使用等等 10. string、stringbuilder、stringbuffer区别 11. hashtable和hashmap的区别 13 .异常的结构,运行时异常和非运行时异常,各举个例子 14. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果 15. String 类的常用方法 16. Java 的引用类型有哪几种 17.

阿里面试官问我Mybatis,我怂了吗?

三世轮回 提交于 2020-08-14 07:19:15
文章目录 前言 Mybatis入门 1. 什么是MyBatis 2. 为什么我们要用Mybatis? 3. Mybatis快速入门 3.1 导入开发包 3.2 准备测试工作 3.3 创建mybatis配置文件 3.4 编写工具类测试是否获取到连接 3.5 创建实体与映射关系文件 3.6 编写DAO 4. Mybatis工作流程 5. 完成CRUD操作 5.1 增加学生 5.2根据ID查询数据 5.3 查询所有数据 5.4 根据id删除 5.5 修改 5.6 小细节 5.7Mybatis分页 6. 动态SQL 6.1 动态查询 6.2 动态更新 6.3 动态删除 6.4 动态插入 7. 入门总结 Mybatis配置信息 1. 映射文件 1.1占位符 1.2 主键生成策略 1.2.1 UUID 1.3 主键返回 1.4 resultMap 1.5 resultMap和resultType区别 1.6 使用resultMap 1.7 resultType和resultMap用法总结 1.8Mybatis映射文件处理特殊字符 2. 配置文件 2.1别名 2.2Mapper加载 2.3延迟加载 2.4 延迟加载测试 3. 配置相关总结 关联映射 1. Mybatis【多表连接】 1.1一对一 1.1.1设计表: 1.1.2实体 1.1.3 映射文件 1.1.4 DAO层 1.2 一对多 1

JPA、Hibernate、Spring Data JPA 的关系,你懂吗?

半腔热情 提交于 2020-08-14 06:03:43
来源:oschina https://my.oschina.net/u/3080373/blog/1828589 什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; 如:@Entity、@Table、@Column、@Transient等注解。 2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。 如:entityManager.merge(T t); 3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。 如:from Student s where s.name = ? 但是: JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。 也就是说: JPA是一套ORM规范,Hibernate实现了JPA规范!如图: 什么是 Spring Data JPA? spring data

Spring框架之IOC(控制反转)

假装没事ソ 提交于 2020-08-14 02:07:14
目录 第一章Spring框架简介 第二章IOC(控制反转)和DI(依赖注入) 第三章IOC控制反转实现的方式 3.1XML配置方式 3.2注解方式 3.3自动装配方式 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合。所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 spring的基本框架主要包含六大模块:DAO、ORM、AOP、JEE、WEB、CORE Spring DAO:Spring提供了对JDBC的操作支持:JdbcTemplate模板工具类 。 Spring ORM:Spring可以与ORM框架整合。例如Spring整合Hibernate框架,其中Spring还提供HibernateDaoSupport工具类,简化了Hibernate的操作 。 Spring WEB:Spring提供了对Struts、Springmvc的支持,支持WEB开发。与此同时Spring自身也提供了基于MVC的解决方案 。 Spring AOP:Spring提供面向切面的编程,可以给某一层提供事务管理,例如在Service层添加事物控制 。 Spring JEE:J2EE开发规范的支持,例如EJB 。 Spring Core:提供IOC容器对象的创建和处理依赖对象关系 。