我是靠谱客的博主 有魅力大雁,最近开发中收集的这篇文章主要介绍IDEA spring-boot jpa jsp 框架搭建(二)IDEA spring-boot jpa jsp 框架搭建(二)jpa 使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

IDEA spring-boot jpa jsp 框架搭建(二)

上一节讲解了如何搭建一个spring-boot框架,今天来介绍一下jpa的相关知识。

jpa

我使用jpa最主要的一点就是由于它不用在数据库中创建数据表,只要你把对应的关系,数据表的描述在你的实体类中写好,启动spring-boot数据库就会自动生成好。

添加jpa相关的配置

需要在application.properties文件中添加以下代码:

########################################################
### Java Persistence Api --
Spring jpa 的配置信息
#其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值
#create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
#create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
#update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
#validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
#dialect 主要是指定生成表名的存储引擎为InneoDB
#show-sql 是否打印出自动生产的SQL,方便调试的时候查看
########################################################
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true

jpa 使用

分包创建实体类、启动测试

  1. 我们再次新建两个包,分别命名为 entity 和 repository,这两个包用于存放一些实体类和数据库操作的接口。
    这里写图片描述

  2. 在entity包中创建实体类 Userinfo ,类中具体内容如下:

package cn.itlaobing.web.entity;
import javax.persistence.*;
import javax.print.attribute.standard.MediaSize;
@Entity
@Table(name="userinfos")
public class Userinfo {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
// 主键
@Column(name = "user_name")
private String username; //用户名
@Column(name = "user_pass")
private String userpass; //密码
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
}

解释一下代码中的注解:
@Entity : 这个注解代表这个Userinfo是一个实体类,也就是说,当你创建实体类时,需要加上@Entity 标志着此类是实体类;
@Table(name=”userinfos”) :这个注解代表对应表的名称,userinfos就是利用jpa要生成的表名称;
@id :表明此属性是主键;
@GeneratedValue :表示的是 主键生成策略,默认主键是自增长的,当然你也可以使用 uuid
@Column :表明此属性在数据库中对应的字段,如果实体中的属性与数据库中的字段一样,可以省略不写。
3. 测试一下,启动SpringBootJpaApplication,查看数据库是否生成userinfos表。

这里写图片描述
数据库已经成功创建了userinfos表。
再看看其中的字段是否一致
这里写图片描述
好的,字段也是一致的。

继承 jpa 相关操作接口,实现增删改查

  1. 下面我们来实现数据的增删改查,在repository包中新建一个UserinfoRepository接口 并且继承JpaRepository,具体代码如下:
package cn.itlaobing.web.repository;
import cn.itlaobing.web.entity.Userinfo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserinfoRepository extends JpaRepository<Userinfo,Integer> {
}

解释一下:
JpaRepository 这个里面已经写好了一些增删改查的方法,我们只需要调用就行了。

编写测试用例

新建一个测试用例:
这里写图片描述
新建好的测试用例在test包里。

编写测试配置:

打开UserinfoRepositoryTest.java 需要引用一些配置:

package cn.itlaobing.web.repository;
import cn.itlaobing.SpringBootJpaApplication;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
//例如你的main方法的application是xxxApplication.java,classes就要等于xxxApplication.class
@SpringBootTest(classes = SpringBootJpaApplication.class)
public class UserinfoRepositoryTest {
}

编写测试方法:


  • 新建一个方法 save(),测试向数据库中添加数据,代码用法已在注释中表明;
package cn.itlaobing.web.repository;
import cn.itlaobing.SpringBootJpaApplication;
import cn.itlaobing.web.entity.Userinfo;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootJpaApplication.class)
public class UserinfoRepositoryTest {
/*
* 添加
@Autowired
* 自动注入UserinfoRepository
* */
@Autowired
private UserinfoRepository userinfoRepository;
/*
* 向数据库中增加一条数据
*
@Test 代表这是一个测试方法
* */
@Test
public void save(){
//创建对象并实例化
Userinfo userinfo = new Userinfo();
userinfo.setUsername("admin");
userinfo.setUserpass("123456789");
//调用JPA中的save方法,向数据库中增加一条数据,返回一个对象
Userinfo us = userinfoRepository.save(userinfo);
//断言
Assert.assertEquals(us.getUsername(),"admin");
}
}

