SpringDataJPA通过实现接口(代理的形式)进行简单的CRUD

一  SpringDataJPA通过接口实现简单的CRUD操作

首先 需要在dao层实现JpaRepository ,JpaSpecificationExecutor接口

 

/*
* 符合SpringDatajpa的dao层接口规范
*JpaRepository<操作的实体类类型,实体类中主键属性的类型>
    *封装了基本的CRUD操作
 JpaSpecificationExecutor<操作的实体类类型>
    *封装了复杂查询操作(分页)
* */

public interface CustomerDao  extends JpaRepository, JpaSpecificationExecutor 
{

}

接下来是对于CRUD以及一些简单方法的测试:


@RunWith(SpringJUnit4ClassRunner.class)//声明spring提供的单元测试环境
@ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器配置信息
public class CustomerDaoTest {


    @Autowired
    private CustomerDao customerDao;


  //  查询操作

    /*
    *
    * 根据id进行查询(立即加载)
    * */
    @Test
    public void testFindOne()
    {
      Customer customer= customerDao.findOne(3l);
        System.out.println(customer);
    }

     /*
     * 根据id为从数据库查询(延迟加载)
     * @Transactional:保证getOne正常运行

     * */
    @Test
    @Transactional
    public void testGetOne()
    {
        Customer customer=customerDao.getOne(4l);
        System.out.println(customer);

    }
    

   //  修改 保存操作


    /*
    *
    * save : 保存或者更新
    *       根据传递的对象是否存在主键id
    *       如果没有id主键属性:保存
    *       存在id主键属性,根据id查询数据,更新数据
    *
    * */
    @Test
    //保存或者更新
    public void testSave()
    {
        Customer customer=new Customer();
        customer.setCustName("黑马程序员");
        customer.setCustLevel("vip");
        customer.setCustIndustry("it教育");
        customerDao.save(customer);
    }


    //跟新数据
    @Test
        public void testUpdate()
    {

        Customer customer=new Customer();
        //更新数据之前需要先查询一遍数据
        customer= customerDao.findOne(4l);
        customer.setCustId(4l);
        customer.setCustName("黑马程序猿aa");
        customerDao.save(customer);
    }


   //删除操作

    //删除数据
    @Test
    public void testDelete()
    {
        customerDao.delete(3l);
    }
}

二 查询用户数量(总条数)

 /*
     *
     * 测试统计查询,查询客户的总数量
     *     count:统计总条数
     *
     * */
    @Test
    public  void  testCount()
    {
        long count = customerDao.count();
        System.out.println(count);

    }

三  判断该用户是否存在

 /*
     *
     *    2.半段数据库中id为4的客户的数量
     *      如果数量为0,代表不存在返回false,如果大于0,代表存在返回true
     * */
    @Test
    public void testExie()
    {
     boolean exists=   customerDao.exists(2l);
        System.out.println("id为4的客户是否存在"+exists);

    }

原理:

   1.通过JdkDynamicAopProxy的invoke方法创建了一个动态代理对象
            2.SimpleJpaRepository当中封装了JPA的操作(借助JPA的api完成数据库的CRUD)
            3.通过hibernate完成数据库操作(封装了jdbc)

 

 

 

你可能感兴趣的:(章标签:SpringData)