Hibernate(二)——一对多查询

2023-11-13

1. 前言

        本章节我们讨论Hibernate一对多查询的处理。

        在上一章节中(Hibernate(一)——入门),我们探讨了Hibernate执行最基本的增删改查操作。现在我们将情况复杂化:加入我们在查询用户信息的时候需要同时查询其登录日志,这样就涉及到一对多查询。那么一对多查询要怎么实现么?

2. jar包准备

        在本节中,除了上一章节中用到的jar包,我还需要用log4j.jar来将Hibernate的查询语句输出到控制台。log4j.properties的配置如下:

  1 log4j.rootLogger=info,console
  2 log4j.appender.console=org.apache.log4j.ConsoleAppender
  3 log4j.appender.console.layout=org.apache.log4j.PatternLayout
  4 log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n

        log4j的使用方法可查阅:Mybatis之一级缓存(七)中,log4j的学习和使用部分。

3. 数据库准备

        我们需要新建立日志表tbLog,并产生部分的测试数据。代码如下:

1 CREATE TABLE tbLog (
2     logID VARCHAR(50),
3     userID VARCHAR(50),
4     loginDate DATETIME
5 )
  1 TRUNCATE TABLE tbUser
  2 TRUNCATE TABLE tbLog
  3 
  4 DECLARE @userID1 VARCHAR(50)
  5 DECLARE @userID2 VARCHAR(50)
  6 SET @userID1 = NEWID();
  7 SET @userID2 = NEWID();
  8 
  9 INSERT INTO tbUser(userID, loginName, userName, passWord)
 10 SELECT @userID1,'luych','卢艳超','12333' UNION ALL
 11 SELECT @userID2,'guest','游客','12333'
 12 
 13 INSERT INTO tbLog(logID, userID, loginDate)
 14 SELECT NEWID(), @userID1, '2016-04-01' UNION ALL
 15 SELECT NEWID(), @userID1, '2016-04-02' UNION ALL
 16 SELECT NEWID(), @userID1, '2016-04-05' UNION ALL
 17 SELECT NEWID(), @userID1, '2016-04-08' UNION ALL
 18 
 19 SELECT NEWID(), @userID2, '2016-04-11' UNION ALL
 20 SELECT NEWID(), @userID2, '2016-04-22'
 21 
 22 SELECT * FROM tbUser;
 23 SELECT * FROM tbLog;

