SpringData 第二章:繼承PagingAndSortingRepository進行分頁開發

一、pom.xml配置

<!--Mysql 驅動包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-jpa</artifactId>
			<version>1.11.6.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>5.2.9.Final</version>
		</dependency>
		<!-- 添加阿里巴巴數據源支持 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.12</version>
		</dependency>

二、SpringData.xml配置

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
        
        <!-- 掃描包 -->
		<context:component-scan base-package="com.mingde" />
		 <!-- 定義數據源(阿里巴巴得魯伊) com.alibaba.druid.pool.DruidDataSource"  -->
		<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
			<property name="driverClassName" value="com.mysql.jdbc.Driver" />
			<property name="url" value="jdbc:mysql:///SpringData" />
			<property name="username" value="root" />
			<property name="password" value="123" />
		</bean>
		<!-- 配置實體管理工廠   定義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" />
			</property>
			<!--  定義實體掃描器   -->
			<property name="packagesToScan" value="com.mingde" />
			<!-- 定義一系列的JPA屬性 -->
			<property name="jpaProperties">
				<props>
					<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
					<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
					<prop key="hibernate.show_sql">true</prop>
					<prop key="hibernate.format_sql">true</prop>
					<prop key="hibernate.hbm2ddl.auto">update</prop>
				</props>
			</property>
		</bean>
		<!-- 定義是我管理器 -->
		<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
			<property name="entityManagerFactory" ref="entityManagerFactory" ></property>
		</bean>
		<!-- 定義註解事務驅動 -->
		<tx:annotation-driven transaction-manager="transactionManager" />
		<!-- 定義jpa:repositories -->
		<jpa:repositories base-package="com.mingde" entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
		
</beans>

三、實體類

package com.mingde.po;

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

@Entity
public class Student {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int sid;
	private String sname;
	private String sex;
	private int age;
	private String addr;


四、Dao層定義

package com.mingde.dao;

import org.springframework.data.repository.PagingAndSortingRepository;

import com.mingde.po.Student;

//繼承該接口即可,若有自定義的方法就寫上去
//繼承該接口,可以使用該接口裏面內定的方法,可及繼承該接口的父接口CrudRepository,一般用這個子接口,因爲子接口擁有父類的所有非私有的方法
public interface StudentDao extends PagingAndSortingRepository<Student, Integer> {
	//這裏可以寫自定義的方法,因爲該接口沒有修改的方法,所以需要自己手動寫
	@Modifying
	@Query("update Student st set st.sname=:sname,st.saddr=:saddr where st.sid=:sid")
	public void update(@Param("sname")String sname,
					   @Param("saddr")String saddr,
					   @Param("sid")int sid) throws Exception;
	
}

PagingAndSortingRepository接口的2個方法



PagingAndSortingRepository接口繼承CrudRepository接口




CrudRepository接口中的方法



所以繼承接口PagingAndSortingRepository就可以用以上全部的方法


五、Service層定義

package com.mingde.servier;

import java.util.List;

import javax.annotation.Resource;

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 com.mingde.dao.StudentDao;
import com.mingde.po.Student;

@Service
public class StudentServier  {

	@Resource(name="studentDao")
	StudentDao sd;
	
	@Autowired
	private StudentDao studentDao;
	
	//分頁查詢
	public Page<Student> findAll(Pageable pageable) throws Exception{
		return studentDao.findAll(pageable);
	}
	
	//查詢所有學生信息
	public List<Student> findAll()throws Exception{
		return (List<Student>) sd.findAll();
	}
	//根據id編號查詢學生信息
	public Student findOne(int id)throws Exception{
		return sd.findOne(id);
	}
	//添加學生信息
	public void save(Student st)throws Exception{
		sd.save(st);
	}
	//根據id刪除學生信息
	public void delete(int id)throws Exception{
		sd.delete(id);
	}
	//根據id判斷該學生是否存在
	public boolean exists(int id)throws Exception{
		return sd.exists(id);
	}
	
}


六、測試類

package com.mingde.test;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import com.mingde.po.Student;
import com.mingde.servier.StudentServier;

public class StudentTest {

	private ApplicationContext ac;
	private StudentServier ss;
	@Before
	public void tearDown() throws Exception {
		ac=new ClassPathXmlApplicationContext("SpringData.xml");
		ss=ac.getBean(StudentServier.class);
	}

	@Test
	public void test() throws Exception {
		/*
		//查詢所有學生信息
		List<Student> findAll = ss.findAll();
		System.out.println(findAll);
		
		//根據學生id查詢學生信息
		Student findOne = ss.findOne(1002);
		System.out.println(findOne);
		
		//添加學生信息
		Student st=new Student("史迪奇", "男", 10, "迪尼斯");
		ss.save(st);
		System.out.println("添加成功");
		
		//刪除指定id學生信息
		ss.delete(1004);
		System.out.println("刪除成功");
		
		//根據id判斷該學生是否存在
		boolean exists = ss.exists(1003);
		System.out.println("該學生存在?:"+exists);*/
		
	}
	//分頁效果
	@Test
	public void tes2t() throws Exception {
		Pageable pageable = new PageRequest(1,3);
		Page<Student> stud = ss.findAll(pageable);
		//下面查看分頁的一系列數據
		int page = stud.getNumber();
		System.out.println("當前頁碼:" + (page + 1));
		int records = stud.getNumberOfElements();
		System.out.println("當前頁記錄數:" + records);
		int size = stud.getSize();
		System.out.println("每一頁的記錄數:" + size);
		long totalRecords = stud.getTotalElements();
		System.out.println("總記錄數:" + totalRecords);
		int totalPages = stud.getTotalPages();
		System.out.println("總頁數:" + totalPages);
		List<Student> list = stud.getContent();
		System.out.println("當前頁的數據:" + list);
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章