需求

设计的国际化网站,页面需要输入firstName,lastName,后台数据库只需要存储name属性。
页面获取的firstName,lastName持久化到数据库name属性,规则按照,分隔保存。
防止错误修改,模型里面的name属性不提供getter,setter方法。

ddl语句

CREATE TABLE `t_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`birthday` datetime DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

User

package com.jege.jpa.primary;import java.util.Date;import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PostLoad;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Transient;/*** @author JE哥* @email 1272434821@qq.com* @description:自动把firstName+lastName合并为name*/
@Entity
@Table(name = "t_user")
@Access(AccessType.FIELD)
public class User {@Id@GeneratedValueprivate Long id;@Column(name = "name", unique = true)private String name;private Date birthday;@Transientprivate String firstName;@Transientprivate String lastName;@PostLoadprivate void load() {if (name != null) {String[] names = name.split(",");firstName = names[0];lastName = names[1];}}@PrePersist@PreUpdateprivate void save() {if (firstName != null && !"".equals(firstName)) {name = firstName + ",";}if (lastName != null && !"".equals(lastName)) {name += lastName;}}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}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;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", birthday=" + birthday + ", firstName=" + firstName + ", lastName="+ lastName + "]";}}

MainTest

package com.jege.jpa.primary;import java.util.Date;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;/*** @author JE哥* @entityManagerail 1272434821@qq.com* @description:自动把firstName+lastName合并为name测试*/
public class MainTest {private static EntityManagerFactory entityManagerFactory = null;private EntityManager entityManager = null;@BeforeClasspublic static void setUpBeforeClass() throws Exception {entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa");}@Beforepublic void setUp() throws Exception {entityManager = entityManagerFactory.createEntityManager();}@Testpublic void persist() throws Exception {User user = new User();user.setBirthday(new Date());user.setFirstName("西门");user.setLastName("吹雪");entityManager.getTransaction().begin();entityManager.persist(user);entityManager.getTransaction().commit();}@Afterpublic void tearDown() throws Exception {if (entityManager != null && entityManager.isOpen()) {entityManager.close();}}@AfterClasspublic static void tearDownAfterClass() throws Exception {if (entityManagerFactory != null && entityManagerFactory.isOpen()) {entityManagerFactory.close();}}
}

源码地址

https://github.com/je-ge/jpa

如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。您的支持将鼓励我继续创作!谢谢!

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

JPA 系列教程18-自动把firstName+lastName合并为name字段相关推荐

  1. JPA 菜鸟教程 18 自动把firstName+lastName合并为name字段

    GitHub src="//ghbtns.com/github-btn.html?user=je-ge&repo=jpa&type=watch&count=true& ...

  2. STM32 基础系列教程 18 – IWDG

    前言 学习stm32 独立看门狗(IWDG)接口使用,学会用STM32内部独立看门狗(IWDG)实现程序异常时自复位功能. STM32F10xxx内置两个看门狗,提供了更高的安全性.时间的精确性和使用 ...

  3. JPA 系列教程3-单向多对一

    JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设 ...

  4. JPA 系列教程21-JPA2.0-@MapKeyColumn

    @MapKeyColumn 用@JoinColumn注解和@MapKeyColumn处理一对多关系 ddl语句 CREATE TABLE `t_employee` (`id` bigint(20) N ...

  5. JPA 系列教程12-复合主键-2个@Id+@IdClass

    复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 同复合主键-2个@Id一样 Airline p ...

  6. 【易语言界面开发系列教程之(EX_UI使用系列教程 ——1-8节)】

    感谢作者的无私的分享,写出好的界面库,给大家分享出来,我们也为初学者,减少时间去学习,更快的使用这个界面库,而做的这套视频...更多视频请大家关注搜狐视频订阅号"界面工厂".... ...

  7. 【modelarts】华为人工智能平台_modelarts平台系列教程2_自动学习_物品检测(2)

    文章目录 前言 一 数据准备 二 创建项目 三 数据标注 四 模型训练 五 部署上线 前言 华为modelarts训练,能够面向三类用户提供解决AI开发支持.对于无AI基础的业务开发员,可以使用自动学 ...

  8. go 修改结构体方法_「GCTT 出品」Go 系列教程——26. 结构体取代类

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 支持面向对象吗? Go 并不是完全面向对象的编程语言.Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘 ...

  9. go 自定义error怎么判断是否相等_「GCTT 出品」Go 系列教程——30. 错误处理

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Go 系列教程是非常棒的一套初学者教程,入门就它了. 这是 Golang 系列教程中的第 30 篇.在本章教程中,我们 ...

最新文章

  1. 【Codeforces】501B Misha and Changing Handles(map)
  2. python3爬虫入门教程-Python3爬虫学习入门教程
  3. 怎么排号_春节将至,那些过年不回家的人们都是怎么过年的?
  4. 12、play整合Akka
  5. Linux学习笔记15—RPM包的安装OR源码包的安装
  6. linux内核I2C子系统学习(一)
  7. 深度剖析Kubernetes API Server三部曲 - part 3
  8. 记-ItextPDF+freemaker 生成PDF文件---导致服务宕机
  9. Swift编程-闭包Closure
  10. windows/linux 查看端口占用
  11. 印第安纳大学计算机语言学,语言学
  12. coin3D中导入机器人模型
  13. 大学课程 | 《微机原理与接口技术》知识点总结
  14. CCSK认证是什么?云计算安全知识认证含金量大吗?
  15. 电脑计算机无法加载,电脑网页视频一直显示无法加载插件
  16. nginx resolver
  17. CommandArgument的一种用法
  18. 对齐次线性方程组同解充要条件的新理解
  19. 一天一篇latex刘海洋代码解析:1.2.3填写正文
  20. 【莹伙丛】手把手教你:Gradle 安装及配置

热门文章

  1. 2018虹软笔试题(算法方向)
  2. admi后台 vue_vue管理后台
  3. ORA-00001: 违反唯一约束条件 的解决办法
  4. 停车场管理系统C语言作业,c语言课程设计报告停车场管理系统
  5. Java实现阿拉伯数字转换成罗马数字
  6. 频谱仪设计基于FPGA的频谱仪设计,可以测试分析多种频率的频谱,分辨率100HZ
  7. mysql 大数据查询使用 exists,或者not exists
  8. 分库分表-1| 什么是分库分表?
  9. 云计算下半场,阿里云的谋篇布局
  10. 微信发朋友圈/评论/点赞/搜索/购物车 测试用例点