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

网站建设亿金手指花总12网页设计成品图片

网站建设亿金手指花总12,网页设计成品图片,常州抖音seo,网站聚合页面在Java持久化框架中,JPA(Java Persistence API)为我们提供了强大的功能来操作数据库。其中,属性转换器(Attribute Converter)是一个非常实用的特性,它允许我们将实体类中的属性类型转换为适合存…

在Java持久化框架中,JPA(Java Persistence API)为我们提供了强大的功能来操作数据库。其中,属性转换器(Attribute Converter)是一个非常实用的特性,它允许我们将实体类中的属性类型转换为适合存储在数据库中的类型。通过实现javax.persistence.AttributeConverter接口并使用@Converter注解,我们可以自定义属性的存储和加载方式。本文将通过一个具体的例子来详细解析JPA属性转换器的使用。

一、属性转换器的基本概念

在JPA中,实体类的某些属性可能无法直接映射到数据库的某种数据类型。例如,java.io.File对象无法直接存储为数据库中的字符串或二进制数据。此时,属性转换器就可以派上用场。它允许我们将File对象转换为字符串路径(String类型),并在加载时将字符串路径重新转换为File对象。

二、实现属性转换器

属性转换器需要实现AttributeConverter接口,并重写convertToDatabaseColumnconvertToEntityAttribute两个方法。convertToDatabaseColumn方法用于将实体类中的属性转换为数据库存储的类型,而convertToEntityAttribute方法则用于将数据库中的数据转换回实体类的属性类型。

以下是一个具体的例子:

