当前位置: 首页 > news >正文

汉中市住房和城乡建设局网站自建网站优缺点

汉中市住房和城乡建设局网站,自建网站优缺点,上位机软件开发,泉州专业建站Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC#xff08;古老的东西#xff0c;只需简单知道是啥#xff09;1.1 JDBC概念1.2 JDBC示例 三、JPA#xff08;第二代持久化#xff0c;代表是Hibernate等框架#xff09;3.1 JPA概念3.2 JPA示例 四、Spri… Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC古老的东西只需简单知道是啥1.1 JDBC概念1.2 JDBC示例 三、JPA第二代持久化代表是Hibernate等框架3.1 JPA概念3.2 JPA示例 四、Spring Data JPA第三代只需学习这个的使用五、总结 JDBC、JPA、Hibernate、Spring Data JPA这个经常听到的词汇具体是什么他们是什么关系以及如何通过他们实现java的持久化一文带你理清Java持久化的脉络。 一、JDBC、JPA、Spring Data JPA 的定义及关系 JDBC是一组Java接口是Java提供的面向关系的持久化规范。各个数据库厂商Oracle、MySQL等提供实现JDBC是面向SQL的就是在代码力去执行SQL语句。 JPA也是一组接口是Java提供的面向对象的持久化规范。各个ORM也就是HibernateMyBatis等提供实现JPA是面向对象的也就是我们熟知的定义一个实体然后就可以和关系型数据库进行交互。 Spring Data JPAORM的又一层抽象可以通过方法名约定进一步简化样板代码底层是通过调用Hibernate等ORM实现的。Spring Data JPA默认是通过调用Hibernate实现的。 二、JDBC古老的东西只需简单知道是啥 1.1 JDBC概念 JDBC是一组java api只是接口没有实现各数据库厂商提供实现。开发只需要面向jdbc api即可。 要使用不同的数据库只需要切换不同的实现类即可。也就是使用不同的驱动包。 jdbc就是建立在sql之上的sql能干的它都能干例如DDL、DML、DQL等能更好的对数据进行调优允许使用数据的所有特性而这是其他框架不鼓励甚至禁止的。 1.2 JDBC示例 不用管具体代码含义只大概看看简单一条查询都干了什么。创建数据库连接–先写SQL语句–关闭连接处理异常等。每一个操作都需要这样执行一遍。 Musician georgeHarrison new Musician(0, George Harrison);brbr // 建立数据库连接等String myDriver org.gjt.mm.mysql.Driver; String myUrl jdbc:mysql://localhost/test; Class.forName(myDriver); Connection conn DriverManager.getConnection(myUrl, root, ); // 纯SQL语句 String query insert into users (id, name) values (?, ?); PreparedStatement preparedStmt conn.prepareStatement(query); preparedStmt.setInt (1, 0); preparedStmt.setString (2, George Harrison); preparedStmt.setString (2, Rubble); preparedStmt.execute();brbr// 必须手动关闭连接 conn.close(); // 还有一些异常处理每一个查询、操作即使只查询一条数据也需要写这一堆代码极其繁琐。因此催生了JPA的诞生。 三、JPA第二代持久化代表是Hibernate等框架 3.1 JPA概念 JPA是面向对象的持久化规范。不用像JPA一样手动创建连接编写SQL等只需要创建与表对应的实体并给实体打上相应的标记JPA的实现框架就能自动生成SQL进行持久化相关操作。 不过它的底层也是通过JDBC实现的。 JPA与HIbernate的关系 题外话现在我们都知道Hibernate是JPA的实现但是追随历史这是一个先有鸡还是先有蛋的问题。 Hibernate是2002年发布的而JPA是2006年发布的所以JPA的很多规范其实是参考了HibernateJPA发布后Hibernate 3.0又根据JPA规范进行调整最终被认证为JPA的实现之一。由此可见Hibernate 的江湖地位。 3.2 JPA示例 ORM简单示例 简单演示一下使用Hibernate等这种ORM后保存数据只需要定义一个Entity然后保存即可。 // 定义实体标记上相应的注解 Entity public class Musician {Idprivate Long id; }Musician georgeHarrison new Musician(0, George Harrison); // 直接一行皆可不需要处理数据库连接不需要写一堆SQL musicianManager.save(georgeHarrison);Spring继承Hibernate的详细配置 业务操作很简单下面演示一下spring怎样继承Hibernate。 实现ORM需要配置三个东西数据源DataSource、SessionFactory、事务。 通过xml配置 beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd!-- 数据源配置 --bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName valuecom.mysql.cj.jdbc.Driver /property nameurl valuejdbc:mysql://localhost:3306/yourdb /property nameusername valueusername /property namepassword valuepassword //bean!-- Hibernate SessionFactory 配置 --bean idsessionFactory classorg.springframework.orm.hibernate5.LocalSessionFactoryBeanproperty namedataSource refdataSource /property namepackagesToScan valuecom.yourpackage.model /property namehibernatePropertiespropsprop keyhibernate.dialectorg.hibernate.dialect.MySQL5Dialect/propprop keyhibernate.show_sqltrue/propprop keyhibernate.hbm2ddl.autoupdate/prop/props/property/bean!-- 事务管理器 --bean idtransactionManager classorg.springframework.orm.hibernate5.HibernateTransactionManagerproperty namesessionFactory refsessionFactory //bean/beans通过代码配置 Configuration EnableTransactionManagement public class HibernateConfig {Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource new DriverManagerDataSource();dataSource.setDriverClassName(com.mysql.cj.jdbc.Driver);dataSource.setUrl(jdbc:mysql://localhost:3306/yourdb);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}Beanpublic LocalSessionFactoryBean sessionFactory() {LocalSessionFactoryBean sessionFactory new LocalSessionFactoryBean();sessionFactory.setDataSource(dataSource());sessionFactory.setPackagesToScan(com.yourpackage.model);sessionFactory.setHibernateProperties(hibernateProperties());return sessionFactory;}private Properties hibernateProperties() {Properties properties new Properties();properties.put(hibernate.dialect, org.hibernate.dialect.MySQL5Dialect);properties.put(hibernate.show_sql, true);properties.put(hibernate.hbm2ddl.auto, update);return properties;}Beanpublic HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {HibernateTransactionManager txManager new HibernateTransactionManager();txManager.setSessionFactory(sessionFactory);return txManager;} }Hibernate 有一个称为上下文会话的功能其中 Hibernate 本身管理Session每个事务的一个当前会话。一般会通过为每一个实体再创建一个Dao类来调用SessionFactory。 public class ProductDaoImpl implements ProductDao {private SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory sessionFactory;}public Collection loadProductsByCategory(String category) {return this.sessionFactory.getCurrentSession().createQuery(from test.Product product where product.category?).setParameter(0, category).list();} }四、Spring Data JPA第三代只需学习这个的使用 JPA构建在JDBC之上帮我们省略了数据库连接的管理、sql编写等繁琐的样板代码。而Spring Data JPA是构建在JPA之上的能够进一步减少样板代码的编写让我们尽量只关注业务逻辑。 看上面的HibernateDao层其实也有许多样板代码通过使用SessionFactory 来执行查询和操作等而这在spring data jpa中进一步做了简化。其中包括 1、简化配置 一般通过spring boot使用spring data jpa其中配置项只有这些。 spring:datasource:url: jdbc:mysql://localhost:3306/yourdbusername: usernamepassword: passworddriver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:dialect: org.hibernate.dialect.MySQLDialect可以发现少了事务的配置这是因为默认使用spring data 的JpaTransactionManager它可以满足大部分需求无需再单独配置。 2、Repository 模式极大精简传统Dao层操作 其中包括直接写接口声明方法就可以实现数据库访问自动化CEUD操作findById(), save(), delete()这些无需手动编写支持通过方法名称自动生成查询如 findByLastName(String lastName)。还包括分页排序、自动创建表等。 Spring Data 进一步简化了这一过程并可以完全删除 DAO 实现。DAO 的接口现在是我们唯一需要明确定义的工件。 传统的Dao层可以直接使用以下接口实现。 public interface IFooRepository extends JpaRepositoryFoo, Long {Foo findByName(String name); Query(SELECT f FROM Foo f WHERE LOWER(f.name) LOWER(:name))Query(SELECT f FROM Foo f WHERE LOWER(f.name) LOWER(:name))Foo retrieveByName(Param(name)String name); }五、总结 java的持久化也是经历了从自行车到汽车的转变从JDBC直接调用sql到jpa封装jdbc使用面向对象的思想处理持久化再到spring data jpa进一步对jpa进行抽象目前的学习成本和编码成本已经很低了只需要学习spring data jpa即可。 了解这些发现有助于我们理解底层实现
http://www.dnsts.com.cn/news/225623.html

