数据持久化编程学习总结
一、JDBC编程 1. 使用JDBC规范 在数据库编程方面,最先使用的数据持久化技术无疑是JDBC 可以说JDBC(Java Data Base Connectivity)是学习其它数据持久化技术的基础 Java中访问数据库使用的就是JDBC,基本操作有CRUD(Create-Read-Update-Delete) JDBC定义
一、JDBC编程
1. 使用JDBC规范
在数据库编程方面,最先使用的数据持久化技术无疑是JDBC
可以说JDBC(Java Data Base Connectivity)是学习其它数据持久化技术的基础
Java中访问数据库使用的就是JDBC,基本操作有CRUD(Create-Read-Update-Delete)
JDBC定义了数据库的连接,SQL语句的执行以及查询结果集的遍历,一般操作步骤如下:
1. 注册驱动:DriverManager.registerDriver(driver);
2. 建立连接:Connection conn = DriverManager.getConnection(url, "username","password");
3. 获取对象:Statement stmt = conn.createStatement();
4. 执行查询:ResultSet rs = stmt.executeQuery(sqlstring);
5. 处理结果:while (rs.next()){doing something about the result}
6. 释放连接:rs.close(); stmt.close();conn.close();
总结:在初学阶段,无疑是必须学会使用原生态的JDBC进行数据库编程
优点:JDBC为数据库编程提供了可能,规范了数据库的连接和操作方式
缺点:JDBC API和SQL语句与Servlet和JSP夹杂在一起
每次进行数据库操作都要进行对象的创建与销毁
二、JDBC高级应用
1. 使用DAO模式
大量进行JDBC编程后,就积累了不少经验和发现不少缺点,于是对JDBC进行分层和模块化
而DAO(Data Access Object)和POJO(Plain Old Java Object)则是JDBC下常用的模式
在DAO模式出现之前,操作数据库的代码与业务代码均出现在Servlet或者JSP中
SQL语句、Java语句和Html语句夹杂在一起了,导致开发效率很底下
而使用了DAO模式后,所有的JDBC API和SQL语句均移到了DAO层
实现分层后Servlet、JSP只与Java Bean、DAO层交互,而不会有JDBC API和SQL语句
这无疑增加了程序的清晰性、可读性,而且其可重用性比较好
2. 使用DBCP
在JDBC编程中,每一次的数据操作,都要创建并销毁conn对象、stmt对象和rs对象
繁琐的创建和销毁这些对象无疑会消耗一定的时间和IO资源,在并发访问时尤其明显
使用数据源DBCP(DataBase connection pool)技术可以解决这一问题
数据源一般配置在xml文件中,使用数据源会自动进行优化和管理,一般配置如下:
<property name="driverClassName" value="driverClassName"></property> <property name="url" value="jdbc url"></property> <property name="username" value="username"></property> <property name="password" value="password"></property>
总结:DAO模式解决了JDBC API和SQL语句与JSP的夹杂问题并实现了分层
DBCP则为繁琐的创建和销毁对象提供了解决方法
三、使用ORM框架Hibernate进行数据库编程
1. ORM框架的基本原理
DAO模式无非就是手动将POJO拆分并拼装成SQL语句和将SQL查询结果拼装回POJO
在使用了JDBC高级技术和DAO模式进行编程后,仍然需要编写大量的SQL语句
而ORM通过xml配置文件或使用Java注解的方式把Java对象映射到数据库上
这样ORM(Object-Relative Database-Mapping)框架就能自动生成SQL语句
2. 使用ORM框架Hibernate进行数据库编程
Hibernete是ORM框架的一种,同样能够自动生成SQL语句
在DAO模式中,一个简单的Person POJO如下(省略getter和setter方法):
public class Person { private Integer id; private String name; }
对应于数据库的表person
create table if not exists person ( id int primary key auto_increment, name varchar(20) not null, );
使用Java注解后Person POJO实体类能映射到数据库上,并能自动生成SQL语句
代码如下(省略getter和setter方法):
@Entity @Table(name = "person") public class Person{ @Id @GeneratedValue(strategy= IDENTITY) private Integer id; @Column(name = "name") private String name; }
Hibernate使用Session和HQL语句进行数据库的相关操作,如查询数据的操作如下:
Session session =HibernateSessionFactory.getSessionFactory().openSession(); String queryString = "select p.id,p.name from Person p"; //查询并输出所有的记录 List<Object[]> personList =session.createQuery(queryString).list(); for(Object[] row : personList){ for(Object obj : row) System.out.print(" " + obj); System.out.println(); } session.close();
总结:ORM这类的框架解决了DAO层需要编写大量的SQL语句的问题
Hibernate使用HQL解决了数据库的移植问题
优点:无需再编写大量的SQL语句并解决了数据库移植问题
缺点:在数据库事务操作上然后要编写较多的代码
四、使用JPA规范进行数据库编程
1. 使用JPA规范
由于人们使用各种不同的数据库如Oracle、DB2、MySQL和SQL Server等进行数据存储
所以进行数据库连接的方式必然多种多样,而JDBC则规范了数据库的连接方式
同样的道理,各种ORM框架的出现必然会使开发和维护的难度升级
所以Java官方又推出了JPA规范,旨在规范各种ORM框架,使其有统一的接口和方法
使用JPA规范进行数据库编程只需指定一种ORM框架作为底层的实现,如Hibernate
如果需要更换其它的ORM框架则只需在配置文件中修改,类似于更换其它的数据库
而JPA规范则使用EntityManager进行相关的数据库操作,如查找操作如下:
public boolean findPersonByName(String name) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unitname"); EntityManager em = emf.createEntityManager(); Person person = em. findPersonByName(name); if (a == null) return false; return true; }
总结:JPA需要指定一种ORM框架作为底层的实现
JPA也是使用Java注解配置POJO,使用EntityManager进行相关的数据库操作
优点:JPA规范旨在规范各种ORM框架,使其有统一的接口和方法
缺点:仍然需要对事务管理进行编程
五、使用SpringDAO进行数据库编程
SpringDAO对JDBC进行了封装,结合DAO模式进行使用
SpringDAO规范使用JDBCTemplate进行相关的数据库操作,如查找操作如下:
public int getPersonCount(){ String sql = "select count(*) from person"; return getJdbcTemplate().queryForInt(sql); }
总结:SpringDAO对JDBC进行了封装,隐藏了JDBC API,只需使用getJdbcTemplate()方法
类似于使用DAO模式,只是封装了JDBC和提供了事务管理
优点:能够通过使用Spring进行事务管理
隐藏和封装了JDBCAPI
缺点: 类似于使用DAO模式,仍然需要编写和使用大量的SQL语句
六、使用SpringORM进行数据库编程
SpringORM就是为了解决SpringDAO的缺点,让其完善起来
这样一来,SpringORM就有了所有的优点,包括能够使用DAO模式进行分层
能够使用ORM框架解决编写大量的SQL语句的问题
隐藏和封装了JDBC API,只需使用getHibernateTemplate()方法
能够使用HQL解决数据库的移植问题,并且通过使用Spring进行事务管理
总结:使用SpringORM进行数据持久化编程是相对比较理想的
补充:使用SSH框架进行Java Web编程能够做到合理分层
能将业务逻辑、数据持久化和表现逻辑明确分开,思路清晰
表现逻辑层中的Struts2是MVC框架,能够进行页面导航和实现视图显示
在结构上表现为使用action进行页面导航,使用JSP作为视图界面
数据持久层中的Hibernate则是持久化ORM框架,能够自动生成SQL语句
在结构上表现为使用DAO和POJO(domain)实现数据持久化
业务逻辑层的Spring则能使用简单的封装好的JDBC进行CRUD和事务管理
在结构上表现为使用service进行业务管理

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在iPhone上面臨滯後,緩慢的行動數據連線?通常,手機上蜂窩互聯網的強度取決於幾個因素,例如區域、蜂窩網絡類型、漫遊類型等。您可以採取一些措施來獲得更快、更可靠的蜂窩網路連線。修復1–強制重啟iPhone有時,強制重啟設備只會重置許多內容,包括蜂窩網路連線。步驟1–只需按一次音量調高鍵並放開即可。接下來,按降低音量鍵並再次釋放它。步驟2–過程的下一部分是按住右側的按鈕。讓iPhone完成重啟。啟用蜂窩數據並檢查網路速度。再次檢查修復2–更改資料模式雖然5G提供了更好的網路速度,但在訊號較弱

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