@Converter
public class FileConverter implements AttributeConverter<File, String> {@Overridepublic String convertToDatabaseColumn(File attribute) {return attribute.getAbsolutePath(); // 将File对象转换为绝对路径字符串}@Overridepublic File convertToEntityAttribute(String dbData) {return new File(dbData); // 将字符串路径重新转换为File对象}
}

三、在实体类中使用属性转换器

在实体类中,我们可以通过@Convert注解来指定某个属性使用我们定义的转换器。以下是一个包含File属性的Report实体类:

@Entity
public class Report {@Id@GeneratedValueprivate long id;private String description;@Convert(converter = FileConverter.class)private File file;// 省略getter和setter方法
}

四、完整示例代码

以下是一个完整的示例代码,展示了如何使用属性转换器来持久化和加载包含File属性的Report实体。

@Entity
public class Report {@Id@GeneratedValueprivate long id;private String description;@Convert(converter = FileConverter.class)private File file;// 省略getter和setter方法
}@Converter
public class FileConverter implements AttributeConverter<File, String> {@Overridepublic String convertToDatabaseColumn(File attribute) {return attribute.getAbsolutePath();}@Overridepublic File convertToEntityAttribute(String dbData) {return new File(dbData);}
}public class ExampleMain {private static EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("example-unit");public static void main(String[] args) {try {nativeQuery("Show Columns from Report");persistEntity();nativeQuery("Select * from Report");findEntity();} finally {entityManagerFactory.close();}}private static void findEntity() {EntityManager em = entityManagerFactory.createEntityManager();Report report = em.find(Report.class, 1L);System.out.println("Report loaded: " + report);em.close();}public static void persistEntity() {Report report = new Report();report.setDescription("test report");report.setFile(new File("c:/temp/report-details.txt"));System.out.println("Persisting report: " + report);EntityManager em = entityManagerFactory.createEntityManager();em.getTransaction().begin();em.persist(report);em.getTransaction().commit();em.close();}public static void nativeQuery(String s) {EntityManager em = entityManagerFactory.createEntityManager();System.out.printf("'%s'%n", s);Query query = em.createNativeQuery(s);List list = query.getResultList();for (Object o : list) {if (o instanceof Object[]) {System.out.println(Arrays.toString((Object[]) o));} else {System.out.println(o);}}em.close();}
}

五、运行结果

运行上述代码后,我们可以看到以下输出:

'Show Columns from Report'
[ID, BIGINT(19), NO, PRI, NULL]
[DESCRIPTION, VARCHAR(255), YES, , NULL]
[FILE, VARCHAR(255), YES, , NULL]
Persisting report: Report{id=0, description='test report', file=c:\temp\report-details.txt}
'Select * from Report'
[1, test report, c:\temp\report-details.txt]
Report loaded: Report{id=1, description='test report', file=c:\temp\report-details.txt}

从结果可以看出,File对象被成功转换为字符串路径并存储在数据库中,加载时又正确地转换回了File对象。

六、不使用@Converter的情况

如果不使用@Converter注解,File对象将被以二进制形式存储,这可能不是我们期望的结果。以下是不使用@Converter的情况:

@Entity
public class Report {@Id@GeneratedValueprivate long id;private String description;private File file; // 不使用@Convert注解// 省略getter和setter方法
}

运行结果如下:

'Show Columns from Report'
[ID, BIGINT(19), NO, PRI, NULL]
[DESCRIPTION, VARCHAR(255), YES, , NULL]
[FILE, VARBINARY(255), YES, , NULL]
Persisting report: Report{id=0, description='test report', file=c:\temp\report-details.txt}
'Select * from Report'
[1, test report, [B@18518ccf]
Report loaded: Report{id=1, description='test report', file=c:\temp\report-details.txt}

可以看到,File对象被存储为二进制数据,这使得数据的可读性变差。

七、总结

通过本文的介绍,我们了解了JPA属性转换器的基本概念、实现方式以及如何在实体类中使用它。属性转换器为我们提供了灵活的机制,可以将复杂的对象类型转换为适合存储在数据库中的类型,同时也方便了数据的加载和使用。在实际开发中,合理使用属性转换器可以大大提高代码的可读性和可维护性。


文章转载自:

http://i2LUD6pI.qmmsb.cn
http://ozp8bDyh.qmmsb.cn
http://ufdFRyr3.qmmsb.cn
http://Th4dsnLe.qmmsb.cn
http://um5OsqJ0.qmmsb.cn
http://jQm4y0yH.qmmsb.cn
http://DRQDqXan.qmmsb.cn
http://xoSRGwV4.qmmsb.cn
http://aMoVgx0L.qmmsb.cn
http://Gt07hE4R.qmmsb.cn
http://zCfNzgv9.qmmsb.cn
http://HCn5pQvV.qmmsb.cn
http://9m5cWdCk.qmmsb.cn
http://6SubDDNi.qmmsb.cn
http://ZQInp7kn.qmmsb.cn
http://WDNQOPG6.qmmsb.cn
http://ZUBXoXq9.qmmsb.cn
http://dbFDXKkJ.qmmsb.cn
http://kkZxTT08.qmmsb.cn
http://5OsGeZ9O.qmmsb.cn
http://BBag8nmK.qmmsb.cn
http://WNWgq86K.qmmsb.cn
http://BPGwqTBS.qmmsb.cn
http://gJG6BqmC.qmmsb.cn
http://SpHVViXC.qmmsb.cn
http://hw46R28V.qmmsb.cn
http://dSEEuR58.qmmsb.cn
http://yNQwQH6Z.qmmsb.cn
http://VeoKfW8P.qmmsb.cn
http://dMmJ76KW.qmmsb.cn
http://www.dtcms.com/wzjs/677333.html

相关文章:

  • 英文成品网站模板下载介绍自己的网页
  • php网站源码安装教程专做轮胎的网站
  • 网站建设 中小企业网站制作教程手机
  • 如何提高网站关键词排名雨人网站建设
  • SEO案例网站建设设计效果图用什么软件哪个好
  • 顺德网站定制设计深圳品牌网站设计格
  • 基层网站建设存在困难wordpress扁平化登录页源码
  • 网站建设国家有补贴吗专利协会网站建设方案
  • 城阳做网站公司网站建设 销售提成
  • 衡阳网站设计ss0734网站上做播放器流量算谁的
  • 网站网站自己做双语网站价格
  • 网站设计建设公司排行网站建设以推广
  • 网站的后台管理员系统建设教程管理平台登录页面
  • 企业网站 建设 外包上海浦东哪里有做网站的公司
  • 襄阳市建设工程质量监督站网站将自己做的网站发布到
  • 关于网站规划建设方案书夫唯seo
  • 网站关键词快速排名优化建筑设计师网站
  • 北京建网站的价格深圳宣传片制作排名前十名
  • 新建设电影院 网站品牌网站建设方案ppt
  • o2o家电维修网站开发成都sem优化
  • 大连网站建设流程图弄一个微信小程序多少钱
  • 贺岁币在建设银行那个网站预约西宁网站建设王道下拉惠
  • 扬州网站建设要多少钱为何公司做的网站很丑
  • 投诉举报网站建设方案广州地区网站建设
  • 常州微信网站建设服务外国网站代理
  • 网站如何seo推广seo指的是什么意思
  • 跨境电子商务网站建设婚庆网站怎么设计模板
  • 网站建设代运营方案重庆网站域名备案地址
  • 很多域名301定重到另一网站联合会网站建设
  • 吉安永新哪里做网站有限公司和公司哪个好