springjpa(一)普通增删改查

springjpa如何搭建,前面的文章已经介绍过了。这一篇介绍下如何进行简单的增删改查。

student表ddl如下

CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`school_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11123 DEFAULT CHARSET=utf8

 

Student.class

package com.vincent.model;


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

@Table(name = "student")
@Entity
public class Student {

    @Id
    @GeneratedValue(
            strategy = GenerationType.IDENTITY
    )
    private long id;

    private String name;

    private int age;

    private long schoolId;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public long getSchoolId() {
        return schoolId;
    }

    public void setSchoolId(Long schoolId) {
        this.schoolId = schoolId;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", schoolId=" + schoolId +
                '}';
    }
}

  

StudentRepository.class

package com.vincent.dao;

import com.vincent.model.Student;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
 * @author 
 * @date 2018/8/17 下午2:09
 */
public interface StudentRepository extends JpaRepository<Student, Long> {

    List<Student> findByNameLike(String name);
   List<Student> findByAgeGreaterThanAndNameEquals(Integer age, String name);
}

  新增

  @Test
    public void testAdd() {
        Student student = new Student();
        student.setAge(12);
        student.setName("abc");
        student.setSchoolId(1L);
        //如果Student在mysql中是自增,但没有加上@GeneratedValue的注解,那么在新增完成后的student1中的id是0,不是自增后的id
        Student student1 = studentRepository.save(student);
        Assert.assertTrue(student1.getId() >= 0);
    }

  正如代码中的注释,新增时有个小注意点:如果entity的id并不是自增,或者id的自增策略并没有体现在entity的id属性上,即没有加@GeneratedValue的注解,那么新增后返回的值的主键是没有新增完后的id的值的。 

   修改

@Test
    public void testUpdate() {
        Student student = new Student();
        student.setAge(121);
        student.setName("cba");
        student.setSchoolId(1L);
        student.setId(111L);
        studentRepository.save(student);
    }

  查询

@Test
    public void testSelect() {
        //like需要在参数中加"%"
        List<Student> studentList = studentRepository.findByNameLike("%a%");
        System.out.println(studentList);
    }

  查询的时候如果用了like,那么参数上记得加上“%”,不然sql查询时是  select 。。。 from 。。。 where  aaa like 'a' 而不是like'%a%'

多条件查询

    @Test
    public void testSelect1(){
        List<Student> studentList = studentRepository.findByAgeGreaterThanAndNameEquals(22,"cba");
        System.out.println(studentList);
    }

  这种方式优点很明显,缺点也很明显。优点就是代码简单,只需要在Repository类中新增一条List<Student> findByAgeGreaterThanAndNameEquals(Integer age, String name);即可。缺点也很致命,这种方式的多条件,必须传多个参数,比如前台页面只传了个name,并不需要age的相关条件。那么他就不满足了。

  所以为了应对这种查询,下一篇中介绍一个可灵活应对多条件查询的方法。

 

posted on 2018-08-21 16:14  幽人月  阅读(2515)  评论(0编辑  收藏  举报