4. 准备JAVA对象

        (1)建立与数据表tbLog相对应的JAVA对象,代码如下:

  1 package com.luych.hibernate.study.entity;
  2 
  3 import java.util.Date;
  4 
  5 import javax.persistence.Entity;
  6 import javax.persistence.Id;
  7 import javax.persistence.Table;
  8 
  9 
 10 @Entity
 11 @Table(name="tbLog")
 12 public class LogEntity {
 13 
 14     @Id
 15     private String logID;
 16     private String userID;
 17     private Date loginDate;
 18 
 19     public String getLogID() {
 20         return logID;
 21     }
 22     public void setLogID(String logID) {
 23         this.logID = logID;
 24     }
 25     public String getUserID() {
 26         return userID;
 27     }
 28     public void setUserID(String userID) {
 29         this.userID = userID;
 30     }
 31     public Date getLoginDate() {
 32         return loginDate;
 33     }
 34     public void setLoginDate(Date loginDate) {
 35         this.loginDate = loginDate;
 36     }
 37 
 38 
 39 
 40 }

        当然,我们同时也要在Hibernate的xml中增加相应的配置

  1 <mapping class="com.luych.hibernate.study.entity.LogEntity"/>

        (2)调整UserEntity对象,建立其与LogEntity的一对多关系。

  1 package com.luych.hibernate.study.entity;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.Set;
  5 
  6 import javax.persistence.CascadeType;
  7 import javax.persistence.Entity;
  8 import javax.persistence.Id;
  9 import javax.persistence.JoinColumn;
 10 import javax.persistence.OneToMany;
 11 import javax.persistence.Table;
 12 
 13 @Entity
 14 @Table(name="tbUser")
 15 public class UserEntity {
 16 
 17     @Id
 18     private String userID;
 19     private String loginName;
 20     private String userName;
 21     private String passWord;
 22     @OneToMany(cascade=CascadeType.ALL)
 23     @JoinColumn(name="userID")
 24     private Set<LogEntity> logs;
 25 
 26     public String getUserID() {
 27         return userID;
 28     }
 29     public void setUserID(String userID) {
 30         this.userID = userID;
 31     }
 32     public String getLoginName() {
 33         return loginName;
 34     }
 35     public void setLoginName(String loginName) {
 36         this.loginName = loginName;
 37     }
 38     public String getUserName() {
 39         return userName;
 40     }
 41     public void setUserName(String userName) {
 42         this.userName = userName;
 43     }
 44     public String getPassWord() {
 45         return passWord;
 46     }
 47     public void setPassWord(String passWord) {
 48         this.passWord = passWord;
 49     }
 50     public Set<LogEntity> getLogs() {
 51         return logs;
 52     }
 53     public void setLogs(Set<LogEntity> logs) {
 54         this.logs = logs;
 55     }
 56     @Override
 57     public String toString() {
 58         String str = loginName+", "+userName+", "+passWord+", "+userID+" 登录日志:\n";
 59         for (LogEntity log: logs) {
 60             str = str+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(log.getLoginDate())+"\n";
 61         }
 62         return str;
 63     }
 64 }
 65 

        其中,

    • @OneToMany的cascade可取值为:
      CascadeType.PERSIST:级联新建,本例中即生成User的时候同时生成Log。
      CascadeType.REMOVE : 级联删除,本例中即删除User的时候同时删除Log。
      CascadeType.REFRESH:级联刷新,本例中即查询User的时候同时查询Log。
      CascadeType.MERGE  :级联更新,本例中即修改User的时候同时修改Log。
      CascadeType.ALL    :以上全部四项,即上面四个全都执行。 
    • @JoinColumn的name取值为:LogEntity中的userID属性。

 

5. 调整Hibernate配置文件

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE hibernate-configuration PUBLIC
  3         "-//Hibernate/Hibernate Configuration DTD 5.0//EN"
  4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5 <hibernate-configuration>
  6     <session-factory>
  7         <!-- 设置数据库驱动 -->
  8         <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  9         <!-- 设置数据库URL -->
 10         <property name="hibernate.connection.url">jdbc:sqlserver://192.168.9.23:14433;databaseName=tempdb</property>
 11         <!-- 数据库用户名 -->
 12         <property name="hibernate.connection.username">sa</property>
 13         <!-- 数据库密码 -->
 14         <property name="hibernate.connection.password">123@abcd</property>
 15         <!-- 打印sql -->
 16         <property name="show_sql">true</property>
 17         <property name="format_sql">false</property>
 18         <!-- beans -->
 19         <mapping class="com.luych.hibernate.study.entity.UserEntity"/>
 20         <mapping class="com.luych.hibernate.study.entity.LogEntity"/>
 21     </session-factory>
 22 </hibernate-configuration>

        我们增加了针对show_sql和format_sql的配置,加上这两个配置后,Hibernate会输出执行的SQL脚本。

    • show_sql:true,输出SQL脚本。false,不输出。
    • format_sql:true,格式化SQL脚本。false,不格式化。

        本例中,并没有将format_sql设置为true,是因为格式化的SQL在控制台中显示很占篇幅,不利于我们后面看测试结果,所以关闭了。

