002_Spring Data JPA CRUD

本文介绍了如何在Java项目中使用Spring Data JPA进行CRUD操作,包括创建User实体、Repository接口、Service接口和实现,以及JUnit单元测试的集成。涵盖了添加、批量添加、查询、更新和删除用户实例的功能演示。

1. 创建一个名为spring-data-jpa-crud的Java项目, 同时添加相关jar包, 并添加JUnit能力。

2. 查看CrudRepository接口下的方法, 我们使用红色框中的方法。

3. 新建User.java

package com.bjbs.pojo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.format.annotation.DateTimeFormat;

@Entity // 指定该类是实体类
@Table(name = "user") // 指定数据库表名(表名和实体类对应)
public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id // 指定为主键
	@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略
	@Column(name = "id") // 指定表中列名(列名和属性名对应)
	private Integer id;

	@Column(name = "name")
	private String name;

	@Column(name = "sex")
	private String sex;
	
	@Column(name = "birthday")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date birthday;

	@Column(name = "address")
	private String address;

	public User() {
	}

	public User(String name, String sex, Date birthday, String address) {
		this.name = name;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}

	public User(Integer id, String name, String sex, Date birthday, String address) {
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address
				+ "]";
	}
}

4. 新建UserRepository.java

package com.bjbs.dao;

import org.springframework.data.repository.CrudRepository;
import com.bjbs.pojo.User;

/**
 * 参数一T: 当前需要映射的实体; 参数二 T: 当前映射的实体中的id的类型
 */
public interface UserRepository extends CrudRepository<User, Integer> {

}

5. 新建UserService.java

package com.bjbs.service;

import com.bjbs.pojo.User;

public interface UserService {
	User save(User user);

	Iterable<User> save(Iterable<User> users);
	
	User findOne(Integer id);
	
	Iterable<User> findAll();

	void delete(Integer id);

	void delete(User user);

	void delete(Iterable<User> users);
}

6. 新建UserServiceImpl.java

package com.bjbs.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.bjbs.dao.UserRepository;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;

@Service
@Transactional
public class UserServiceImpl implements UserService {
	@Autowired
	private UserRepository userRepository;

	@Override
	public User save(User user) {
		return userRepository.save(user);
	}

	@Override
	public Iterable<User> save(Iterable<User> users) {
		return userRepository.save(users);
	}

	@Override
	public User findOne(Integer id) {
		return userRepository.findOne(id);
	}

	@Override
	public Iterable<User> findAll() {
		return userRepository.findAll();
	}

	@Override
	public void delete(Integer id) {
		userRepository.delete(id);
	}

	@Override
	public void delete(User user) {
		userRepository.delete(user);
	}

	@Override
	public void delete(Iterable<User> users) {
		userRepository.delete(users);
	}
	
}

7. 新建TestUserRepository.java

package com.bjbs.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestUserRepository {
	@Autowired
	private UserService userService;
	
	/**
	 * 添加
	 */
	@Test
	public void addOne() {
		User user = new User("曹整", "男", new Date(), "河南省开封市");
		User userDb = userService.save(user);
		System.out.println(userDb);
	}
	
	/**
	 * 批量添加
	 */
	@Test
	public void addMore(){
		User caoShuo = new User("曹铄", "男", new Date(), "河南省开封市");
		User qingHe = new User("清河公主", "女", new Date(), "河南省开封市");
		List<User> users = new ArrayList<User>();
		users.add(caoShuo);
		users.add(qingHe);
		Iterable<User> usersDb = userService.save(users);
		for (User user : usersDb) {
			System.out.println(user);
		}
	}
	
	/**
	 * 根据id查询
	 */
	@Test
	public void findOne() {
		User userDb = userService.findOne(40);
		System.out.println(userDb);
	}
	
	/**
	 * 更新
	 */
	@Test
	public void update(){
		User userDb = userService.findOne(56);
		System.out.println(userDb);
		userDb.setAddress("河南省郑州市");
		userDb = userService.save(userDb);
		System.out.println(userDb);
	}
	
	/**
	 * 查询所有
	 */
	@Test
	public void findAll(){
		Iterable<User> usersDb = userService.findAll();
		for (User user : usersDb) {
			System.out.println(user);
		}
	}
	
	/**
	 * 根据id删除
	 */
	@Test
	public void deleteById(){
		userService.delete(50);
	}
	
	/**
	 * 根据用户删除, 必须设置主键id
	 */
	@Test
	public void deleteByUser(){
		User user = new User();
		user.setId(56);
		userService.delete(user);
	}
	
	/**
	 * 根据用户删除
	 */
	@Test
	public void deleteByUsers(){
		User user1 = new User();
		user1.setId(45);
		User user2 = new User();
		user2.setId(46);
		List<User> users = new ArrayList<User>();
		users.add(user1);
		users.add(user2);
		userService.delete(users);
	}
}

8. 在src下新建application.properties

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.25.138:3306/StudyMybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lyw123456

9. 在src下新建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	<!-- 配置读取properties文件的工具类 -->
	<context:property-placeholder location="classpath:application.properties" />

	<!-- 配置c3p0数据库连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${spring.datasource.url}" />
		<property name="driverClass" value="${spring.datasource.driverClassName}" />
		<property name="user" value="${spring.datasource.username}" />
		<property name="password" value="${spring.datasource.password}" />
	</bean>

	<!-- Spring整合JPA 配置EntityManagerFactory -->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<!-- hibernate相关的属性的注入 -->
				<!-- 配置数据库类型 -->
				<property name="database" value="MYSQL" />
				<!-- 正向工程 自动创建表 -->
				<!-- <property name="generateDdl" value="true" /> -->
				<!-- 显示执行的SQL -->
				<property name="showSql" value="true" />
			</bean>
		</property>
		<!-- 扫描实体的包 -->
		<property name="packagesToScan">
			<list>
				<value>com.bjbs.pojo</value>
			</list>
		</property>
	</bean>

	<!-- 配置Hibernate的事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>

	<!-- 配置开启注解事务处理 -->
	<tx:annotation-driven transaction-manager="transactionManager" />

	<!-- 配置springIOC的注解扫描 -->
	<context:component-scan base-package="com.bjbs.service" />

	<!-- Spring Data JPA 的配置 -->
	<!-- base-package: 扫描dao接口所在的包 -->
	<jpa:repositories base-package="com.bjbs.dao" />
</beans>

10. 数据库user表

11. 测试添加用户方法 

12. 测试批量添加用户方法 

13. 测试根据id查询用户方法 

14. 测试更新用户方法

15. 测试查询所有用户 

16. 测试根据用户id删除用户 

17. 测试根据用户删除用户, 必须设置用户id 

18. 测试批量删除用户 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值