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的相关条件。那么他就不满足了。
所以为了应对这种查询,下一篇中介绍一个可灵活应对多条件查询的方法。