Spring Data JPA,可以通过声明持久层接口,帮助开发者完成crud的工作
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
建立数据库和实体类
(见上一篇博客)
Repository层
声明Repository
package com.zzf.demo.repository;
import com.zzf.demo.model.ZUser;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Collection;
import java.util.List;
/*
*
*@author:zzf
*@time:2020-11-16
*
*/
public interface ZUserRepository extends JpaRepository<ZUser,String> {
//自定义查询
//通过名字相等查询
List<ZUser> findByName(String name);
//通过名字like查询
List<ZUser> findByNameLike(String name);
//通过主键id集合查询
List<ZUser> findByIdIn(Collection<String> ids);
}
model层
修改实体类为
package com.zzf.demo.model;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/*
*
*@author:zzf
*@time:2020-11-16
*
*/
@Entity
@Table(name = "zuser")
@Data
public class ZUser {
//主键
@Id
private String id;
//用户名
private String name;
//密码
private String password;
}
Service层
package com.zzf.demo.service;
import com.zzf.demo.model.ZUser;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.Collection;
import java.util.List;
/*
*
*@author:zzf
*@time:2020-11-16
*
*/
public interface ZUserService {
//查询
ZUser findById(String id);
List<ZUser> findAll();
//保存和更新
ZUser save(ZUser zUser);
//删除
void delete(String id);
//分页
Page<ZUser> findAll(Pageable pageable);
//通过名字相等查询
List<ZUser> findByName(String name);
//通过名字like查询
List<ZUser> findByNameLike(String name);
//通过主键id集合查询
List<ZUser> findByIdIn(Collection<String> ids);
}
ServiceImpl
package com.zzf.demo.service.impl;
import com.zzf.demo.model.ZUser;
import com.zzf.demo.repository.ZUserRepository;
import com.zzf.demo.service.ZUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
/*
*
*@author:zzf
*@time:2020-11-16
*
*/
@Service
public class ZUserServiceImpl implements ZUserService {
@Autowired
private ZUserRepository zUserRepository;
@Override
public ZUser findById(String id) {
return zUserRepository.findById(id).get();
}
@Override
public List<ZUser> findAll() {
return zUserRepository.findAll();
}
@Override
public ZUser save(ZUser zUser) {
return zUserRepository.save(zUser);
}
@Override
public void delete(String id) {
zUserRepository.deleteById(id);
}
@Override
public Page<ZUser> findAll(Pageable pageable) {
return zUserRepository.findAll(pageable);
}
@Override
public List<ZUser> findByName(String name) {
return zUserRepository.findByName(name);
}
@Override
public List<ZUser> findByNameLike(String name) {
return zUserRepository.findByNameLike(name);
}
@Override
public List<ZUser> findByIdIn(Collection<String> ids) {
return zUserRepository.findByIdIn(ids);
}
}
Pageable需要参数第几页,每页大小,返回结果封装在Page
测试
package com.zzf.demo;
import com.zzf.demo.model.ZUser;
import com.zzf.demo.service.ZUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.util.Assert;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class DemoApplicationTests {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void contextLoads() {
String sql = "select id,name,password from zuser";
List<ZUser> userList = jdbcTemplate.query(sql, new RowMapper<ZUser>() {
@Override
public ZUser mapRow(ResultSet resultSet, int i) throws SQLException {
ZUser user = new ZUser();
user.setId(resultSet.getString("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
return user;
}
});
System.out.println("查询成功:");
for (ZUser user : userList
) {
System.out.println(user.toString());
}
}
@Autowired
private ZUserService zUserService;
@Test
void testRepository() {
//查询所有数据
List<ZUser> userList = zUserService.findAll();
for (ZUser user : userList
) {
System.out.println(user.toString());
}
//通过name查询
List<ZUser> userList2 = zUserService.findByName("小T");
for (ZUser user : userList2
) {
System.out.println(user.toString());
}
Assert.isTrue(userList2.get(0).getName().equals("小T"), "data error!!");
//通过name模糊查询
List<ZUser> userList3 = zUserService.findByName("%小%");
for (ZUser user : userList2
) {
System.out.println(user.toString());
}
//Assert.isTrue(userList2.get(0).getName().equals("小T"),"data error!!");
//通过ID集合查询
List<String> ids = new ArrayList<>();
ids.add("1");
ids.add("2");
List<ZUser> userList4 = zUserService.findByIdIn(ids);
for (ZUser user : userList4
) {
System.out.println(user.toString());
}
//增加数据
ZUser zUser = new ZUser();
zUser.setId("3");
zUser.setName("test");
zUser.setPassword("123");
zUserService.save(zUser);
//分页查询
//PageRequest pageRequest=new PageRequest(0,10);
PageRequest pageRequest = PageRequest.of(1, 2);
Page<ZUser> userList5 = zUserService.findAll(pageRequest);
for (ZUser user : userList5
) {
System.out.println(user.toString());
}
System.out.println(userList5.getTotalPages() + "/" + userList5.getSize());
//删除
zUserService.delete("3");
//分页查询
//PageRequest pageRequest=new PageRequest(0,10);
PageRequest pageRequest2 = PageRequest.of(1, 2);
Page<ZUser> userList6 = zUserService.findAll(pageRequest2);
System.out.println(userList6.getTotalPages() + "/" + userList6.getSize());
}
}