一、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进行业务管理

译者 | 布加迪审校 | 孙淑娟目前,没有用于构建和管理机器学习(ML)应用程序的标准实践。机器学习项目组织得不好,缺乏可重复性,而且从长远来看容易彻底失败。因此,我们需要一套流程来帮助自己在整个机器学习生命周期中保持质量、可持续性、稳健性和成本管理。图1. 机器学习开发生命周期流程使用质量保证方法开发机器学习应用程序的跨行业标准流程(CRISP-ML(Q))是CRISP-DM的升级版,以确保机器学习产品的质量。CRISP-ML(Q)有六个单独的阶段:1. 业务和数据理解2. 数据准备3. 模型

人工智能(AI)在流行文化和政治分析中经常以两种极端的形式出现。它要么代表着人类智慧与科技实力相结合的未来主义乌托邦的关键,要么是迈向反乌托邦式机器崛起的第一步。学者、企业家、甚至活动家在应用人工智能应对气候变化时都采用了同样的二元思维。科技行业对人工智能在创建一个新的技术乌托邦中所扮演的角色的单一关注,掩盖了人工智能可能加剧环境退化的方式,通常是直接伤害边缘人群的方式。为了在应对气候变化的过程中充分利用人工智能技术,同时承认其大量消耗能源,引领人工智能潮流的科技公司需要探索人工智能对环境影响的

Wav2vec 2.0 [1],HuBERT [2] 和 WavLM [3] 等语音预训练模型,通过在多达上万小时的无标注语音数据(如 Libri-light )上的自监督学习,显著提升了自动语音识别(Automatic Speech Recognition, ASR),语音合成(Text-to-speech, TTS)和语音转换(Voice Conversation,VC)等语音下游任务的性能。然而这些模型都没有公开的中文版本,不便于应用在中文语音研究场景。 WenetSpeech [4] 是

条形统计图用“直条”呈现数据。条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来;从条形统计图中很容易看出各种数量的多少。条形统计图分为:单式条形统计图和复式条形统计图,前者只表示1个项目的数据,后者可以同时表示多个项目的数据。

arXiv论文“Sim-to-Real Domain Adaptation for Lane Detection and Classification in Autonomous Driving“,2022年5月,加拿大滑铁卢大学的工作。虽然自主驾驶的监督检测和分类框架需要大型标注数据集,但光照真实模拟环境生成的合成数据推动的无监督域适应(UDA,Unsupervised Domain Adaptation)方法则是低成本、耗时更少的解决方案。本文提出对抗性鉴别和生成(adversarial d

数据通信中的信道传输速率单位是bps,它表示“位/秒”或“比特/秒”,即数据传输速率在数值上等于每秒钟传输构成数据代码的二进制比特数,也称“比特率”。比特率表示单位时间内传送比特的数目,用于衡量数字信息的传送速度;根据每帧图像存储时所占的比特数和传输比特率,可以计算数字图像信息传输的速度。

数据分析方法有4种,分别是:1、趋势分析,趋势分析一般用于核心指标的长期跟踪;2、象限分析,可依据数据的不同,将各个比较主体划分到四个象限中;3、对比分析,分为横向对比和纵向对比;4、交叉分析,主要作用就是从多个维度细分数据。

在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即 json 模块和 pickle 模块。这两个模块主要区别如下:json 是一个文本序列化格式,而 pickle 是一个二进制序列化格式;json 是我们可以直观阅读的,而 pickle 不可以;json 是可互操作的,在 Python 系统之外广泛使用,而 pickle 则是 Python 专用的;默认情况下,json 只能表示 Python 内置类型的子集,不能表示自定义的


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),