相关文章:

  • 微商城建设购物网站wordpress 主题 瓷砖
  • 池州网站建设费用wordpress页面显示分类目录
  • 淘宝客导购网站 丢单设计平台化
  • 网站电脑培训班附近有吗网页设计与制作的招聘
  • 电子商务网站建设 市场分析app优化建议
  • 网站内容过滤孝感织云网站建设
  • 网站建设人员培训广州专业的网站建设公司
  • 昆明招聘网站建设普工小工个人微信小程序开店
  • 湖北省建设厅官方网站做网站哪家公司专业
  • 怎样做旅游城市住宿网站平面设计到题目
  • 上海网站建设的价格是多少钱毕业设计做网站还是系统
  • wordpress邮箱插件下载济南网站系统优化
  • 餐饮行业网站建设风格企业邮箱怎么申请注册流程
  • 网站开发业务方向架构文档wordpress主题制作版权验证
  • 没公司怎么做网站云服务器和云虚拟主机
  • ps模板网站小程序文档
  • 怎么学做淘宝电商网站企业宣传册模板设计素材
  • 自己做网站可以上传软件下载怎样了解网站建设是否专业
  • 黔东南网站建设开发一个网站
  • 长尾关键词爱站ie建设企业网站进去无法显示
  • 黄页88网怎么推广沧州网站改版优化
  • 如何用爬虫做网站监控网站建设就业前景
  • php语言 网站建设中国进出口贸易网
  • 做动画网站去哪采集地方门户网站盈利
  • 喜欢做网站的行业建网站的公司服务
  • 顾村网站建设安卓 wordpress 源码
  • 极简个人网站模板三星单片机开发网站
  • 手机验证登录网站开发红酒公司网站源码
  • 自己做的网站怎么接支付宝wordpress实名
  • 做微信公众号的网站有哪些网站建设有哪几种