哭死啊,全球狂煉大模型,一網路的資料不夠用,根本不夠用。訓練模型搞得跟《飢餓遊戲》似的,全球AI研究者,都在苦惱怎麼才能餵飽這群資料大胃王。尤其在多模態任務中,這問題尤其突出。一籌莫展之際,來自人大系的初創團隊,用自家的新模型,率先在國內把「模型生成數據自己餵自己」變成了現實。而且還是理解側和生成側雙管齊下,兩側都能產生高品質、多模態的新數據,對模型本身進行數據反哺。模型是啥?中關村論壇上剛露面的多模態大模型Awaker1.0。團隊是誰?智子引擎。由人大高瓴人工智慧學院博士生高一鑷創立,高

FP8和更低的浮點數量化精度,不再是H100的「專利」了!老黃想讓大家用INT8/INT4,微軟DeepSpeed團隊在沒有英偉達官方支援的條件下,硬生在A100上跑起FP6。測試結果表明,新方法TC-FPx在A100上的FP6量化,速度接近甚至偶爾超過INT4,而且比後者擁有更高的精度。在此基礎之上,還有端到端的大模型支持,目前已經開源並整合到了DeepSpeed等深度學習推理框架中。這項成果對大模型的加速效果也是立竿見影──在這種框架下用單卡跑Llama,吞吐量比雙卡還要高2.65倍。一名

