发表于: 2018-03-27 12:13:52
1 639
Tenth-day
今日任务:
1. 设计一个简单的薪资系统
2. JDBCTemplate
3. 打包jar 包
4. jxl的使用
5. jar包使用
6. Java中的各层功能区分
7. hibernateTutorial
学习轨迹:
学习内容包括:
第一部分:Excel 的操作(jar 包的使用)
第二部分: jar 制作
第三部分:Java 分层
第四部分:Hibernate学习
第一部分:Excel 操作(包含了jar包的使用,通过 jxl 使用)
1. 处理Excel,主要是通过 jxl jar 包读Excel的写操作,练习IDEA导入jar包过程 Java 中各层功能区分
1.1(Mac) IDEA 导入jar包 - jxl , jar 包地址:https://sourceforge.net/projects/jexcelapi/?source=typ_redirect
a. 下载jar包
b. IDEA 新建项目Salary
c.导入 jar 包
选择OK就可以了。
添加一个jar包,就是上面的套路了。
首先找到你要用的jar包,然后新建工程,在 File 下面找到 工程结构(Project Structure),然后字弹出的窗口中找到模块和依赖,点击 + 按钮添加就OK了。这一过程,让我不禁想起了maven,maybe maven的作用就是添加依赖包吧。在这里丢一个maven库地址:http://www.mvnrepository.com/search?q=jxl
最后最后在 wiki的下边的链接很nice:
1.下载地址
2. API
3. maven 库地址
非常nice
2. Excel 中写数据,这个例子wiki中的https://en.wikipedia.org/wiki/JXL_(API)
2.1 JXL 与 Selenium(驱动测试) 有关系,它允许读写创建初始化sheets,但是不支持.xlsx格式
3. 阅读 jxl API 文档
3.1 Workbook ,哈哈,用英文到好处,瞬间明白为什么类是 Workbook了
3.2 Workbook 是一个抽象类,继承自 Object,可以直接调用静态方法,之前竟然忽略了这点
3.3
static Workbook getWorkbook(java.io.File fiel)
这个是方法和EF java 中的第一条原则很像
3.4 阅读了几个方法的API
第二部分: jar 制作
之前学习JDBC的时候,让我导入一个jar包,一脸懵逼,终于通过摸索知道了怎么导入。今天又通过jxl.jar的使用,熟悉了一遍,同时也更加了解了maven的作用。那么 jar 包是怎么打出来了的呢?猜测:IDEA 傻瓜式操作应该就可以打出这个包:
第一步:在Salary工程里直接创建一个新类 HelloWorld
第二步:File --> Project Structure(发现了快捷键 cmd + ;)
第三步:选择:Artifacts,为什么是文物,上古神器 .... 不理解
第四步:导出jar,选择依赖
第五步:配置Main
第六步:配置完 OK就好了
第七步:关闭Project Setting 页面
第八步:上一步成功后就已经创建出来了jar包:
使用:通过上面使用jar的步骤,导入jar包
Nice,完成!jar 就这么导出来了,当然再加上文档什么的,这些后面再慢慢来吧。
第三部分:Java中各层功能划分
之前在看到一些小的demo的时候就发现了,命了写action、dao、view的文件夹,也没在意,今天写工程了突然想起了,竟然还没给自己的代码分过层,不过一直都是些的概念练习的代码怎么会用到分层的东西呢!
这里看了一些博客总结下:
-------------------Java 分层结构概念解析-------------
1. DAO(Data Access Object) 层,数据访问层,就是用来访问数据库,实现数据的持久化,一般的博客上都写了Dao层是使用Hibernate连接数据库,提供CRUD操作
2. service层,业务逻辑层(action 是业务层的一部分,是一个管理器)
3. UI 层,应该是view那个文件夹
当然还有一个Model层,这里怎么又好多地方都写成Modle,是我写错了吗?
4. Action 层是业务层的一部分,是一个管理器,取出界面中的数据,调用 biz 方法,转发到下一个action或者页面
Spring 框架:表示层调用控制层,控制层调用业务层,业务层调用数据访问层。
查了好多博客,真想M人,怎么就写的乱七八糟的呢?看了几篇了,没有获得满意的答复。。。。就总结出上面那些,有好多写的都TN的前言不搭后语,还有为什么讲java分层的文章非要扯出个Spring来,毛关系,你讲封层就讲封层呗,Spring实现就好了。。。
可能是没有全局观或者怎样,但是真真的觉得讲 java 工程的结构目前找到的中文文章真是千篇一律,后面写一篇。至少应该分析下项目的大小,根据需求在分层,不能泛泛的搞几个概念,用个框架一堆就完事了。
第四部分 Hibernate Tutorial
看 Java 分层的时候,注意到了SSH架构:Struts + Spring + Hibernate,先学习下Hibernate这个东西吧
学习网站:https://www.tutorialspoint.com/hibernate/index.htm
1. Hibernate(为什么用冬眠) Tutorial - Home
Home 部分主要简单介绍了 Hibernate,以及学习该Tutorial的对象--Java programmers,还有先学东西:Java programming language、SQL、JDBC。
2. ORM OverView
JDBC(java database cnnectivity),提供了java访问关系型数据库的API。这些API让Java程序可以执行SQL语句并且和任务SQL兼容数据库(SQL compliant database)进行交互。
JDBC是一套灵活的额架构,通过JDBC可以写出一个数据库独立的应用,这个应用跨平台并且可以与不同的数据库管理系统(DBMS)进行交互而不需要做出任何修改。
JDBC的优势和劣势:
Pros of JDBC(JDBC优势)
简单的SQL语句
大量数据处理性能不错
对小的应用表现良好
语法简单易学
Cons of JDBC(JDBC 缺点):
在大的项目中使用比较复杂
大型编程已经触及到天花板了
没有封装
很难再MVC中使用
Query is DBMS specific(这句不知道怎么扯了)
ORM , Object Relational Mapping 对象关系应映射,为什么是这个呢?
当我们使用面向对象开发的室友,有个问题 —— 对象模型和关系型数据库不匹配。关系型数据库是有表格形式的数据表示,而面向对象语言(java C##) 是由对象内在的图形关系表示。
来来来,一起看下 java 类的构造方法和公共方法
再看看对于上面模型的关系型数据库存储:
第一个问题:如果在开发了一段时间我想修改数据库设计该怎么办?
第二个问题:在关系型数据库中存储和加载对象,我们将会遇到下面 5 个不匹配问题:(日报里能不能添加一个添加表格的功能还是我没有发现)
1. Granularity:Sometimes you will have an object model, which has more classes than the number of corresponding tables in the database.(没看懂,粒度问题)
2. Inheritance(继承问题): 关系型数据库不能都定义任何跟继承类似的结构,但是在面向对象中这类事情很常见。
3. Identity(一致性): 关系型数据库通过主键来区分比较两个东西一不一样,而Java中通过 a == b 或者 a.equals(b)来区分。
4. Associations(关系): 面向对象通过对象引用来表示对象关联,而关系型数据库则是通过列的外键来表示两个元素的关系。
5. Navigation(浏览): 面向对象和关系型数据库对对象的获取方式完全不一样。
ORM 就是解决上面的问题的。
ORM 是什么?
ORM就是对象映射,是一种编程技术,通过这种编程技术,可以将数据在对象和关系型数据库之间进行转换。
ORM 的优势:
1. 我们通过业务代码访问对象而不是数据库的表;
2. 通过面向对象的逻辑隐藏了SQL的细节;
3. 基于JDBC;
4. 不需要处理数据库的具体实现;
5. 我们处理的实体是基于业务的而不是数据库结构的;
6. Transaction management and automatic key generation.
7. 开发应用的速度更快
一个完整的ORM解决方案包括下面四个实体:
1. 一套执行CRUD操作的API;
2. A language or api to specify queries that refer to classes and properties of classes.
3. 对于特定映射关系的配置
4. 具有脏数据检查,延迟获取和其他性能优化的技术支持
Java ORM Frameworks
在 Java 中有多个持久化框架和ORM选择。一个持久话框架就是一个ORM服务,通过这个服务我们可以将对象存储到关系型数据库中,当然也可以从数据库中检索出这个对象
1. Enterprise JavaBeans Entity Beans
2. Java Data Objects
3. Castor
4. Toplink
5. Spring Dao
6. Hibernate
7. And many more
3. Overview
通过上面知道 Hibernate 是一种ORM的解决方案。它是由 Gavin King 在2001年创建的开源成框架。它可以应对各种java应用,并且查询和数据持久化的性能都不错。
Hibernate 将Java类映射成数据表,并且将java的数据类型转化为SQL数据类型。这解决了开发者95%的数据吃句话任务。
Hibernate 在java 和 RMDB 之间通过核实的 O/R机制和模式处理着转化的工作,如图:
Hibernate 优势:
1. 通过 XML 文件实现映射关系,不用一行代码;
2. 对象存储的API简单;
3. 数据库或者数据表发生变化的时候,你只需要修改xml文件就OK了;
4. 通过抽象的方式去掉了不熟悉的SQL类型,提供了Java对象方式;
5. Hibernate does not require an application server to operate.
6. 可以处理复杂的对象关系;
7. 最大限度的处理连接数据库方式(Minimizes database access with smart fetching strategies.)
8. 提供简单的数据查询
支持的数据库:
- HSQL Database Engine
- DB2/NT
- MySQL
- PostgreSQL
- FrontBase
- Oracle
- Microsoft SQL Server Database
- Sybase SQL Server
- Informix Dynamic Server
支持技术:
- XDoclet Spring
- J2EE
- Eclipse plug-ins
- Maven
4. Hibernate- Architecture
4. JDBCTemplate
总结:
1.JXL 学习,遇到了Selenium然后又是appium,感觉瞬间知识暴涨;
2. jar 的导入和使用,以及API的阅读,这里其实打开了另一扇们,如果在开发遇到一些比较复杂的问题而且又有了成熟的方案就可以通过jar包引入,然后加快应用开发的速度
3. jar 包导出,这个不知道在实际的项目开发中自己开发的 jar 包工具是不是可以通过maven自己配置进行复用,也就是私有的maven
3. ORM - Hibernate学习,在练习一下英文,Hibernate Tutorial 中的很多概念介绍也是蛮不错的
明日计划:
1. 继续 Hibernate 课程
评论