SpringData——HelloWorld

1、背景

最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西。从hibernate到ibatis、mybatis,也许他只不过是spring想整合一个更方便的orm实现吧。

NoNoNo!!!

SpringData是希望提供一个统一的数据访问层的编程模型。

如何理解呢?

就拿SpringData中一个典型项目Spring Data MongoDB来说吧。之前我们用的hibernate、mybatis都是对应的关系型数据库,CRUD的封装也只是在这个前提之下进行的。

而对于非关系型数据库来说,比如MongoDB,它也有相应的CRUD的操作,但在项目中,我们还需要另外封装一套。这样做确实挺麻烦的,如果能够统一解决就最好了。Sprint Data MongoDB就是从这样的角度出发的,他不再区分关系型非关系型数据库,而是把数据访问这一部分封装成一个模式。

2、实例

1)、引入jar包

<!-- spring data -->
         <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Hopper-SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.1.RELEASE</version>
        </dependency>

2)、根据实体生成表

@Entity
public class Employee {
    @Id
    @GeneratedValue
    private  Long id;
    private String firstName, lastName, description;

    private Employee() {
    }

    public Employee(String firstName, String lastName, String description) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.description = description;
    }

    //getter和setter方法略
}

添加配置信息:
spring.jpa.show-sql= true
spring.jpa.hibernate.ddl-auto=update

3)、新建dao的接口

public interface EmployeeRepository extends CrudRepository<Employee,Long>{

    Employee findByFirstName(String firstName);

}

EmployeeRepository 继承自CrudRepository,CrudRepository使用泛型的方式提供了基本的数据操作方法。

public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S entity);
    boolean exists(ID id);
    Iterable<T> findAll();
    void delete(ID id);
    ……
}

4)、Service接口

EmployeeService

public interface EmployeeService  {
    Employee findByFirstName(String firstName);
    Employee saveEmployee(Employee employee);   
}

EmployeeServiceImpl

@Service
public class EmployeeServiceImpl implements EmployeeService {

    //注入dao
    @Autowired
    private EmployeeRepository employeeRepository;

    @Override
    public Employee findByFirstName(String firstName) {
        return employeeRepository.findByFirstName(firstName);   
    }

    @Override
    public Employee saveEmployee(Employee employee) {
        return employeeRepository.save(employee);    
    }
}

5)、测试
在Controller中编写方法:

//插入数据
    @RequestMapping("/add")
    public Employee addByData(){
        return employeeService.saveEmployee(new Employee("Sherry","yang","员工"));
    }
    //根据firstName查询
   @RequestMapping("/queryByfirstName")
    public List<Employee> query(){
       return employeeService.findByFirstName("Sherry");
    }

3、关键字

通过上面的小demo,可以看出,使用springData来实现简单的CRUD,比通用mapper还要方便呢,尤其在复杂查询上更为明显。这都要归功于SpringData的一大创新,查询关键字。

以上面的findByFirstName为例,我们需要遵循一定的约定,这样才能更好的使用他。

下面列举了一小部分关键字:

KeywordSpring DataJPQL snippet
AndfindByLastnameAndFirstnamewhere x.lastname = ?1 and x.firstname = ?2
OrfindByLastnameOrFirstnamewhere x.lastname = ?1 or x.firstname = ?2
LessThanfindByAgeLessThanwhere x.age < ?1
OrderByfindByAgeOrderByLastnameDescwhere x.age = ?1 order by x.lastname desc
Is,EqualsfindByFirstnameIs,findByFirstnameEqualswhere x.firstname = ?1

至于SpringData对于关系型和非关系型数据库的数据访问封装,我们下篇再继续聊。

转载于:https://www.cnblogs.com/saixing/p/6730192.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值