我有以下hibernate查询:
Query query = session.createQuery("from MyHibernateClass");
List<MyHibernateClass> result = query.list();// executes in 7000ms
Run Code Online (Sandbox Code Playgroud)
当我在MySQL中记录正在执行的sql时,我看到了
select
myhibernat0_.myFirstColumn as myfirstcolumn92_,
myhibernat0_.mySecondColumn as mysecondcolumn92_,
myhibernat0_.mythirdcolumn as mythirdcolumn92_,
myhibernat0_.myFourthColumn as myfourthcolumn92_
from MyHibernateClass myhibernat0_
where (1=1);
Run Code Online (Sandbox Code Playgroud)
当在MyHibernateClass数据库表中的3500行的小数据集上测量jvm中的java代码时,这需要大约7000ms.
如果我在另一方面使用直接jdbc如下:
Statement statement = session.connection().createStatement();
ResultSet rs = statement.executeQuery("select * from MyHibernateClass");// 7ms
List<MyHibernateClass> result = convert(rs);// executes in 20ms
Run Code Online (Sandbox Code Playgroud)
我看到相同的sql进入数据库,但现在jvm中java代码的花费时间是7ms.
MyHibernateClass是一个带有getter和setter的简单java bean类,我没有使用特殊的resulttransformers,如示例中所示.我只需要该类的只读实例,并且不需要附加到hibernate会话.
我宁愿使用hibernate版本但不能接受执行时间.
补充信息:添加hibernate日志后我看到了
[2011-07-07 14:26:26,643]DEBUG [main] [logid: ] -
org.hibernate.jdbc.AbstractBatcher.logOpenResults(AbstractBatcher.java:426) -
about to open ResultSet (open ResultSets: 0, globally: 0)
Run Code Online (Sandbox Code Playgroud)
接下来是3500条以下日志语句
[2011-07-07 14:26:26,649]DEBUG [main] …Run Code Online (Sandbox Code Playgroud) 我正在从父对象创建一个子对象.所以场景是我有一个对象和一个子对象,它为我想要搜索的场景添加了一个距离属性.我选择使用继承,因为我的UI与搜索对象或对象列表等效地工作,而不是位置搜索的结果.所以在这种情况下,继承似乎是一个明智的选择.
目前我需要MyObjectSearch从一个实例生成一个新对象MyObject.目前我通过逐个设置属性手动在构造函数中执行此操作.我可以使用反射,但这会很慢.有没有更好的方法来实现这种对象增强?
希望下面的代码说明了这个场景.
public class MyObject {
// Some properties and a location.
}
public class MyObjectSearch : MyObject {
public double Distance { get; set; }
public MyObjectSearch(MyObject obj) {
base.Prop1 = obj.Prop1;
base.Prop2 = obj.Prop2;
}
}
Run Code Online (Sandbox Code Playgroud)
我的搜索功能:
public List<MyObjectSearch> DoSearch(Location loc) {
var myObjectSearchList = new List<MyObjectSearch>();
foreach (var object in myObjectList) {
var distance = getDistance();
var myObjectSearch = new MyObjectSearch(object);
myObjectSearch.Distance = distance;
myObjectSearchList.add(myObjectSearch);
}
return myObjectSearchList;
Run Code Online (Sandbox Code Playgroud)
}
鉴于以下示例,客观上比另一个客观更好/更快/更安全吗?对象文字实例化是否应该是实用的最佳实践?
这在哪里不合适?
class Person
{
public string name;
public int age;
}
void MakePeople()
{
Person myPerson = new Person();
myPerson.name = "Steve";
myPerson.age = 21;
Person literalPerson = new Person { name = "John", age = 22 };
}
Run Code Online (Sandbox Code Playgroud) 在一次java访谈中,提出以下问题:
在java中有没有一种方法来实例化一个对象而不使用new运算符?我回答他说没有其他的实例化方法.但他问我如何使用java中的xml文件(在spring框架中)中的java 配置实例化java中的对象.我说,内部弹簧用于reflection utils创建一个带有new操作符的对象.但面试官并不相信我的回答.
我看到这个链接很有用但是有一个new操作员间接参与了一个或另一个内部方法.
有没有办法在不使用new运算符的情况下在java中实例化对象?
Android有没有办法在不调用任何构造函数的情况下实例化对象?
在Java中,Sun有sun.reflect.ReflectionFactory.getReflectionFactory().newConstructorForSerialization(),在.Net中我们有System.Runtime.Serialization.FormatterServices.GetUninitializedObject()但我在Android平台上找不到类似的东西.
从microsoft文档,Type.GetType在.NET 4.5中可以不区分大小写.不幸的是,这在WinRT(Metro/Modern UI/Store应用程序)中不可用.
有一个已知的解决方法吗?因为我必须从协议中实例化对象,所有协议都具有大写的字符串表示形式.
示例:从"MYOBJECT",我必须实例化MyObject.
我目前使用Activator.CreateInstance(Type.GetType("MYOBJECT")),但由于区分大小写,它不起作用.
谢谢
c# types case-insensitive objectinstantiation windows-runtime
最近我的老师正在讨论使用不同的构造函数来实例化对象.但我真的很困惑.为此,我想了解为什么我得到以下编译错误.
class SuperClass {
void superClass(){
System.out.println("superClass");
}
}
class SubClass extends SuperClass {
void subClass(){
System.out.println("subClass");
}
}
class Call {
public static void main(String args[]){
SuperClass s = new SubClass();
s.superClass();
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译并运行以下代码时,我得到了输出
superClass
Run Code Online (Sandbox Code Playgroud)
但是当我尝试subClass()通过sObject 调用时,我收到以下错误.
damn.java:17: cannot find symbol
symbol : method subClass()
location: class SuperClass
s.subClass();
^
1 error
Run Code Online (Sandbox Code Playgroud)
好吧,根据这个,我可以假设即使我用不同的构造函数实例化对象,只有指定的Object类型被加载到RAM.
但是,当我在这里使用覆盖时,
class SuperClass {
void superClass(){
System.out.println("superClass");
}
}
class SubClass extends SuperClass {
void superClass(){
System.out.println("subClass");
}
}
class Call …Run Code Online (Sandbox Code Playgroud) 以下代码旨在作为可重用对象的简单构造的简短示例.这是一个非常简单的,一个级别的深度对象,可以根据需要添加多个道具和方法,然后分配它们.
function someDesiredReusableType(optionally, pass, ctor, pars, here) {
//core obj to return
var DesiredTypeCrtor = {
propSkiingLocation: "canada",
OrderTickets: function(optionally){
var tryRoomWView = optionaly;
print(
"Dear " + ctor +", your request for " +
propSkiingLocation + " is now being processed: an " +
tryRoomWView + " request was notified, we understand you have " + pars + " for cross country transportation, confirmation email will be sent " + here + " as soon as we process your …Run Code Online (Sandbox Code Playgroud) 对于我目前正在工作的项目之一,我正在考虑创建一个无法由客户端实例化的类,并且只通过特定接口提供实例,即客户端无法通过某些实现创建更多实例hackery如:
>>> try:
... raise WindowsError
... except:
... foo = sys.exc_info()
...
>>> foo
(<type 'exceptions.WindowsError'>, WindowsError(), <traceback object at 0x0000000005503A48>)
>>> type(foo[2])()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot create 'traceback' instances
Run Code Online (Sandbox Code Playgroud)
一旦他有一个.
我成功地创建了一个无法实例化的类.即
>>> class Foo():
... def __init__(self):
... raise TypeError("cannot create 'Foo' instances")
...
>>> bar = Foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: cannot create 'Foo' …Run Code Online (Sandbox Code Playgroud) 我有一项Utils非常繁重的服务。我想在特定用户操作上使用其中定义的一些功能。由于这项服务很重,我想懒惰地实例化它(根据用户操作)。
我如何实现这一目标?
服务
module.service('Utils', function (dep1, dep2) {
this.method1 = function () {
// do something
}
// other methods
});
Run Code Online (Sandbox Code Playgroud)
控制器
module.controller('AppCtrl', function ($scope) {
// I don't want to inject Utils as a dependency.
$scope.processUserAction = function () {
// If the service is not instantiated
// instantiate it and trigger the methods defined in it.
}
});
Run Code Online (Sandbox Code Playgroud)
标记
<div data-ng-controller="AppCtrl">
<button data-ng-click="processUserAction()"> Click Me </button>
</div>
Run Code Online (Sandbox Code Playgroud) dependency-injection objectinstantiation angularjs angular-services
c# ×3
java ×3
.net ×1
android ×1
angularjs ×1
constructor ×1
hibernate ×1
inheritance ×1
javascript ×1
new-operator ×1
object ×1
oop ×1
python ×1
types ×1
xml ×1