执行这个方法:

这里写图片描述

测试结果:
这里写图片描述
查看数据库是否成功增加一条数据:
这里写图片描述
数据已经成功保存到数据库里面了。


  • 在新建一个delete()方法,测试删除数据库中的数据,代码用法已在注释中表明
package cn.itlaobing.web.repository;
import cn.itlaobing.SpringBootJpaApplication;
import cn.itlaobing.web.entity.Userinfo;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootJpaApplication.class)
public class UserinfoRepositoryTest {
/*
* 添加
@Autowired
* 自动注入UserinfoRepository
* */
@Autowired
private UserinfoRepository userinfoRepository;
/*
* 删除数据库的一条数据
* */
@Test
public void delete(){
//调用delete方法,根据id删除
userinfoRepository.delete(1);
}
}

执行删除的方法
这里写图片描述
已成功删除!


  • 由于刚刚删掉了,在改之前,我们需要添加一批数据;我就不在演示添加数据了,直接开始改;
    创建一个update()方法,测试修改数据库中的数据;

但JpaRepository中并没有关于修改的方法,所以需要我们自己创建一个修改的方法;
打开我们自己的UserinfoRepository接口,创建一个修改的方法;

package cn.itlaobing.web.repository;
import cn.itlaobing.web.entity.Userinfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
public interface UserinfoRepository extends JpaRepository<Userinfo,Integer> {
@Transactional
@Modifying
@Query("update Userinfo u set u.userpass = ?1 where u.id = ?2")
int updateById(String userpass,
int id);
}

代码分析:
自定义的修改方法,必须加上
@Transactional 开启事务
@Modifying 修改方法专用注解
这两个注解
@Query(“update Userinfo u set u.userpass = ?1 where u.id = ?2”)
此注解书写JPql语句 其中 Userinfo 是实体类名,userpass 和 id 是实体类的属性名,?1代表是第一个参数 ?2是第二个参数。
测试用例:在测试类中新建一个update()方法,测试更新数据库中的数据,代码用法已在注释中表明

package cn.itlaobing.web.repository;
import cn.itlaobing.SpringBootJpaApplication;
import cn.itlaobing.web.entity.Userinfo;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateCustomizer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootJpaApplication.class)
public class UserinfoRepositoryTest {
/*
* 添加
@Autowired
* 自动注入UserinfoRepository
* */
@Autowired
private UserinfoRepository userinfoRepository;
@Test
public void update(){
userinfoRepository.updateById("admin123",5);
}
}

运行结果:
这里写图片描述


  • 在测试类中新建一个select()方法,测试查询数据库中的数据,代码用法已在注释中表明
package cn.itlaobing.web.repository;
import cn.itlaobing.SpringBootJpaApplication;
import cn.itlaobing.web.entity.Userinfo;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateCustomizer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootJpaApplication.class)
public class UserinfoRepositoryTest {
/*
* 添加
@Autowired
* 自动注入UserinfoRepository
* */
@Autowired
private UserinfoRepository userinfoRepository;
@Test
public void select(){
//第一种查询 返回List集合
List<Userinfo> lists = userinfoRepository.findAll();
for (Userinfo us: lists) {
System.out.println(">>>>>>>>>>>>>>>>>>第一种,用户名是:"+us.getUsername());
}
//第二种查询 根据id 查询
返回实体
Userinfo uinfo = userinfoRepository.findOne(5);
System.out.println(">>>>>>>>>>>>>>>>>>>>>第二种,用户名是"+uinfo.getUsername());
}
}

测试结果:
这里写图片描述

好了,今天的spring-boot jpa 已经讲解完毕了,代码已更新到csdn ,如果有不懂得朋友,欢迎打扰。。。

未完待续。。。

最后

以上就是有魅力大雁为你收集整理的IDEA spring-boot jpa jsp 框架搭建(二)IDEA spring-boot jpa jsp 框架搭建(二)jpa 使用的全部内容,希望文章能够帮你解决IDEA spring-boot jpa jsp 框架搭建(二)IDEA spring-boot jpa jsp 框架搭建(二)jpa 使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部