问题的需求如下:
数据库中的表的属性如下user_tb
前端的显示效果如下
在做这个项目的时候遇到了一个问题,数据库中的user的属性没有年龄的这个字段,只有一个date的日期属性(即生日),而前端的页面显示的生日所对应的当前的年龄,是一个动态值,要根据生日和当前的时间计算出,然后传到前台页面。这就出现了几个问题,如何对应的存储计算出来的年龄,计算方法容易办,写一个计算的工具类就可以实现,传入一个出生年月的Date,根据当前的时间计算出一个年龄返回。关键是如何存储和对应的取出:
因为user没有这个年龄的属性,循环的取出计算后没办法对应的保存,另外存储,取又是一个问题,曾想过动态的给user加一个属性,也没发现解决办法,后来在使用json的时候看到了json在转换的时候动态给json对象添加属性的方法,参照这个方法,算是解决了这个问题,在此分享出来,希望可以帮助像我这个菜鸟,O(∩_∩)O哈哈哈~
主要代码如下:
计算年龄的工具
package com.util;
import java.util.Date; import java.text.SimpleDateFormat;
public class Calc { public static int jisuannianling(Date date2){ //通过输入日期来获取年龄的 Date date = new Date(System.currentTimeMillis()); SimpleDateFormat sfYear = new SimpleDateFormat("yyyy"); SimpleDateFormat sfMonth = new SimpleDateFormat("MM"); SimpleDateFormat sfDat = new SimpleDateFormat("dd"); //取出生日Date中的年月日 String byear = sfYear.format(date2); String bmonth = sfMonth.format(date2); String bday = sfDat.format(date2); System.out.println("年"+byear+"月"+bmonth+"日"+bday); //取出当前系统的年、月、 String year = sfYear.format(date); String month = sfMonth.format(date); String day = sfDat.format(date); System.out.println("年"+year+"月"+month+"日"+day); //年龄 int sui=0; //要计算的数据 //生日的信息 int birthyear =Integer.parseInt(byear); int birthMonth = Integer.parseInt(bmonth); int birthday = Integer.parseInt(bday); //今天的时间 int nowyear = Integer.parseInt(year); int nowMonth = Integer.parseInt(month); int nowday = Integer.parseInt(day); //待返回的生日 sui = nowyear - birthyear; //比较年份 if(nowyear >=birthyear){ //如果年份大于生日年份,比较月份 if(nowMonth>=birthMonth){ //比较日 if(nowday>=birthday){//如果今天日期大于生日日期 return sui; }else if(nowday<birthday){//今日小于生日 return sui-1; } }else if(nowMonth<birthMonth){ //如果年份小于生日月份 return sui-1; } }
return sui;
} }
|
User类的代码
package com.entity; import java.sql.Timestamp;
import com.util.Calc; /** * User entity. @author MyEclipse Persistence Tools */ public class User implements java.io.Serializable { // Fields private Integer id; private String name; private String pwd; private Timestamp birth; /* 这个是关键的地方,在user里面加一个getAge()的方法,在方法中 */ public int getAge(){ return Calc.jisuannianling(birth); } // Constructors /** default constructor */ public User() { } /** full constructor */ public User(String name, String pwd, Timestamp birth) { this.name = name; this.pwd = pwd; this.birth = birth; } // Property accessors
public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getPwd() { return this.pwd; } public void setPwd(String pwd) { this.pwd = pwd; }
public Timestamp getBirth() { return this.birth; } public void setBirth(Timestamp birth) { this.birth = birth; } } |
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.entity.User" table="user_tb" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="100" /> </property> <property name="pwd" type="java.lang.String"> <column name="pwd" length="100" /> </property> <property name="birth" type="java.sql.Timestamp"> <column name="birth" length="19" /> </property> </class> </hibernate-mapping>
|
转换后的json如下
运行后的效果如下