当前位置:首页 >> 硬件技术 >> 【spring data jpa】数据的增删改查(CRUD),索尼t100

【spring data jpa】数据的增删改查(CRUD),索尼t100

cpugpu芯片开发光刻机 硬件技术 1
文件名:【spring data jpa】数据的增删改查(CRUD),索尼t100 【spring data jpa】数据的增删改查(CRUD) 一、添加依赖

在pom文件中添加spring data jpa依赖

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>6.3.1.Final</version></dependency><dependency><groupId>org.apache.derby</groupId><artifactId>derby</artifactId><version>10.14.2.0</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency>

这里使用的是spring data jpa的3.1.4版本,另外引入了hibernate、derby、junit等包

二、创建实体

在src/test/java的cn.horse.chapter01.entity包下创建User实体类

package cn.horse.chapter01.entity;import jakarta.persistence.Entity;import jakarta.persistence.Id;@Entity(name = "T_USER")public class User {@Idprivate String id;private String username;public void setId(String id) {this.id = id;}public String getId() {return id;}public void setUsername(String username) {this.username = username;}public String getUsername() {return username;}}

@Entity:实体表映射,name用于指定表名称

@Id:指定主键

三、创建持久化类

在src/test/java的cn.horse.chapter01.repository包下创建UserRepository持久化类

package cn.horse.chapter01.repository;import cn.horse.chapter01.entity.User;import org.springframework.data.repository.CrudRepository;public interface UserRepository extends CrudRepository<User, String> {}

UserRepository继承CrudRepository类,这样UserRepository类将可以使用父类中提供的CRUD方法;另外继承CrudRepository类需要指定泛型,第一个泛型类型是持久化实体类型,第二个泛型类型是持久化主键类型

四、应用配置

在src/test/java的cn.horse.chapter01.config包下创建ApplicationConfig配置类

package cn.horse.chapter01.config;import jakarta.persistence.EntityManagerFactory;import org.hibernate.cfg.AvailableSettings;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.jdbc.datasource.DriverManagerDataSource;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;import java.util.Properties;@Configuration@EnableJpaRepositories(basePackages = "cn.horse.chapter01.repository")@EnableTransactionManagementclass ApplicationConfig {@Beanpublic DataSource dataSource() {DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();driverManagerDataSource.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");driverManagerDataSource.setUrl("jdbc:derby:demo;create=true");driverManagerDataSource.setUsername("");driverManagerDataSource.setPassword("");return driverManagerDataSource;}@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory() {HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setGenerateDdl(true);vendorAdapter.setShowSql(true);LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);factory.setPackagesToScan("cn.horse.chapter01.entity");factory.setDataSource(dataSource());Properties jpaProperties = new Properties();jpaProperties.put(AvailableSettings.HBM2DDL_AUTO, "create");factory.setJpaProperties(jpaProperties);return factory;}@Beanpublic PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {JpaTransactionManager txManager = new JpaTransactionManager();txManager.setEntityManagerFactory(entityManagerFactory);return txManager;}}

@EnableJpaRepositories:配置可用持久化类,另外我们还配置了持久化类扫描的包路径(cn.horse.chapter01.repository) @EnableTransactionManagement:配置可用事务管理

另外还将数据源(DataSource)、实体管理工厂(EntityManagerFactory)、Jpa事务管理(PlatformTransactionManager)实例注册到Spring容器中。

其中实体管理工厂(EntityManagerFactory)实例的创建由LocalContainerEntityManagerFactoryBean对象完成,LocalContainerEntityManagerFactoryBean对象创建的过程中设置了实体类扫描的包路径(cn.horse.chapter01.entity),属性中还设置了DDL方式(create),此方式会先删除表后再创建新表。

五、启动程序 1、准备数据

在src/test/resources的cn/horse/chapter01目录下创建data.sql脚本

INSERT INTO T_USER(id, username) VALUES('1', '张三'),('2', '李四'),('3', '王五'); 2、单元测试

在src/test/java的cn.horse.chapter01包下创建SpringDataJpaTest测试类

package cn.horse.chapter01;import cn.horse.chapter01.entity.User;import cn.horse.chapter01.repository.UserRepository;import org.junit.Assert;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.core.io.ClassPathResource;import org.springframework.jdbc.datasource.init.ScriptUtils;import javax.sql.DataSource;import java.sql.SQLException;import java.util.Iterator;public class SpringDataJpaTest {static final ApplicationContext applicationContext;static final UserRepository userRepository;static {applicationContext = new AnnotationConfigApplicationContext("cn.horse.chapter01.config");userRepository = applicationContext.getBean(UserRepository.class);try {ScriptUtils.executeSqlScript(applicationContext.getBean(DataSource.class).getConnection(), new ClassPathResource("cn/horse/chapter01/data.sql"));} catch (SQLException e) {throw new RuntimeException(e);}}@Testpublic void testFindAll() {Iterator<User> iterator = userRepository.findAll().iterator();Assert.assertEquals("1", iterator.next().getId());Assert.assertEquals("2", iterator.next().getId());Assert.assertEquals("3", iterator.next().getId());Assert.assertEquals(false, iterator.hasNext());}@Testpublic void testCount() {Assert.assertEquals(3, userRepository.count());}@Testpublic void testInsert() {long historyCount = userRepository.count();User user = new User();user.setId("4");user.setUsername("赵六");userRepository.save(user);Assert.assertEquals(historyCount + 1, userRepository.count());Assert.assertNotNull(userRepository.findById("4").orElse(null));Assert.assertEquals("赵六", userRepository.findById("4").map(User::getUsername).orElse(null));}@Testpublic void testUpdate() {long historyCount = userRepository.count();User user = new User();user.setId("1");user.setUsername("张三2");userRepository.save(user);Assert.assertEquals(historyCount, userRepository.count());Assert.assertNotNull(userRepository.findById("1").orElse(null));Assert.assertEquals("张三2", userRepository.findById("1").map(User::getUsername).orElse(null));}@Testpublic void testDelete() {long historyCount = userRepository.count();userRepository.deleteById("3");Assert.assertEquals(historyCount - 1, userRepository.count());Assert.assertNull(userRepository.findById("3").orElse(null));}}

执行单元测试通过

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接