我有一些复杂的查询要使用许多可选的过滤器构建,MyBatis似乎是生成动态SQL的理想候选者.
但是,我仍然希望我的查询在与应用程序的其余部分(不使用MyBatis)相同的框架中执行.
所以我希望做的是严格使用MyBatis来生成SQL,但是从那里使用我的应用程序的其余部分来实际执行它.这可能吗?如果是这样,怎么样?
我有几个Java枚举,看起来像下面(为机密性编辑等).在每种情况下,我都有一个我真的不满意的查找方法; 在下面的例子中,它是findByChannelCode.
public enum PresentationChannel {
ChannelA("A"),
ChannelB("B"),
ChannelC("C"),
ChannelD("D"),
ChannelE("E");
private String channelCode;
PresentationChannel(String channelCode) {
this.channelCode = channelCode;
}
public String getChannelCode() {
return this.channelCode;
}
public PresentationChannel findByChannelCode(String channelCode) {
if (channelCode != null) {
for (PresentationChannel presentationChannel : PresentationChannel.values()) {
if (channelCode.equals(presentationChannel.getChannelCode())) {
return presentationChannel;
}
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我可以使用a时,我觉得这些线性查找很傻HashMap<String, PresentationChannel>.所以我想到了下面的解决方案,但是我希望它有点混乱,而且更重要的是,我肯定在别人遇到这个问题时我不在乎重新发明轮子.我想得到这个群体的一些圣人智慧:用值索引枚举的正确方法是什么?
我的解决方案
ImmutableMap<String, PresentationChannel> enumMap = Maps.uniqueIndex(ImmutableList.copyOf(PresentationChannel.values()), new Function<PresentationChannel, String>() {
public String apply(PresentationChannel input) {
return input.getChannelCode(); …Run Code Online (Sandbox Code Playgroud) 我对番石榴有点新鲜,它的风格.我肯定在挖掘它,但我不断绊倒的一件事是链式方法的顺序.我似乎有这个问题的地方最多的是使用复合物Ordering.我不得不一直问自己这样的问题:
natural去哪儿了?nullFirst(或上次)去?nullsFirst做什么?(在下面的示例中,一个用于主机,一个用于姓氏,一个用于名字?)这是我刚刚开始研究的一个例子.它看起来很麻烦,我只是不确定我是否把它放在一起.我有一些JUnits来测试它,看起来没问题,但总有那些奇怪的边界情况.
Ordering<Host> lastNameThenFirstNameOrdering = Ordering.natural().nullsFirst().onResultOf(new Function<Host, String>() {
public String apply(Host host) {
return host.getLastName();
}}).compound(Ordering.natural().nullsFirst().onResultOf(new Function<Host, String>() {
public String apply(Host host) {
return host.getFirstName();
}})).nullsFirst();
Run Code Online (Sandbox Code Playgroud)
至于一个实际的问题:这些事情是如何被执行的,是否有明确的规则?它似乎是倒数第一,但我很难说出来.
编辑:只是想指出我试图替换的大而丑陋的代码:
Ordering<Host> ordering2 = new Ordering<Host>() {
public int compare(Host host1, Host host2) {
if (host1 == null || host2 == null) {
return host1 == host2 ? 0 : ((host1 == null) ? -1 : 1);
}
if(host1.getLastName() != …Run Code Online (Sandbox Code Playgroud) 我使用Spring的消息驱动的POJO框架(DefaultMessageListenerContainer特别是)来监听几个队列和主题.
在一个特别队列的情况下,需要减慢我排空队列的速率,每五分钟一个消息的顺序.消息的实际处理是亚秒操作,但我希望监听器在消息之间闲置一段时间.
我已经创建了一些hack,但它确实是次优的:我所做的是将max concurrency设置为1并Thread.sleep(..)在处理每条消息后添加一个.我想找到一种方法,而不是DefaultMessageListenerContainer在尝试接收之间等待,而不是让处理程序在将要处理消息期间进行等待.
我曾经考虑过是否会有ScheduledExecutor帮助,但我意识到需要在任务生成的地方进行限制.是否有一些方法DefaultMessageListenerContainer可以覆盖以实现我追求的目标?
我有一个Model3DGroup,它使用应用于对象的Transform属性的AxisAngleRotation3D围绕x,y,z轴中的任何一个旋转.
问题是我无法控制网格上应用的各种旋转.我需要在每个渲染循环的每个x,y,z轴上显示网格的角度.
我怎样才能做到这一点?我尝试在对象上检索AxisAngleRotation3D对象,但它只给出了上次应用的旋转.哪个不对.
例如,如果应用了Axis的旋转:Vector3D(1,1,0)角度:45
绕Z轴的实际旋转不是0.如何获得每个轴上的实际角度?
我希望能够在Java中的特定时间安排任务.我知道ExecutorService有能力定期安排,并在指定的延迟后安排,但我看的时间比一段时间更长.
有没有办法Runnable在2:00 进行执行,或者我是否需要计算从现在到2:00之间的时间,然后安排runnable在延迟后执行?
所以我一直试图解决这个问题一段时间,但似乎无法到达任何地方.我正在使用C#创建Excel电子表格.我的电子表格包含一个图表.我可以用图表做任何事情除了更改X轴标签.我已经尝试过几乎所有我能找到但没有任何作用的东西.
Excel.ChartObjects xlChart = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
Excel.ChartObject myChart = (Excel.ChartObject)xlChart.Add(1420, 660, 320, 180);
Excel.Chart chartPage = myChart.Chart;
chartPage.ChartType = Excel.XlChartType.xlXYScatterLines;
chartPage.HasTitle = true;
chartPage.ChartTitle.Text = "Title Text";
chartPage.HasLegend = false;
var yAxis = (Excel.Axis)chartPage.Axes(Excel.XlAxisType.xlValue,Excel.XlAxisGroup.xlPrimary);
yAxis.HasTitle = true;
yAxis.AxisTitle.Text = "Y-Axis Title text";
yAxis.MaximumScale = 20;
yAxis.AxisTitle.Orientation = Excel.XlOrientation.xlUpward;
Excel.Range Data_Range = xlWorkSheet.get_Range("A10", "C10");//Data to be plotted in chart
Excel.Range XVal_Range = xlWorkSheet.get_Range("A1", "C1");//Catagory Names I want on X-Axis as range
var x_labels = new List<string>() { "Val1", "Val2", "Val3" }; //Catagory …Run Code Online (Sandbox Code Playgroud) 在Google Web Toolkit应用程序中使用Google Web Fonts有什么最佳做法吗?我最初的倾向是直接在我的.html文件中添加css引用,la
<link href='http://fonts.googleapis.com/css?family=Josefin+Sans:light,regular,bold' rel='stylesheet' type='text/css'>
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否是最好的方法.在这里使用ClientBundle有什么好处(或任何方式)?
我希望能够在两个equals-Implementations之间切换,但我不确定EquivalenceGoogle Guava 的类是否可以提供此功能.假设我有两个equals方法equalsContent()和equalsKeys()或类似的东西我想以某种方式将equals方法委托给两个私有方法之一(对于两个hashCode方法也是如此).
好吧,我不知道Equivalence抽象类和Equivalences类(静态方法)的用法是什么.
此外,您将如何实现上述所需的属性?我可以使用另一个简单地为值设置标志或枚举的方法,并使用两个抽象方法(equals(),hashCode())在枚举中实现两个equals和hash方法,并简单地调用enum.equals()或enum equals()和hashCode()方法中的.hashCode().你怎么看?
我无法让CSS图像精灵出现在GWT UiBinder中.我确实回顾了如何在GWT中使用图像精灵?,但发现我已经做了建议.
我有一个ui.xml,ClientBundle接口与CssBundle嵌套接口,和一个CSS文件.
ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:with field="resources"
type="edu.wts.upholdingthetruth.poweroftheword.client.resources.POWResources" />
<g:FlowPanel width="100%" styleName="{resources.sprites.underMenuGlow}" />
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
ClientBundle:
public interface POWResources extends ClientBundle {
public static final POWResources INSTANCE = GWT.create(POWResources.class);
@Source("site1/undertopglow.png")
ImageResource underTopGlow();
@Source("sprites.css")
public Sprites sprites();
public interface Sprites extends CssResource {
String underMenuGlow();
}
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
sprites.css:
@sprite .underMenuGlow {gwt-image: "underTopGlow"}
Run Code Online (Sandbox Code Playgroud)
所以,我编译我的应用程序(没有抱怨),并在浏览器中,我的图像丢失.当我在Chrome的开发人员工具中查看该页面时,我看到相应的div引用了混淆的css类,但我无法在任何地方找到该类.
另一方面,我能够使用显示图像<g:Image resource="{resources.underTopGlow}" />.
有没有一个步骤,我想通过像这样的CSS精灵来显示图像?