最近,軍事圈被這個消息刷屏了:美軍的戰鬥機,已經能由AI完成全自動空戰了。是的,就在最近,美軍的AI戰鬥機首次公開,揭開了神秘面紗。這架戰鬥機的全名是可變穩定性飛行模擬器測試飛機(VISTA),由美空軍部長親自搭乘,模擬了一對一的空戰。 5月2日,美國空軍部長FrankKendall在Edwards空軍基地駕駛X-62AVISTA升空注意,在一小時的飛行中,所有飛行動作都由AI自主完成! Kendall表示——在過去的幾十年中,我們一直在思考自主空對空作戰的無限潛力,但它始終顯得遙不可及。然而如今,

上週,在內部的離職潮和外部的口誅筆伐之下,OpenAI可謂是內憂外患:-侵權寡姐引發全球熱議-員工簽署“霸王條款”被接連曝出-網友細數奧特曼“七宗罪」闢謠:根據Vox獲取的洩漏資訊和文件,OpenAI的高級領導層,包括Altman在內,非常了解這些股權回收條款,並且簽署了它們。除此之外,還有一個嚴峻而迫切的問題擺在OpenAI面前——AI安全。最近,五名與安全相關的員工離職,其中包括兩名最著名的員工,「超級對齊」團隊的解散讓OpenAI的安全問題再次被置於聚光燈下。 《財星》雜誌報道稱,OpenA

70B模型,秒出1000token,换算成字符接近4000!研究人员将Llama3进行了微调并引入加速算法,和原生版本相比,速度足足快出了快了13倍!不仅是快,在代码重写任务上的表现甚至超越了GPT-4o。这项成果,来自爆火的AI编程神器Cursor背后团队anysphere,OpenAI也参与过投资。要知道在以快著称的推理加速框架Groq上,70BLlama3的推理速度也不过每秒300多token。Cursor这样的速度,可以说是实现了近乎即时的完整代码文件编辑。有人直呼好家伙,如果把Curs

堂堂開源之王Llama3,原版上下文視窗居然只有…8k,讓到嘴邊的一句「真香」又吞回去了。在32k起步,100k尋常的今天,這是故意要給開源社群做出貢獻的空間嗎?開源社群當然不會放過這個機會:現在只需58行程式碼,任何Llama370b的微調版本都能自動擴展到1048k(一百萬)上下文。背後是一個LoRA,從擴展好上下文的Llama370BInstruct微調版本中提取出來,檔案只有800mb。接下來使用Mergekit,就可以與其他同架構模型一起運作或直接合併到模型中。所使用的1048k上下文
