zl程序教程

您现在的位置是:首页 >  其他

当前栏目

使用hibernate 提取属性 hibernate 注解@Formula

属性hibernate 注解 提取 使用
2023-09-27 14:29:21 时间
1 关于hibernate的@Formula用法和作用可以参照别的文章 2 hibernate提取属性也叫做计算属性,该属性值是一个值读属性,是通过使用sql语句获取得到的,常用的是统计数据 3 案例:我有一个employee实体类,该类有主键Id或name,月薪水(monthlySalary)等属性(字段),你现在有一个想法想要获取该employee的年薪,计算方式是月薪*12个月=年薪。
1 关于hibernate的@Formula用法和作用可以参照别的文章

2 hibernate提取属性也叫做计算属性,该属性值是一个值读属性,是通过使用sql语句获取得到的,常用的是统计数据

3 案例:我有一个employee实体类,该类有主键Id或name,月薪水(monthlySalary)等属性(字段),你现在有一个想法想要获取该employee的年薪,计算方式是月薪*12个月=年薪。

package net.ozar.exp.entity;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

@Entity

@Table(name="EMPLOYEE")

public class Employee implements java.io.Serializable {

 private static final long serialVersionUID = -7311873726885796936L;

 @Column(name="ID")

 private Integer id;

 @Column(name="FIRST_NAME", length=31)

 private String firstName;

 @Column(name="LAST_NAME", length=31)

 private String lastName;

 @Column(name="MONTHLY_SALARY")

 private float monthlySalary;

 public Employee() {

 // getters and setters

 // ...

 public float getMonthlySalary() {

 return monthlySalary;

 public void setMonthlySalary(float monthlySalary) {

 this.monthlySalary = monthlySalary;

 /* This artificial property - as I call it - is a kind of a calculated property, but not with Hibernate derived property support - not just yet */

 public float getYearlySalary() {

 return this.monthlySalary * 12;

}
4 上面这个是没有加入hibernate @@Formula支持的用法,现在我们加入这个注解实现:

package net.ozar.exp.entity;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

import org.hibernate.annotations.Formula;

@Entity

@Table(name="EMPLOYEE")

public class Employee implements java.io.Serializable {

 private static final long serialVersionUID = -7311873726885796936L;

 @Column(name="ID")

 private Integer id;

 @Column(name="FIRST_NAME", length=31)

 private String firstName;

 @Column(name="LAST_NAME", length=31)

 private String lastName;

 @Column(name="MONTHLY_SALARY")

 private float monthlySalary;

 @Formula("MONTHLY_SALARY*12")

 private float yearlySalary;

 public Employee() {

 public Integer getId() {

 return id;

 public void setId(Integer id) {

 this.id = id;

 public String getFirstName() {

 return firstName;

 public void setFirstName(String firstName) {

 this.firstName = firstName;

 public String getLastName() {

 return lastName;

 public void setLastName(String lastName) {

 this.lastName = lastName;

 public float getMonthlySalary() {

 return monthlySalary;

 public void setMonthlySalary(float monthlySalary) {

 this.monthlySalary = monthlySalary;

 public float getYearlySalary() {

 return yearlySalary;

}
5 注意到上面这个案例的@Formla的值是关联到“MONTHLY_SALARY”而yearlySalry属性是没有存储如数据库的。

6 一些更为复杂用法

@Formula("(select min(l.creation_date) from Logs l where l.customer_id = id)")

private Date firstLoginDate;
注意:最後面的customer_id=id中后面的id的值也就当前对象的id值




mybatis的association标签传多个参数 association标签里面的column以对象的形式传过去,接收的时候把parameterType改为 其中 id 和 name 是对应你表的字段,两个 param 名字随便定义
MyBatis在生成update语句时若使用if标签,如果前面的if没有执行,则可能导致有多余逗号的错误。 使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。
Hibernate-ORM:07.Hibernate中的参数绑定 ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客会讲解Hibernate中的参数绑定,就是相当于sql语句中的where后面的条件 一,讲解概述: