用getHibernateTemplate().save()保存一条记录到表时,字段的默认值无效

问题描述:
hibernate技术中对应数据库中每一个表,都会有一个映射文件与之对应,此文件描述数据库表中每一个字段的类型、长度、是否可空等属性。在进行表中记录的插入(更新)操作时,hibernate会根据映射文件中的描述自动生成一个包含所有字段的插入(更新)sql语句,此时如果映射文件中某字段的值为空(NULL)而其在数据库表中定义的默认值不为空,hibernate会将空值插入到表中,而不会使用此字段的默认值。

解决方法:
在hibernate映射文件对数据库表的描述中,加入dynamic-insert=”true”和 dynamic-update=”true” 语句,这时hibernate在进行插入(更新)操作时,只会为那些值不为空的字段赋值,而值为空的字段就会使用数据库表中定义的默认值了。

举例说明:
表person:
CREATE TABLE person (
i_id int(11) NOT NULL auto_increment,
c_name varchar(100) NOT NULL default ‘张三’,
PRIMARY KEY  (id)
)

person.hbm.xml:
<hibernate-mapping package=”cn.com.lough.model”>
<class
name=”Person”
table=”person”
lazy=”false”
>
<meta attribute=”sync-DAO”>true</meta>
<cache usage=”read-write”/>
<id
name=”IId”
type=”integer”
column=”i_id”
>
<generator class=”native”/>
</id>

<property
name=”CName”
column=”c_name”
type=”string”
not-null=”false”
length=”128″
/>
</hibernate-mapping>

运行程序
Person p = new Person();
HiFactory.save(p);

此时hibernate生成的sql语句为insert into person(c_name) values(null);

数据库表结果为
i_id   c_name
1      null

修改person.hbm.xml为:
<hibernate-mapping package=”cn.com.lough.model”>
<class
name=”Person”
table=”person”
lazy=”false”
dynamic-insert=”true”
>
<meta attribute=”sync-DAO”>true</meta>
<cache usage=”read-write”/>
<id
name=”IId”
type=”integer”
column=”i_id”
>
<generator class=”native”/>
</id>

<property
name=”CName”
column=”c_name”
type=”string”
not-null=”false”
length=”128″
/>
</hibernate-mapping>

再次运行程序,此时hibernate生成的sql语句为 insert into person() values();
数据库表结果为
i_id   c_name
1      null
2      张三

微信扫码支付成功后跳转

问题描述

微信官方提供的示例中支付扫码页只有二维码图,支付成功后没有任何交互为了更好的用户体验希望扫码支付成功后自动跳转到支付成功页。

解决方案

通过setInterval定时ajax查询订单状态,如果订单支付成功则跳转。

示例代码

[javascript] view plain copy

  1. <script language=javascript>
  2.     var int=self.setInterval(“orderStatus()”,5000)
  3.     function orderStatus()
  4.     {
  5.         $.post(“<?= url::to([‘/order/order/orderstatus’])?>”,
  6.             {
  7.                 orderCode:“<?= $orderCode?>”
  8.             },
  9.             function(data,status){
  10.                 if(data.state==‘success’&&data.data==‘paid’){
  11.                     location.href = “<?= url::to([‘/order/order/return’,’orderCode’=>$orderCode])?>”;
  12.                 }
  13.             });
  14.     }
  15. </script>
作者:xiong
链接:https://www.zhihu.com/question/30355733/answer/88476787
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

$(document).ready(function () { setInterval(“ajaxstatus()”, 3000); }); function ajaxstatus() { if ($(“#out_trade_no”).val() != 0) { $.ajax({ url: “URL?tradeno=” + $(“#out_trade_no”).val(), type: “GET”, dataType:”json”, data: “”, success: function (data) { // alert(data); if (data==1) { //订单状态为1表示支付成功 window.location.href = “wxScanSuccessUrl.action”; //页面跳转 } }, error: function () { alert(“请求订单状态出错”); } }); } }

Java/Jsp中让数值不使用科学计数法显示的解决方案

1.在java后台中进行转换

(1)使用BigDecimal类

double num=8.8888888E10;
String str=new BigDecimal(num).toString();
参考用法:参考

(2)使用DecimalFormat类

double num=8.8888888E10;
String str=new DecimalFormat(“0.00”).format(num);
参考用法:参考

2.在jsp页面中进行转换

(1)使用jstl标签fmt:formatNumber

导入:<%@ taglib uri=”http://java.sun.com/jsp/jstl/fmt” prefix=”fmt”%>
使用 :<fmt:formatNumber value=”8.8888888E10″ pattern=”#.##” minFractionDigits=”2″ > </fmt:formatNumber>
参考用法:参考

(2)使用js脚本

var num=8.8888888E10;
var str=parseFloat(num).toString();