没有合适的资源?快使用搜索试试~ 我知道了~
首页使用SpringBoot-JPA进行自定义保存及批量保存功能
资源详情
资源评论
资源推荐

使用使用SpringBoot-JPA进行自定义保存及批量保存功能进行自定义保存及批量保存功能
主要介绍了使用SpringBoot-JPA进行自定义的保存及批量保存功能,本文通过实例代码给大家介绍的非常详
细,具有一定的参考借鉴价值,需要的朋友可以参考下
说明说明
SpringBoot版本:2.1.4.RELEASE
java版本:1.8
文中所说JPA皆指spring-boot-starter-data-jpa
使用使用JPA保存一个保存一个Student对象对象
在JPA中保存一个对象,仅需要该对象,一个仓储即可。
StudentDO实体类:
@Getter
@Setter
@Entity
@Table(name = "t_student")
public class StudentDO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private String seq;
@Column
private String name;
@Column
private int sex;
}
JPA仓储:
@Repository
public interface StudentRepo extends JpaRepository<StudentDO, String> {
}
一般的,我们只需要调用StudentRepo.save()方法即可完成对实体对象的保存操作。
@Test
public void testSave() {
StudentDO student = new StudentDO();
student.setName("张三");
student.setSex(1);
student.setSeq("123456");
studentRepo.save(student);
Assert.assertNotNull(student.getId());
}
在插入过程中使用在插入过程中使用mysql函数函数
如果我们希望student的seq值由系统自动生成,且生成规则为“yyMMdd + 8位自增序列”(例如19060310000000)又该如何实
现呢?
首先想到的是该如何生成这一串序列,mysql不像oracle自身支持sequence,因此在这里可以借用函数以及额外的sequence表
来实现这一操作,网上有很多实现方式,这里就不再赘述。
现在已经有了函数getseq('student_seq')可以获取到该序列,该如何将其应用到保存对象的方法中?显然的一个问题是,像上面那
样再直接调用save方法已经行不通了,应该得需要自定义插入的sql实现。
一个容易想到的办法是,在StudentDO类上使用注解@SQLInsert来定义insert的实现,它写起来应该会像这个样子:
@SQLInsert(sql = "INSERT INTO t_student(seq, name, sex) VALUES (getseq('student_seq'), ?, ?")
这条sql语句本身并没有什么问题,再次调用save()方法也确实能够执行。但是很可惜,它确会抛出一个sql异常:
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
显然是程序认为有多少个参数,就得有多少个“?”与之匹配,目前我并没有找到解决这个问题的方案,所以这种方法宣告失

















weixin_38600253
- 粉丝: 6
- 资源: 905
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0