环境及工具:
环境 | win11 |
工具 | idea 2017 |
jdk | 1.8 |
数据库 | mysql5.5 |
maven | 3.2.1 |
项目导入方式 | maven 导入 |
数据库前端工具 | mysql-front (navicat 也可以) |
数据库前端工具:mysql-front (navicat 也可以)主要是这些跟PHPstudy 2018 整合了,所以有的时候懒的打开navicat
1 JPA 是何方神圣?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 [1]
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
2 JPA有两个重要的儿子Hibernate ,iBATIS
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。
hibernate劣势
- 难以使用数据库的一些功能
- 满足不了程序对cache的需求
- 耦合度高
- debug难
- hibernate更新大批量数据
尤其是第5点,让当时的很多程序员直接国粹级开口了。
下面是使用iBATIS的一些优势:
- 支持存储过程:iBATIS的SQL封装以存储过程的形式,使业务逻辑保持在数据库之外,应用程序更易于部署和测试,更便于移植。
- 支持内嵌的SQL:预编译器不是必需的,并有完全访问所有的SQL语句的特性。
- 支持动态SQL: iBATIS特性提供基于参数动态生成SQL查询。
- 支持O / RM:iBATIS支持许多相同的功能作为一个O / RM工具,如延迟加载,连接抓取,缓存,运行时代码生成和继承
3 JPA项目的目录总览
其实,就本质而言,JPA的使用在外国要多一些,而国内用的最多的是mybatis, 如果就说快速应用,你不看JPA直接看mybatis 也是一点问题没有的。
但是万一mybatis 再升级呢? 或者说其它框架杀入呢? 目前来看,还得是继承JPA的这些接口规范,所以,学习JPA是不是磨刀不误砍柴工,还是有力无用用,这个就不得而知了。
这么说吧,玩过hibernate ,mybatis几年的,不看JPA也能跟着做JPA的项目。毕竟是同根生。
Controller 层,Service 层不再说了,跟SB系列之005里一样的。
现在看entity
很清楚的映射关系。
再打开mysql (博主使用的是mysql-front )
可以看到类SysAssetType与表sys_asset_type对应,字段与数据库表里的字段也是一一对应
这就叫做OR映射,不管是hibernate 还是mybatis 都是这样的一种关系。
那么数据是如何进入到数据库里的?
咦,DAO并没有SAVE,
那JPA事先写好了?(一追踪一下,确实如此,你也不用管是父类还是父父类了。)
普通的增删改查都有了。
下面的跟踪过程 看自己的JAVA能力,量力而行。
所以,DAO里并不需要写这些父类里有的方法,可以直接使用!!
这样使用者的DAO写的方法大多数都是一些特定的方法,比如按名字查询等。
直接运行起来。
直接在浏览器里访问 http://localhost:8080/save
页面上无反应,查看数据库(记得要点左上的刷新按钮)
然后就可以看到数据了。
验证的方式很熟悉,也很原始,事实上这也是最方便快捷的方式之一。
不过,在一些大的公司里 sysout 的这种输出要注释,甚至要删除掉才能发版,有一些代码检查工具对注释掉的sysout 也警告,有点让人无语。不过这种简单测试也就是用一遍就够了,用完就删掉也是正常的。
此博客配套的代码资源: