前言:
目前兄弟们对“springboot mybatis crud”可能比较关怀,大家都想要了解一些“springboot mybatis crud”的相关内容。那么小编也在网络上搜集了一些关于“springboot mybatis crud””的相关内容,希望你们能喜欢,兄弟们一起来学习一下吧!1 简单介绍下JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
2 新建Spring Boot工程和POM依赖以及配置文件
pom.xml
<dependencies> <!-- JPA --> <dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySql driver --><dependency> <groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- lombok --><dependency> <groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 单元测试 --><dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
application.properties
#classnamespring.datasource.driver-class-name=com.mysql.jdbc.Driver#urlspring.datasource.url=jdbc:mysql://localhost:3306/sp_jpa#usernamespring.datasource.username=root#passwordspring.datasource.password=12345#数据库类型spring.jpa.database=MySQL#是否自动生成spring.jpa.generate-ddl=true#每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新spring.jpa.hibernate.ddl-auto=update
工程结构:
3 实体类和DAO层
Student.java
/*** @author 17122*/@Entity@Data@Setter@Getter@Accessors(chain = true)public class Student { @Id @GeneratedValue//ID自动递增 private Long sId; private String sName; private Integer sAge;}
StudentDao.java
/*** @author 17122*/@Repository//JpaRepository < 实体类,主键类型 > public interface StudentDAO extends JpaRepository<Student,Long> { //模糊查询 //nativeQuery = true 表示为原生SQL @Query(value = "select s_id,s_name,s_age from student s where s.s_name like ?1 ", nativeQuery = true) List<Student> findByFirstName(@Param("firstName") String firstName);}4 Service层接口和实现类
StudentService.java
/*** @author 17122*/public interface StudentService { //添加一个 int saveStudent(Student student); //根据Sid查找 Student findStudentBySid(Long sId); //查看全部 List<Student> findAllStudent(); //根据id修改 int updateStudentById(Student student); //根据id删除 void deleteStudentById(Long sId); //根据姓模糊查询 List<Student> findStudentByFirstName(String firstName);}
StudentServiceImpl.java
/*** @author 17122*/@Servicepublic class StudentServiceImpl implements StudentService { @Autowired private StudentDAO studentDAO; @Override public int saveStudent(Student student) { Student save = studentDAO.save(student); return ObjectUtils.isEmpty(save) ? 0 : 1; } @Override public Student findStudentBySid(Long sId) { return studentDAO.findById(sId).get(); } @Override public List<Student> findAllStudent() { return studentDAO.findAll(); }@Overridepublic int updateStudentById(Student student) { Student student1 = studentDAO.saveAndFlush(student); return ObjectUtils.isEmpty(student1) ? 0 : 1;}@Overridepublic void deleteStudentById(Long sId) { studentDAO.deleteById(sId);}@Overridepublic List<Student> findStudentByFirstName(String firstName) { return studentDAO.findByFirstName(firstName+"%");}}5 测试
@SpringBootTestclass SpJpaApplicationTests { @Autowired private StudentService studentService; @Test void saveStudent() { Student student = new Student(); student.setSName("张三") .setSAge(100); studentService.saveStudent(student); } @Test void findStudentById() { Student student = studentService.findStudentBySid(1L); System.out.println(student); } @Test void findAllStudent() { List<Student> students = studentService.findAllStudent(); System.out.println(students); } @Test void updateStudent() { Student student = new Student(); student.setSId(3L) .setSName("张四") .setSAge(10); studentService.updateStudentById(student); } @Test void deleteStudent() { studentService.deleteStudentById(3L); } @Test void findBySome(){ System.out.println(studentService.findStudentByFirstName("张")); }}
可以发现,根据配置文件的spring.jpa.hibernate.ddl-auto=update我们不需要新建数据表,只需要新建数据库就可以了,我们测试下添加操作,然后刷新下数据库:
点开student看下
发现那段配置命令可以帮助我们新建数据表,规则是
数据表名称与实体类名称相同数据表字段将Java中的驼峰命名转化为了下换线命名
可是为什么又多了一张hibernate_sequence表呢?
我们可以点开看下
显然,它是用来表示将要插入下一条数据的ID的
接下来我们可以把每个方法都测试一遍,发现都是可以通过的
6 总结
用了一遍JPA,想说的只有一句话,持久层框架中还是我们中国人开源的Mybatis Plus最好用!