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的相關條件。那么他就不滿足了。
所以為了應對這種查詢,下一篇中介紹一個可靈活應對多條件查詢的方法。
