javaSE基礎(chǔ)如何通俗的理解javaBean是什么
去公司面試,對(duì)方一口一個(gè)controller,一口一個(gè)service,dao,搞得我很緊張。其實(shí)都是很簡(jiǎn)單的東西,只是自己當(dāng)時(shí)不知道罷了,接觸之后才發(fā)現(xiàn),不就是Java類嗎?
1. 什么是 Java Bean?
很多培訓(xùn)機(jī)構(gòu)在講java基礎(chǔ)的時(shí)候,基本都會(huì)寫(xiě)這樣的代碼:
package com.springmvc.bean; public class Person { private String name; // 姓名 private Integer age; // 年齡 private String gender;// 性別 private String hobby;// 愛(ài)好 public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } }
毋庸置疑,這就是一個(gè)java bean。
在很多教材上,我們都被告知,現(xiàn)實(shí)中有人,分為男人和女人,這是一個(gè)類。然后,我們用java的面向?qū)ο髮⑷顺橄蟪梢粋€(gè)Java類 —— Person類。
這固然不錯(cuò),然而,也就只是如此而已了。沒(méi)有什么其他的東西,弄了半天,我們初學(xué)者學(xué)java,都在那寫(xiě)人類,車子類,房子類,等等。學(xué)繼承的時(shí)候,總是寫(xiě)這樣的代碼,老師也舉類似這樣的例子。
package com.springmvc.bean; /** * 水果類 * */ public class Fruit { private String name; //水果的名稱 private Float price;//價(jià)格 public Fruit(String name, Float price) { super(); this.name = name; this.price = price; } // getters 和 setters 省略 }
package com.springmvc.bean; /** * 蘋(píng)果類 */ public class Apple extends Fruit { private String color;//顏色 public Apple(String name, Float price,String color) { super(name, price); this.color = color; } // getters 和 setters 省略 }
沒(méi)錯(cuò),這些都是Java Bean,對(duì)于初學(xué)者,這些例子的確比較好理解。但是,這樣就有個(gè)弊端,它很容易讓人產(chǎn)生一種迷茫,就是說(shuō),這些例子我固然聽(tīng)得懂,但是,我不知道學(xué)這些有什么用?我看過(guò)很多培訓(xùn)機(jī)構(gòu)的視頻,里面多半都是這么講的,這導(dǎo)致我整個(gè)JavaSE都學(xué)完了,還是不知道自己能干嘛?
去企業(yè)面試,人家一口一個(gè)專業(yè)詞匯,弄得我好不尷尬。
想想也知道,去企業(yè)里不可能讓我寫(xiě)這種代碼的。歸根到底,還是這些例子不實(shí)用。再舉個(gè)例子,學(xué)校學(xué)數(shù)據(jù)庫(kù)的時(shí)候,肯定會(huì)舉一個(gè)被舉了N多次的例子,就是有一張學(xué)生表,學(xué)生有姓名,性別,課程,分?jǐn)?shù)。然后來(lái)一個(gè)
select * from t_student;
恩,我的確聽(tīng)懂了,可是,然后呢。。。?
然后?我們只負(fù)責(zé)領(lǐng)你入門,你學(xué)費(fèi)也交了,你趕緊去企業(yè)里面學(xué)吧!
好吧,說(shuō)多了都是淚。我就見(jiàn)過(guò)好多簡(jiǎn)歷被包裝過(guò)的培訓(xùn)生,結(jié)果一進(jìn)來(lái),連JSON都不知道是啥,ajax也不清楚怎么用。讓寫(xiě)個(gè)多表查詢或者連表查詢吧,琢磨個(gè)半天還是寫(xiě)不出來(lái)。
我個(gè)人主張實(shí)用主義,所以,本節(jié)就 JavaBean 的基本概念來(lái)稍微延伸一下,看看我學(xué)這些東西,什么String,Integer啊,數(shù)據(jù)庫(kù)啊,到底可以用在哪里?
2. 需求分析
舉個(gè)例子咯,就拿簡(jiǎn)書(shū)來(lái)說(shuō)好了,比如一個(gè)文章列表:
每一條數(shù)據(jù),說(shuō)實(shí)話,就是一個(gè)對(duì)象,對(duì)象有各種屬性,從圖片中,我們起碼就可以獲得這些信息:
一篇文章具備的屬性:
1.發(fā)布時(shí)間
2.文章標(biāo)題
3.點(diǎn)擊量
4.評(píng)論數(shù)
5.點(diǎn)贊數(shù)
6.顯示圖片
當(dāng)然,還需要有文章內(nèi)容(因?yàn)槭桥e例子,我就先不寫(xiě)了),這些屬性,不就是Java類里面修飾符為private的私有屬性嗎?對(duì)應(yīng)數(shù)據(jù)庫(kù)表里面,這些就是所謂的字段。
你可能會(huì)說(shuō),對(duì)啊,可是我為什么要專門去寫(xiě)一個(gè)JavaBean來(lái)承載這些數(shù)據(jù)呢?我用一個(gè)HashMap不是也一樣嗎?
是的,從某種程度上,的確可以,可是,用JavaBean的話更加清晰明了。
你可能寫(xiě)了很久的代碼,都不清楚到底為什么要定義JavaBean,尤其是做JavaWeb開(kāi)發(fā)的時(shí)候,Java的作用其實(shí)就是兩句話:
1 控制數(shù)據(jù)的流向,將前臺(tái)傳過(guò)來(lái)的數(shù)據(jù)包起來(lái),然后一個(gè)一個(gè)地插入數(shù)據(jù)庫(kù)永久保存。
2 從數(shù)據(jù)庫(kù)中用jdbc取出數(shù)據(jù),然后包起來(lái),最終傳遞到前臺(tái)頁(yè)面進(jìn)行公開(kāi)展覽
JavaBean就是一個(gè)中轉(zhuǎn)載體。
不就是這么回事嗎?作為碼農(nóng)的我們,每天不就是在做這些事情嗎?這就是所謂的增刪改查。
最多就是,我們很根據(jù)業(yè)務(wù)需求,通過(guò)寫(xiě)Java代碼,來(lái)進(jìn)行一些邏輯的控制,說(shuō)穿了就是:
數(shù)據(jù)不是你想增,想增就能增。
數(shù)據(jù)不是你想刪,想刪就能刪。
數(shù)據(jù)不是你想改,想改就能改。
數(shù)據(jù)不是你想查,想查就能查。
查個(gè)權(quán)限 , 做個(gè)判斷 , 放手你的愛(ài)。
不就是這么回事嗎?
什么JavaBean,dao,事務(wù)管理,切面,這些我認(rèn)為反而是次要的,都是一些專業(yè)術(shù)語(yǔ)的堆積,作為一名碼農(nóng),我認(rèn)為首先得知道,自己每天到底在干嘛,然后根據(jù)需要再去學(xué)對(duì)應(yīng)的知識(shí)或者理論來(lái)給自己充電。
不要連本職工作都還沒(méi)做好,就一會(huì)跟風(fēng)去學(xué)大數(shù)據(jù),一會(huì)又去學(xué)bootstrap,node.js,我不是說(shuō)多學(xué)點(diǎn)技術(shù)不好。而是,我認(rèn)為還是要分一個(gè)輕重緩急,比如你現(xiàn)在待的公司,根本用不到大數(shù)據(jù),你花了那么多精力去學(xué)了又怎樣呢?
再說(shuō)個(gè)實(shí)際的,如果你的網(wǎng)站訪問(wèn)量每個(gè)月1千都達(dá)不到,你高并發(fā),分布式學(xué)得再好,又能怎么樣呢?
再說(shuō)了,如果一個(gè)網(wǎng)站真的做大了,到最后其實(shí)都是拼的服務(wù)器,而不是技術(shù)。
當(dāng)你確實(shí)需要用到大數(shù)據(jù)了,再去學(xué),也行啊。到那個(gè)時(shí)候,公司肯定會(huì)想辦法的,實(shí)在不行,向外招人也是非常必要的。
可是,還沒(méi)有達(dá)到那個(gè)層次之前,說(shuō)句大白話,你的工資只跟你對(duì)當(dāng)前崗位的適應(yīng)程度掛鉤。你不可能說(shuō),我已經(jīng)學(xué)了大數(shù)據(jù)了,就跑到老板的辦公室要求漲工資吧。也不現(xiàn)實(shí)啊,你覺(jué)得呢?
好了,回到正題,剛才我們從圖片中獲取了這么多字段:
1.發(fā)布時(shí)間
2.文章標(biāo)題
3.點(diǎn)擊量
4.評(píng)論數(shù)
5.點(diǎn)贊數(shù)
6.顯示圖片
其實(shí)可以分為必要字段和輔助字段。所謂的必要字段,就是作為一篇文章,必須要有的屬性。
像發(fā)布時(shí)間,文章標(biāo)題,還有文章內(nèi)容,這些都是必要字段。
輔助字段就是,為了方便對(duì)這篇文章進(jìn)行控制,需要設(shè)置的字段。比如,
這篇文章是否能夠被看到?
這篇文章是否已經(jīng)刪除?
這篇文章是否應(yīng)該被排在前面?
對(duì)應(yīng)的,我們可以設(shè)置這些字段,
1. 是否發(fā)布 : 0 未發(fā)布 1 發(fā)布
2. 是否刪除 : 0 未刪除 1 已刪除
3. 點(diǎn)擊量,評(píng)論數(shù),點(diǎn)贊數(shù) 這些字段可用于生成一個(gè)熱度,如果熱度很高,那么就應(yīng)該被排在前面,被更多的人看到。(這些字段看做主要字段也可以)
順便提一句,實(shí)際開(kāi)發(fā)的時(shí)候,基本用不到delete語(yǔ)句的,刪除都是用的邏輯刪除,就是說(shuō),將某一個(gè)字段(is_delete)從 0 變?yōu)?1,表示已刪除。這樣的好處就是,萬(wàn)一這條數(shù)據(jù)以后想恢復(fù)的話,直接改變那個(gè)字段的值就OK了。我查詢數(shù)據(jù)的時(shí)候,在where條件里面加一個(gè) is_delete = 1 不就好了,那么刪除的數(shù)據(jù)就不會(huì)被查出來(lái)了。
為什么要這么做呢?
比如,游戲中物品丟失了,怎么找回呢?如果直接delete掉了,那么就真的GG了。只要數(shù)據(jù)還在,一切都好說(shuō),我大不了不讓它顯示就是了,萬(wàn)一要找回就能直接找回了。嗯,一般都是這么做的。
3. JavaBean設(shè)計(jì)
接下來(lái),我們來(lái)設(shè)計(jì)這個(gè)JavaBean。打開(kāi)Eclipse,我以之前那個(gè)springmvc的案例來(lái)舉例,現(xiàn)在新建一個(gè)包,就叫做bean,里面是專門用來(lái)存放這些JavaBean的,然后新建一個(gè)類 —— Article(文章類)
public class Article { }
開(kāi)始設(shè)計(jì)字段。
首先,我們知道,這些數(shù)據(jù)最終是要存儲(chǔ)到數(shù)據(jù)庫(kù)表的,那么就肯定需要有一個(gè)id,作為它的主鍵,我們就用String吧,然后用uuid主鍵生成策略。
private String id; //主鍵 UUID
主鍵就是這一條數(shù)據(jù)的身份證,是唯一的,不允許重復(fù)。
必要字段,或者叫主要字段
private Date publishTime; //發(fā)布時(shí)間 private String title; //文章標(biāo)題 private String pictureLine; //圖片鏈接地址
輔助字段:
private Integer hitNum; //點(diǎn)擊量 private Integer commentNum; //評(píng)論數(shù) private Integer loveNum; //點(diǎn)贊數(shù) private Integer isPublished; //是否發(fā)布 0 未發(fā)布 1 發(fā)布 private Integer isDelete; //是否刪除 0 未刪除 1 已刪除
最后,一般來(lái)說(shuō),我們還需要記錄一些類似于日志的信息,比如這篇文章是什么時(shí)候創(chuàng)建的,這個(gè)創(chuàng)建的時(shí)間是不是可以記錄下來(lái)呢?另外,是誰(shuí)創(chuàng)建的,我們是不是可以記錄下用戶的id呢?還有,文章是可以被多次修改的,那么,最后一次修改的時(shí)間是不是需要被記錄下來(lái)呢?
先就說(shuō)這么多吧,JavaBean的設(shè)計(jì)需要根據(jù)具體的業(yè)務(wù)需求來(lái)定,我這里只是舉一個(gè)例子而已。
private String userId; //用戶ID private Date createTime;//創(chuàng)建時(shí)間 private Date updateTime;//最后更新時(shí)間
這樣一來(lái)就差不多了,最后,利用Eclipse的快捷鍵 alt + s,點(diǎn)擊Generate Getters and Setters… ,選擇全部字段,再點(diǎn)擊OK。
最后,鼠標(biāo)右鍵,Source —— Format,格式化一下,一個(gè)JavaBean就做好了。
當(dāng)你寫(xiě)完了JavaBean,差不多也就相當(dāng)于設(shè)計(jì)好了數(shù)據(jù)庫(kù)表。我們?cè)趯?xiě)JavaBean的時(shí)候,屬性一般都用駝峰法來(lái)命名,而數(shù)據(jù)庫(kù)表有點(diǎn)不一樣,就是在駝峰的地方,大寫(xiě)字母要改為小寫(xiě)字母,然后加上一個(gè)下劃線。
比如
userId,對(duì)應(yīng)的數(shù)據(jù)庫(kù)表字段名稱就是 user_id,一般都是這么命名的。
在實(shí)際開(kāi)發(fā)過(guò)程中,差不多就是這樣:
前臺(tái)頁(yè)面(可能是在一張表單Form里面填寫(xiě)數(shù)據(jù)) —— 保存 —— ajax傳遞到Controller層 —— 與JavaBean做映射,將這些數(shù)據(jù)保存到JavaBean中 —— 進(jìn)入Service層,這里對(duì)數(shù)據(jù)進(jìn)行一些邏輯操作和判斷。有歌為證:
—— 最后,進(jìn)入Dao層,直接訪問(wèn)數(shù)據(jù)庫(kù),進(jìn)行各種操作。
好了,這一節(jié)對(duì)JavaBean做了一些簡(jiǎn)短的,額,簡(jiǎn)短的介紹。下一節(jié)我會(huì)稍微深入一些。總之,初學(xué)Java的時(shí)候,千萬(wàn)不要被這些專業(yè)術(shù)語(yǔ)給嚇到,它真的沒(méi)你想的那么難。
如果你總是想著復(fù)雜,那么你永遠(yuǎn)看不到簡(jiǎn)單。直到有一天你發(fā)現(xiàn),所有的麻煩都只在你的心中。
以上就是javaSE基礎(chǔ)如何通俗的理解javaBean是什么的詳細(xì)內(nèi)容,更多關(guān)于javaSE理解javabean的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持示例詳解
這篇文章主要為大家介紹了Spring6.x對(duì)調(diào)度和異步執(zhí)行的注解支持示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11MybatisPlus搭建項(xiàng)目環(huán)境及分頁(yè)插件
Mybatis-Plus(簡(jiǎn)稱MP)是一個(gè)Mybatis的增強(qiáng)工具,在Mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于MybatisPlus搭建項(xiàng)目環(huán)境及分頁(yè)插件的相關(guān)資料,需要的朋友可以參考下2022-11-11詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06SpringBoot中的@ConfigurationProperties注解解析
這篇文章主要介紹了SpringBoot中的@ConfigurationProperties注解解析,Spring源碼中大量使用了ConfigurationProperties注解,通過(guò)與其他注解配合使用,能夠?qū)崿F(xiàn)Bean的按需配置,該注解可以放在類上,也可以放在方法上,需要的朋友可以參考下2023-11-11SpringBoot+VUE實(shí)現(xiàn)數(shù)據(jù)表格的實(shí)戰(zhàn)
本文將使用VUE+SpringBoot+MybatisPlus,以前后端分離的形式來(lái)實(shí)現(xiàn)數(shù)據(jù)表格在前端的渲染,具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08關(guān)于mybatis-plus邏輯刪除無(wú)效的問(wèn)題
這篇文章主要介紹了mybatis-plus邏輯刪除無(wú)效,文中給大家提到了配置過(guò)程及全部代碼,代碼簡(jiǎn)單易懂,需要的朋友可以參考下2021-09-09