6. 测试运行结果

  1 package com.luych.hibernate.study.main;
  2 
  3 import java.util.Date;
  4 import java.util.HashSet;
  5 import java.util.List;
  6 import java.util.Set;
  7 import java.util.UUID;
  8 
  9 import org.hibernate.Query;
 10 import org.hibernate.Session;
 11 import org.hibernate.SessionFactory;
 12 import org.hibernate.cfg.Configuration;
 13 import org.junit.After;
 14 import org.junit.Before;
 15 import org.junit.Test;
 16 
 17 import com.luych.hibernate.study.entity.LogEntity;
 18 import com.luych.hibernate.study.entity.UserEntity;
 19 
 20 @SuppressWarnings("unchecked")
 21 public class TestMain {
 22 
 23     private Session session;
 24 
 25     @Before
 26     public void getSession(){
 27         Configuration config = new Configuration().configure("hibernate-config.xml");
 28         SessionFactory sessionFactory = config.buildSessionFactory();
 29         session = sessionFactory.openSession();
 30     }
 31 
 32     @After
 33     public void freeSession(){
 34         session.close();
 35     }
 36 
 37     public void sel() {
 38         Query query = session.createQuery("FROM UserEntity WHERE 1=1");
 39         List<UserEntity> userList = query.list();
 40         for (UserEntity userEntity : userList) {
 41             System.out.println(userEntity.toString());
 42         }
 43     }
 44 
 45     public void add() {
 46         session.beginTransaction();
 47         String userID = UUID.randomUUID().toString();
 48         UserEntity user  = new UserEntity();
 49         user.setLoginName("admin");
 50         user.setUserName("系统管理员");
 51         user.setPassWord("12333");
 52         user.setUserID(userID);
 53         LogEntity log1 = new LogEntity();
 54         log1.setLogID(UUID.randomUUID().toString());
 55         log1.setUserID(userID);
 56         log1.setLoginDate(new Date());
 57         LogEntity log2 = new LogEntity();
 58         log2.setLogID(UUID.randomUUID().toString());
 59         log2.setUserID(userID);
 60         log2.setLoginDate(new Date());
 61         Set<LogEntity> logs = new HashSet<LogEntity>();
 62         logs.add(log1);
 63         logs.add(log2);
 64         user.setLogs(logs);
 65         session.save(user);
 66         session.getTransaction().commit();
 67     }
 68 
 69     public void edt(){
 70         session.beginTransaction();
 71         Query query = session.createQuery("FROM UserEntity WHERE 1=1");
 72         List<UserEntity> userList = query.list();
 73         for (UserEntity userEntity : userList) {
 74             userEntity.setPassWord("45666");
 75             LogEntity log = new LogEntity();
 76             log.setLogID(UUID.randomUUID().toString());
 77             log.setUserID(userEntity.getUserID());
 78             log.setLoginDate(new Date());
 79             userEntity.getLogs().add(log);
 80             session.update(userEntity);
 81         }
 82         session.getTransaction().commit();
 83     }
 84 
 85     public void del(){
 86         session.beginTransaction();
 87         Query query = session.createQuery("FROM UserEntity WHERE 1=1");
 88         List<UserEntity> userList = query.list();
 89         for (UserEntity userEntity : userList) {
 90             session.delete(userEntity);
 91         }
 92         session.getTransaction().commit();
 93     }
 94 
 95     @Test
 96     public void test(){
 97         System.out.println("\n----------现有用户:");
 98         sel();
 99         System.out.println("\n----------开始增加用户:");
100         add();
101         System.out.println("\n----------增加用户后:");
102         sel();
103         System.out.println("\n----------开始修改用户:");
104         edt();
105         System.out.println("\n----------修改用户后:");
106         sel();
107         System.out.println("\n----------开始删除用户:");
108         del();
109         System.out.println("\n----------删除用户后:");
110         sel();
111     }
112 }

        getSession和freeSession和上一章节中相同,不再赘述。

        add方法,新建了一个用户并设定了两条登录日志,然后保存。edt方法,将所有用户的密码改为45666,并为所有的用户增加一条登录日志。del方法,删除所有的用户。sel方法,查询所有用户信息并输出到控制台。

        右键,Run As JUnit Test后,控制台输出结果为:

  1 
  2 ----------现有用户:
  3 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
  4 Hibernate: select logs0_.userID as userID3_0_0_, logs0_.logID as logID1_0_0_, 
                      logs0_.logID as logID1_0_1_, logs0_.loginDate as loginDat2_0_1_, logs0_.userID as userID3_0_1_ 
               from tbLog logs0_ where logs0_.userID=?
  5 
  6 luych, 卢艳超, 12333, CB6172E3-8750-4718-BEF6-EE0917015FA9 登录日志:
  7 2016-04-01 00:00:00
  8 2016-04-08 00:00:00
  9 2016-04-05 00:00:00
 10 2016-04-02 00:00:00
 11 
 12 Hibernate: select logs0_.userID as userID3_0_0_, logs0_.logID as logID1_0_0_, 
                      logs0_.logID as logID1_0_1_, logs0_.loginDate as loginDat2_0_1_, logs0_.userID as userID3_0_1_ 
               from tbLog logs0_ where logs0_.userID=?
 13 
 14 guest, 游客, 12333, 21539577-A3D1-4A1F-8D10-6ED0540A46A0 登录日志:
 15 2016-04-11 00:00:00
 16 2016-04-22 00:00:00
 17 
 18 
 19 ----------开始增加用户:
 20 Hibernate: select logentity_.logID, logentity_.loginDate as loginDat2_0_, logentity_.userID as userID3_0_ 
               from tbLog logentity_ where logentity_.logID=?
 21 Hibernate: select logentity_.logID, logentity_.loginDate as loginDat2_0_, logentity_.userID as userID3_0_ 
               from tbLog logentity_ where logentity_.logID=?
 22 Hibernate: insert into tbUser (loginName, passWord, userName, userID) values (?, ?, ?, ?)
 23 Hibernate: insert into tbLog (loginDate, userID, logID) values (?, ?, ?)
 24 Hibernate: insert into tbLog (loginDate, userID, logID) values (?, ?, ?)
 25 Hibernate: update tbLog set userID=? where logID=?
 26 Hibernate: update tbLog set userID=? where logID=?
 27 
 28 ----------增加用户后:
 29 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
 30 
 31 luych, 卢艳超, 12333, CB6172E3-8750-4718-BEF6-EE0917015FA9 登录日志:
 32 2016-04-01 00:00:00
 33 2016-04-08 00:00:00
 34 2016-04-05 00:00:00
 35 2016-04-02 00:00:00
 36 
 37 
 38 guest, 游客, 12333, 21539577-A3D1-4A1F-8D10-6ED0540A46A0 登录日志:
 39 2016-04-11 00:00:00
 40 2016-04-22 00:00:00
 41 
 42 
 43 admin, 系统管理员, 12333, 99d5d264-9d02-4e45-a8c5-f710cc14107e 登录日志:
 44 2016-04-26 17:06:00
 45 2016-04-26 17:06:00
 46 
 47 
 48 ----------开始修改用户:
 49 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
 50 Hibernate: select logentity_.logID, logentity_.loginDate as loginDat2_0_, 
                      logentity_.userID as userID3_0_ 
               from tbLog logentity_ where logentity_.logID=?
 51 Hibernate: select logentity_.logID, logentity_.loginDate as loginDat2_0_, 
                      logentity_.userID as userID3_0_ 
               from tbLog logentity_ where logentity_.logID=?
 52 Hibernate: select logentity_.logID, logentity_.loginDate as loginDat2_0_, 
                      logentity_.userID as userID3_0_ 
               from tbLog logentity_ where logentity_.logID=?
 53 Hibernate: insert into tbLog (loginDate, userID, logID) values (?, ?, ?)
 54 Hibernate: insert into tbLog (loginDate, userID, logID) values (?, ?, ?)
 55 Hibernate: insert into tbLog (loginDate, userID, logID) values (?, ?, ?)
 56 Hibernate: update tbUser set loginName=?, passWord=?, userName=? where userID=?
 57 Hibernate: update tbUser set loginName=?, passWord=?, userName=? where userID=?
 58 Hibernate: update tbUser set loginName=?, passWord=?, userName=? where userID=?
 59 Hibernate: update tbLog set userID=? where logID=?
 60 Hibernate: update tbLog set userID=? where logID=?
 61 Hibernate: update tbLog set userID=? where logID=?
 62 
 63 ----------修改用户后:
 64 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
 65 
 66 luych, 卢艳超, 45666, CB6172E3-8750-4718-BEF6-EE0917015FA9 登录日志:
 67 2016-04-01 00:00:00
 68 2016-04-08 00:00:00
 69 2016-04-05 00:00:00
 70 2016-04-02 00:00:00
 71 2016-04-26 17:06:00
 72 
 73 
 74 guest, 游客, 45666, 21539577-A3D1-4A1F-8D10-6ED0540A46A0 登录日志:
 75 2016-04-11 00:00:00
 76 2016-04-22 00:00:00
 77 2016-04-26 17:06:00
 78 
 79 
 80 admin, 系统管理员, 45666, 99d5d264-9d02-4e45-a8c5-f710cc14107e 登录日志:
 81 2016-04-26 17:06:00
 82 2016-04-26 17:06:00
 83 2016-04-26 17:06:00
 84 
 85 
 86 ----------开始删除用户:
 87 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
 88 Hibernate: update tbLog set userID=null where userID=?
 89 Hibernate: update tbLog set userID=null where userID=?
 90 Hibernate: update tbLog set userID=null where userID=?
 91 Hibernate: delete from tbLog where logID=?
 92 Hibernate: delete from tbLog where logID=?
 93 Hibernate: delete from tbLog where logID=?
 94 Hibernate: delete from tbLog where logID=?
 95 Hibernate: delete from tbLog where logID=?
 96 Hibernate: delete from tbUser where userID=?
 97 Hibernate: delete from tbLog where logID=?
 98 Hibernate: delete from tbLog where logID=?
 99 Hibernate: delete from tbLog where logID=?
