Spring Boot整合Spring Data

之前打算把Spring Data的整合放在前面给大家分享和交流,但实际操作的时候觉得这块的知识虽然和之前的jpa有相似之处但用下来发现还是不一样就找了Spring Data的视频和资料学了一遍,就像之前说的学习Spring Boot需要懂得Spring体系的框架。


一  推荐使用的学习资料

尚硅谷系列教程:http://www.atguigu.com/download.shtml#springdata

教程讲的还是比较详细,基础不要太差都能快速上手


二  依赖的引入

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


三 主配置文件配置

#DataBase DataSources
spring.datasource.url = jdbc:mysql://localhost:3306/springboot
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

四  接口和实体类

package com.debug.pojo;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="member")
public class Member {

	private int id;
	private String name;
	private String address;
	private int age;
	private String phone;
	private String email;
	private Date birthday;
	
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

Repository的写法需要按照Spring data的标准规范来写,可以使用SpringData的方法定义规范、注解@QUery(配合@Modifying)、以及Springdata提供的JpaRepository、CrudRepository等


package com.debug.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;

import com.debug.pojo.Member;

public interface MemberRepository extends CrudRepository<Member,Integer>,JpaSpecificationExecutor<Member>{
   
    //单条件精确查询
    public Member findById(int id);
   
   //多条件精确查询
   public List<Member> getByAgeAndAddress(int age ,String address);
   
   //模糊查询1
   public List<Member> readByNameLike(String name);
   
   //模糊查询2
   public List<Member> readByNameStartingWith(String name);
   
   //in查询
   //public List<Member> readByIdIn(List<Integer> ids);
   public List<Member> readByIdIn(int[] ids);
   
    //带排序条件的in查询
   public List<Member> readByIdInOrderByIdDesc(int[] ids);
   
   @Query("select m from Member m where m.name like %:name%")
   public List<Member> getMemberInfoByName(@Param("name")String name);
   
   @Query(value="select m.* from member m where m.name=:name and age>=30",nativeQuery=true)
   public List<Member> getMemberInfoByNameAndAge(@Param("name")String name);
   
   @Modifying
   @Query("update Member m set m.name=:name where m.id=:id")
   public void updateMemberById(@Param("name")String name,@Param("id")int id) ;
   
   @Modifying
   @Query("delete from Member m  where m.id=:id")
   public void deleteMemberById(@Param("id")int id) ;
	   
   
   
   
}


五  service和controller


package com.debug.service;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.debug.dao.MemberRepository;
import com.debug.pojo.Member;

@Service
public class MemberService {
	
	@Resource
	private MemberRepository memberRepository;
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void updateMemberById(String name,int id) {
		memberRepository.updateMemberById(name, id);
	}
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void deleteMemberById(int id) {
		memberRepository.deleteMemberById( id);
	}
	
	public Member findById(int id) {
		return memberRepository.findById(id);
	}
	
	public List<Member> readByIdInOrderByIdDesc(int[] ids){
		return memberRepository.readByIdInOrderByIdDesc(ids);
	}
	
	public Page<Member> pagingAndSortingMember(int id){
		
		
		Order o1=new Order(Direction.DESC,"id");
		Sort sort=new Sort(o1);
	    
		PageRequest pg=new PageRequest(0,5,sort);
		
		Specification<Member> sp=new Specification<Member>() {

			
			public Predicate toPredicate(Root<Member> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
				Path path=root.get("id");
				Predicate p=builder.gt(path, id);
				return p;
			}
			
		};
	
		Page<Member> result=memberRepository.findAll(sp, pg);
		
		/*System.out.println("总页数"+result.getTotalPages());
		System.out.println("总记录数"+result.getTotalElements());
		System.out.println("当前页"+(result.getNumber()+1));
		
		System.out.println("数据"+result.getContent());*/
		
		
		return result;
		
	}
}

service只是挑了几个用到的方法,其他方法大家自己研究一下,都是体力活没什么难度

package com.debug.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.debug.pojo.Member;
import com.debug.service.MemberService;

@RestController
@RequestMapping("/member")
public class MemberController {
	
	@Resource
	private MemberService memberService;
  
	@RequestMapping("/findById")
	public Member findById() {
		Member m=memberService.findById(1);
		return m;
	}
	@RequestMapping("/readByIdInOrderByIdDesc")
	public List<Member> readByIdInOrderByIdDesc(){
		int[] ids= {1,4,5};
		return memberService.readByIdInOrderByIdDesc(ids);
	}
	@RequestMapping("/updateMemberById")
	public String updateMemberById() {
		memberService.updateMemberById("何润东", 1);
		return "数据修改成功";
	}
	@RequestMapping("/pagingAndSortingMember")
	public Page<Member> pagingAndSortingMember(){
		return memberService.pagingAndSortingMember(1);
	}
}

至此Spring Data的开发学习交流就告一段落了,根据这段时间的学习总结得出这个技术还是比较适合有一定工作经验的开发人员学习,要想学好Spring Boot需要扎实的Spring功底,如果开发经验不足可以放到后面一点进行学习。 害羞


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值