精华内容
下载资源
问答
  • Hibernate查询时用HQL动态创建对象

    千次阅读 2016-02-23 20:52:32
    当你在实际的开发过程中,有时候查询的结果只是需要查询一张表中的一部分数据,而不是所有的数据,比如说,我现在有一个需求是这样的:我只需要user的id和name这两个属性的数据,其他的数据暂时不需要,那么这时候...

    当你在实际的开发过程中,有时候查询的结果只是需要查询一张表中的一部分数据,而不是所有的数据,比如说,我现在有一个需求是这样的:我只需要user的id和name这两个属性的数据,其他的数据暂时不需要,那么这时候如果按照原来(假设原来user表中数据包括:userId,userName,teleNum,email等等的个人信息)的对象直接将整个对象全部获取到,这是牺牲性能作为代价的,一个user的时候感觉不到速度的差距,但是上千万的数据的时候,速度差距是明显的,那么在这里也就是说动态的利用你需要的数据构造对象是很有必要的。

    HQL动态创建对象

    例如下面的一段例子:

           /**
    	 * 测试HQL动态创建对象
    	 * 
    	 * Hibernate: select user0_.userId as col_0_0_, user0_.userName as col_1_0_
    	 * from User user0_ 得到的user对象列表是:[User [userId=1, userName=zhangsan,
    	 * password=null, telephone=null, email=null, address=null], User [userId=2,
    	 * userName=zhangsan, password=null, telephone=null, email=null,
    	 * address=null]]
    	 * 
    	 */
    	@SuppressWarnings("unchecked")
    	public static void testHQLGenerateObject() {
    		Session session = sessionFactory.openSession();
    		// 事务自动提交了
    		List<User> userList = session.createQuery(
    				"select new User(user.userId, user.userName) from User user")
    				.list();
    		System.out.println("得到的user对象列表是:" + userList);
    		session.close();
    	}
    因为这里我需要的数据只有id和name这两个属性的值,其他的我不需要查出来,所以在这里直接动态的构造一个user对象,这是直接使用User对象的例子。

    User类如下:

    注意下面的构造函数是需要的。

    @Entity
    public class User {
    
    	@Id
    	private Long userId;
    	private String userName;
    	private String password;
    	private String telephone;
    	private String email;
    	private String address;
    	
    	public User() {
    		super();
    	}
    	public User(Long userId, String userName) {
    		super();
    		this.userId = userId;
    		this.userName = userName;
    	}

    上面是直接借助了User类来动态的创建一个bean,但是并不是所有的时候都会用原来的映射bean作为新的对象的。

    比如下面的这个例子:

    我另外封装一个只有userId和userName属性的类。部分代码如下(这里需要创建好无参数和有参数的构造函数):

    public class UserCopy {
    
    	private Long userId;
    	private String userName;}
    测试代码如下:

           /**
    	 * 测试HQL动态创建对象
    	 * 
    	 */
    	@SuppressWarnings("unchecked")
    	public static void testHQLGenerateObject() {
    		Session session = sessionFactory.openSession();
    		// 事务自动提交了
    		List<User> userList = session.createQuery(
    				"select new UserCopy(user.userId, user.userName) from User user")
    				.list();
    		System.out.println("得到的user对象列表是:" + userList);
    		session.close();
    	}
    这是抛出异常信息:

    [cause=org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [UserCopy]]
    2016-2-23 20:33:35 org.hibernate.hql.internal.ast.ErrorCounter reportError
    ERROR:  Unable to locate class [UserCopy]
    [cause=org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [UserCopy]]
     Unable to locate class [UserCopy]
    [cause=org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [UserCopy]]
    	at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:177)
    	at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:144)
    	at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1163)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2354)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2220)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1495)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:583)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311)
    	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
    	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
    	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
    	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
    	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
    	at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
    	at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302)
    	at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240)
    	at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1907)
    	at com.siti.test.HiberTest.testHQLGenerateObject(HiberTest.java:49)
    	at com.siti.test.HiberTest.main(HiberTest.java:32)
    Cause:
    org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [UserCopy]
    	

    上面的异常显示无法定位UserCopy类。你会发现上面的导入中没有导入该类,但是导入了该类就可以了吗?
    依然会抛出异常信息。这个时候需要考虑使用类的全路径。

    /**
    	 * 测试HQL动态创建对象
    	 * 
    	 * Hibernate: select user0_.userId as col_0_0_, user0_.userName as col_1_0_
    	 * from User user0_ 得到的user对象列表是:[User [userId=1, userName=zhangsan,
    	 * password=null, telephone=null, email=null, address=null], User [userId=2,
    	 * userName=zhangsan, password=null, telephone=null, email=null,
    	 * address=null]]
    	 * 
    	 */
    	@SuppressWarnings("unchecked")
    	public static void testHQLGenerateObject() {
    		Session session = sessionFactory.openSession();
    		// 事务自动提交了
    		List<User> userList = session.createQuery(
    				"select new com.siti.domain.UserCopy(user.userId, user.userName) from User user")
    				.list();
    		System.out.println("得到的user对象列表是:" + userList);
    		session.close();
    	}

    项目代码:项目源码

    展开全文
  • 2在创建对象表中,可以包含嵌入的列对象 3向对象表添加数据方式 1)通过构造函数提供属性值 2)在关系表中提供列值语法 create table table_name of type_name; table_name :表名称 type_name:对象类型名称...

    对象表
    1对象表是使用对象类型定义表中的一整行,此表就称为对象表
    2在创建对象表中,可以包含嵌入的列对象
    3向对象表添加数据方式
    1)通过构造函数提供属性值
    2)在关系表中提供列值

    语法
    create table table_name of type_name;
    table_name :表名称
    type_name:对象类型名称

    举例
    提供的测试数据

    --创建对象头
    create or replace  type class3 as object (
    id number,
    name varchar2 ( 20 ),
    member  function get_name(no varchar2) return varchar2
    ) ;
    
    --创建对象体
    create or replace type body class3 as
     member  function get_name(no varchar2) return varchar2 as 
     name varchar2(20);
     begin
    select sname into name from zhou.student where sno=no ;
     return name;
      end;
    end;

    创建对象表

    --创建对象表
    create table su_class of class3;

    这里写图片描述

    插入操作

    insert into su_class values(class3(10,'丽丽'));
    insert into su_class values(11,'丽丽');
    insert into su_class(id,name ) values(12,'丽丽');

    这里写图片描述

    查询操作

    select id,name from su_class;
    select sc.id,sc.name from su_class sc;
    select value(sc) from su_class sc;
    select value(sc).id, value(sc).name from su_class sc;

    这里写图片描述
    更新和删除操作

    
    update su_class set name='姗' where id=10;
    delete from su_class where id=12
    
    select id,name from su_class;

    这里写图片描述

    展开全文
  • SQLSERVER查询对象创建和修改时间

    千次阅读 2016-09-21 11:39:21
    以存储过程 [dbo].[rpt_MktPromoter_V1] 为例子,查询的脚本如下: select [name], type_desc, create_date, modify_date FROM sys.all_objects where name = 'rpt_MktPromoter_V1'


    以存储过程 [dbo].[rpt_MktPromoter_V1] 为例子,查询的脚本如下:

    select
       [name],
       type_desc,
       create_date,
       modify_date
    FROM
     sys.all_objects
    where
      name = 'rpt_MktPromoter_V1'


    展开全文
  • 一、需求比如,我们有两个对象,一个问答,一个评论,类似百度知道一样的东西;我们查询一个问答的时候,可以查看其下面的评论; 我在查询J_questionandanswer这张表的时候,需要查询j_comment这张表,并把j_...

    一、需求

    比如,我们有两个对象,一个问答,一个评论,类似百度知道一样的东西;我们查询一个问答的时候,可以查看其下面的评论;
    我在查询J_questionandanswer这张表的时候,需要查询j_comment这张表,并把j_comment这张表里的数据放到questionAndAnswer这个实体中;操作步骤如下:

    二、解决办法

    准备工作:
    1、j_comment表的创建;
    2、comment的实体类创建
    3、在j_questionandanswer(别名qa)这个表里加入左连接:

    left join j_comment jc on jc.titleid = qa.id

    4、在select中,加入想要在j_comment表中查询到的字段;jc是j_comment的别名;
    5、QuestionAndAnswer实体中,加入Comment映射的List集合:
    这里写图片描述

    6、注意:jc表中的id会和qa表中的id冲突,jc.id起别名叫cid;

    <!--分页查询-->
    <select id="selectByProperties" parameterType="com.jxdx.questionAndAnswer.model.QuestionAndAnswer" resultMap="BaseResultMap">
    select <include refid="Base_Column_List_Alias"/>,jc.id AS cid, jc.titlename, jc.titleid, jc.username, jc.userid, jc.comment, jc.create_date from jxdx_questionandanswer qa
    <if test="studentid != null">
    left join sys_t_user u on u.id = qa.studentid
    </if>
    <if test="teacherid != null">
    left join sys_t_user u on u.id = qa.teacherid
    </if>
    left join jxdx_comment jc on jc.titleid = qa.id
    where qa.deleted=0
    <if test="name!=null">
    AND qa.name like '%${name}%'
    </if>
    <if test="studentid!=null">
    AND qa.studentid=#{studentid,jdbcType=BIGINT}
    </if>
    <if test="studentname!=null">
    AND qa.studentname=#{studentname,jdbcType=VARCHAR}
    </if>
    <if test="createDate != null">
    AND qa.create_date <![CDATA[>=]]> #{createDate}
    </if>
    <if test="updateDate != null">
    AND qa.update_date <![CDATA[>=]]> #{updateDate}
    </if>
    <!-- <if test="updateDate != null">
    AND qa.update_date <![CDATA[<=]]> date_add(#{updateDate}, INTERVAL 1 DAY)
    </if>-->
    <if test="teacherid != null">
    AND qa.teacherid = #{teacherid,jdbcType=BIGINT}
    </if>
    <if test="teachername!=null">
    AND qa.teachername=#{teachername,jdbcType=VARCHAR}
    </if>
    <if test="studentclassid!=null">
    AND qa.studentclassid=#{studentclassid,jdbcType=BIGINT}
    </if>
    <if test="studentclassname!=null">
    AND qa.studentclassname=#{studentclassname,jdbcType=VARCHAR}
    </if>
    <if test="question!=null">
    AND qa.question=#{question,jdbcType=VARCHAR}
    </if>
    <if test="answer!=null">
    AND qa.answer=#{answer,jdbcType=VARCHAR}
    </if>
    <if test="status!=null">
    AND qa.status=#{status,jdbcType=INTEGER}
    </if>
    <if test="remark!=null">
    AND qa.remark=#{remark,jdbcType=VARCHAR}
    </if>
    <if test="deleted!=null">
    AND qa.deleted=#{deleted,jdbcType=INTEGER}
    </if>
    <if test="createBy != null">
    AND qa.createBy = #{createBy,jdbcType=BIGINT}
    </if>
    <if test="updateBy != null">
    AND qa.updateBy = #{updateBy,jdbcType=BIGINT}
    </if>
    order by qa.create_date desc
    </select>

    注:

    • 这里的<include refid="Base_Column_List_Alias"/>
      是查询的字段的集合,可以替换成具体的字段名;

    • ` AND qa.create_date

    <collection property="commentList" ofType="com.jxdx.questionAndAnswer.model.Comment" notNullColumn="id">
    <id column="cid" property="id" jdbcType="BIGINT"/>
    <result column="titlename" property="titleName" jdbcType="VARCHAR" />
    <result column="titleid" property="titleId" jdbcType="VARCHAR"/>
    <result column="username" property="userName" jdbcType="BIGINT" />
    <result column="userid" property="userId" jdbcType="VARCHAR" />
    <result column="comment" property="comment" jdbcType="VARCHAR"/>
    <result column="remark" property="remark" jdbcType="VARCHAR"/>
    <result column="create_date" property="createDate" jdbcType="VARCHAR"/>
    </collection>

    完成

    欢迎关注我的公众号:
    【幕桥社区】
    这里写图片描述

    展开全文
  • Spring 注解 new创建对象后失效

    千次阅读 2016-08-30 17:39:14
    遇到这么一个情况,想写一个Util工具类用于记录操作日志,在无法使用static关键字情况下,使用new来创建对象,随后运行一直报异常, java.lang.NullPointerException at ...
  • 查询封装后的对象(queryxxxx) 在JAVA中,将每个用户的数据不可能全都封装到Map里面,不安全,所以要将用户数据封装到一个类里面,然后使用queryForObject查询出数据将其封装到类对象里,那么返回出来的就是一个...
  • Mybatis中关联表需要创建实体对象吗?

    千次阅读 2020-12-24 15:27:00
    1、比如在用户角色权限结构中,关联表只是存储关联关系,那么这种情况下是不需要创建实体类的,业务操作可以交给Java代码来做或者直接跨表操作。 2、如果关联表中还存储有一些状态数据或者是资源数据,那么就需要...
  • 上面的代码是我查询的司机轨迹在driverTracks中,然后我只想获取轨迹的经纬度放入到trackVo对象中,因为有多个经纬度,所以使用了List容器包含trackVo对象。 我当时想的时候把这个保存经纬度的对象在for循环外面...
  • JVM 对象查询语言(OQL)

    万次阅读 2018-08-24 20:30:08
    OQL(对象查询语言)  OQL是用于查询Java堆的类SQL查询语言。OQL允许过滤/选择从Java堆中获取的信息。虽然HAT已经支持预定义的查询,例如“显示类X的所有实例”,但OQL增加了更多的灵活性。OQL基于JavaScript...
  • elasticsearch 嵌套对象查询

    万次阅读 2018-02-11 18:30:04
    // 创建嵌套对象mapping PUT /earth_index { "mappings": { "earthblog": { "properties": { "title":{ "type":"string"}, "body":{ ...
  • Mybatis查询语句返回对象和泛型集合

    千次阅读 2017-06-14 14:57:25
    Mybatis查询语句返回对象和泛型集合
  • java不通过构造函数创建对象(Unsafe)

    万次阅读 多人点赞 2020-05-31 17:02:16
    java中不通过构造函数创建对象(也有说不创建对象直接执行成员方法) 这里就不和你们扯什么通过 反序列化、clone等方法了 个人觉得都是在胡扯。 如何不执行构造函数创建对象? 先来带大家认识一个类 sun.misc.Unsafe...
  • Qt之Q_GLOBAL_STATIC创建全局静态对象

    千次阅读 2018-05-23 08:08:42
    所谓的全局静态对象,大多是在单例类中所见,之前写过一篇文章介绍如何实现一个单例类,在这里,这是最常见的方式来进行创建,需要自定义 static 类对象, 并进行手动初始化。而今天要说的是更简单的方式来实现,Qt ...
  • hibernate三大查询所有对象

    千次阅读 2017-06-09 17:05:27
    Query对象 1.使用query对象,不需要写sql语句,但是写hql语句  (1)hql:hibernate query language ,hibernate提供查询语句,这个hql与普通sql语句很相似 (2)hql和sql区别:sql语句是通过数据库表和字段进行...
  • JDBC执行SQL语句: 一旦获得了链接,我们可以与数据库进行交互。JDBC Statement和PreparedStatement...在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法来创建创建Statem...
  • JS对象创建 Object.create() 方法

    万次阅读 2018-06-07 17:20:50
    Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。 语法 Object.create(proto, [ propertiesObject ]) 通过Object.create 方法可以创建对象,在这里有两个参数,第一个参数是对象,第二个...
  • 文章目录Django Q/F#1 环境#2 开始#2.1 django F()表达式#2.2 F()操作在 obj.save() 后会持续存在#2.3 F()再过滤(filter)中的使用#2.4 Django Q()表达式#2.5 Q()传入条件查询#2.6 Q()非 Django Q/F #1 环境 Python...
  • Access中创建含有OLE对象列的表

    千次阅读 2016-04-12 09:21:01
    创建/ 查询设计 /SQL视图  到这里才可以输入SQL语句。 OLE对象在SQL语句中的类型为 IMAGE
  • DetachedCriteria对象实现离线查询

    千次阅读 2014-10-21 20:54:59
    Criteria对象在运行时与Session对象绑定,所以二者的生命周期想通,即当Session... DetachedCriteria对象可以实现离线查询  离线查询在web应用在某些功能实现中很有用,如在分层的web应用中有需要实现动态条件查询
  • Criteria——Hibernate的面向对象查询

    千次阅读 2015-06-28 23:13:07
    Criteria Query通过面向对象的设计,将数据查询条件封装为一个对象。简单来说,Criteria Query可以看作是传统SQL的对象化表示,如: Criteria criteria=session.createCriteria(TUser.class); criteria.add...
  • js中的字面量与构造函数创建对象

    千次阅读 2015-10-18 23:58:05
    在使用百度地图JavaScript API中,多次看到类此语句"此类没有构造函数,但可通过对象字面量形式表示"。特此了解下: 一、在JavaScript中没有所谓的空对象,即使最简单的{}也具有从...2.使用内置构造函数创建对象:v
  • 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案。
  • cl_mem clCreateBuffer( cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errcode_ret) 这个函数是用来创建缓存对
  • //反射动态创建对象: //如果A,B,C,D都与执行代码同一个程序集.则可以这样调用 //System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("命名空间.类名", false); // 如: //object o = System....
  • Mybatis关联查询结果集对象嵌套

    万次阅读 2018-01-04 17:47:30
    查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标签,本文适合有一定Mybatis基础的读者查阅
  • 创建一个HttpResponse对象

    万次阅读 2010-05-03 10:12:00
    创建一个HttpResponse对象 HttpResponse类实现了javax.servlet.http.HttpServletResponse。跟随它的是一个叫做HttpResponseFacade的façade类。Figure 3.3显示了HttpResponse类和它的相关类的UML图。 在第2章中,你...
  • 内核就是程序中声明的一个函数。...内核对象中封装了程序中的某个__kernel函数以及执行此函数时所需的参数。 1、创建内核 cl_kernel clCreateKernel (cl_program program, const char *kerne
  • C++实现反射(根据类名动态创建对象)

    万次阅读 2016-06-21 18:38:07
    和网上大多数实现一样,本文也采用工厂方法来实现对象的动态创建,唯一不同的在于,本文的实现优化了类的注册,使用起来更为简单。废话不多说,直接上代码(这也没什么可说的,看代码更加直观)。 DynamicFactory.h...
  • HQL查询步骤

    千次阅读 2014-07-17 23:36:20
    HQL查询步骤 ...3、以HQL语句作为参数,调用Session的createQuery方法创建查询对象 4、HQL语句包含参数,则调用Query的setXx方法为参数赋值 5、Query对象的list等方法返回查询结果列表
  • class Gun: def __init__(self,model): # 枪的类型 self.model = model # 子弹数量 self.bullet_number = None # 查询子弹数量 def queryBulletsNum(self): return self.bu...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 908,746
精华内容 363,498
关键字:

如何创建查询对象