100 Hibernate: delete from tbUser where userID=?
101 Hibernate: delete from tbLog where logID=?
102 Hibernate: delete from tbLog where logID=?
103 Hibernate: delete from tbLog where logID=?
104 Hibernate: delete from tbUser where userID=?
105 
106 ----------删除用户后:
107 Hibernate: select userentity0_.userID as userID1_1_, userentity0_.loginName as loginNam2_1_, 
                      userentity0_.passWord as passWord3_1_, userentity0_.userName as userName4_1_ 
               from tbUser userentity0_ where 1=1
108 

        从打印结果中,我们可以看到,新增、编辑、删除用户信息的时候,Hibernate都帮我们完成登录日志的新增、删除、操作。查询的时候也如此。

        但是需要提点的是:在Hibernate第一次查询中,我们看到它先查询了tbUser表,然后针对tbUser表的每一个记录都又查询了下tbLog表,这就是经典的N+1查询问题,所以效率嘛…

        以上就是Hibernate中一对多的查询关联,其他关联情况将在后续的博文中讲解。

转载于:https://www.cnblogs.com/LOVE0612/p/5435886.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate(二)——一对多查询 的相关文章

  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • 三. Netty 进阶

    Netty学习之路 一 NIO基础 二 Netty 入门 三 Netty 进阶 四 Netty 优化与源码 学完netty手写了一个rpc项目 链接 https gitee com springchuntian1 netty rpc 笔记源
  • Spring 循环依赖

    Spring 循环依赖 1 什么是循环依赖 抛开 Spring 框架不说 先来了解循环依赖的本质 从上图总可以看出依赖关系 A 依赖 B B 依赖 C C 依赖 A 这种依赖的关系就造成了循环依赖的发生 让我们从代码的角度来看看循环依赖是如
  • 代码失效 java_异常:java.io.StreamCorruptedException:类型代码无效:00

    java rmi UnmarshalException failed to unmarshal MY ENTITY nested exception is java io StreamCorruptedException invalid t
  • Qt:在widget的外部进行绘制带有坐标轴的图像

    Widget h ifndef WIDGET H define WIDGET H include
  • idea 使用相对路径报错:FileNotFoundException

    idea默认工作环境目录是当前项目 可以通过Run gt edit configurations gt working directory配置 MODULE WORKING DIR 命令可以自动定位到当前项目目录 注意当项目有不同模块 即对
  • 问题:java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path

    一 问题 今天的程序在一台新电脑上运行 出现java lang UnsatisfiedLinkError no jniopencv core in java library path异常 具体报错日志 Exception in thread
  • Windows 仍在设置此设备的类配置。 (代码 56)

    家里电脑有线网卡出现 Windows 仍在设置此设备的类配置 代码 56 解决方法 键盘按win r 弹出运行窗口 输入 redegit 进入注册表 删除HKEY CLASSES ROOT CLSID 3d09c1ca 2bcc 40b7
  • JavaScript的OO思想(一)

    类class是Object Oriented面向对象的语言有一个标志 通过类我们可以创建任意多个具有相同属性和方法的对象 JavaScript中没有类的概念 但它也是面向对象的 只是实现方法会有所不同 创建单个对象有两种基本方法 1 使用O
  • 从平面设计转行软件测试,喜提11K+13薪,回头看看我很幸运

    如何能够成为一个优秀的人 答 一以贯之的努力 不得懈怠的人生 每天的微小积累会决定最终结果 对待未来 人生与知识的敬意 永远值得我们学习 前言 我是2020年数字媒体技术专业毕业的 转行软件测试之前做的是平面设计 毕业的时候 我并不知道有软
  • transformers库的使用【一】——pipeline的简单使用

    transformers库的使用 使用pipeline API来快速使用一些预训练模型 使用预训练模型最简单的方法就是使用pipeline transformers提供了一些任务 1 情感分析 Sentment analysis 分析文本是
  • upload-labs

    在打本靶场之前 首先写一个一句话木马 关闭计算机的安全防护 不然计算机会杀掉 配合蚁剑可进行进一步操作 注 为避免部分题目可能无法实现 这里推荐使用phpstudy2016进行操作 目录 Pass 01 Pass 02 Pass 03 Pa
  • ethereumjs/ethereumjs-util

    ethereumjs ethereumjs util Most of the string manipulation methods are provided by ethjs util 更多的字符串处理方法可以看ethjs util ad
  • 几个常用的图片处理和图像识别API

    鸟类识别 http www inspirvision cn www product 支持鸟类品种鉴别 不同种类鸟类检测 鸟类数量统计 提供API Camera360 https github com pinguo PGSkinPrettif
  • [ kubernetes ] 基础名词解释

    Service RC RS和Deployment只是保证了支撑服务的微服务Pod的数量 但是没有解决如何访问这些服务的问题 一个Pod只是一个运行服务的实例 随时可能在一个节点上停止 在另一个节点以一个新的IP启动一个新的Pod 因此不能以
  • 跨域性的常识性推理

    跨域性的常识性推理是指在不同领域或知识领域之间进行推理和迁移的能力 它涉及将已有的知识和经验应用于新的情境或领域 以生成新的推理和理解 以下是关于跨域性常识性推理的一些常见观点 基础知识迁移 跨域性常识性推理可以帮助我们将基础知识从一个领域
  • 深度学习的发展方向: 深度强化学习!

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 作者 莫凡 马晶敏 上海交通大学 转载自 Datawhale 深度学习不够智能 强化学习又太抽象 深度强化学习是两套理论体系乘风破浪以后的成团产物 其骨架来自强化学习 而
  • 整理了适合新手的20个Python练手小程序

    100个Python练手小程序 学习python的很好的资料 覆盖了python中的每一部分 可以边学习边练习 更容易掌握python 本文附带基础视频教程 私信回复 基础 就可以获取的 程序1 题目 有1 2 3 4个数字 能组成多少个互
  • 通过poi+java实现Excel表格的列宽度自适应

    新建sheet同时往sheet加入数据后 进行列宽设置 代码如下 固定首行 下拉时实现首行固定不动 sheet createFreezePane 0 1 0 1 列宽自适应 outputList get 0 size 为首行的列数 根据首行
  • web容器与servlet容器的区别

    servlet容器 负责管理servlet生命周期 web容器 负责管理和部署web应用 其本身可能具备servlet容器组件 如果没有 一般能将第三方servlet容器作为组件整合进web容器 1 web容器好比电视机 servlet容器
  • Hibernate(二)——一对多查询

    1 前言 本章节我们讨论Hibernate一对多查询的处理 在上一章节中 Hibernate 一 入门 我们探讨了Hibernate执行最基本的增删改查操作 现在我们将情况复杂化 加入我们在查询用户信息的时候需要同时查询其登录日志 这样就涉