一. 故事背景
最近有已经工作的学员跟文哥聊天,说他刚进公司,人生地不熟,每天工作都是战战兢兢,如履薄冰。本来他觉得自己用的最6的技术就是文哥教给他的Mybatis了,本以为靠着Mybatis就可以养家糊口,赚点血汗钱了。结果发现大家用的都是Spring Data JPA!!!他顿时虎躯一震,菊花一紧,赶紧跑来问文哥,要不要跑路,另找下家???
这还得了,难道就因为小小的一个JPA不会用就想跑路?顿时气的文哥差点喷出一口老血!待冷静过后,思考再三,文哥认为既然外面还是有企业在用Spring Data JPA的,所以在这里文哥就普及一下Spring Data JPA的基本使用。
二. JPA简介
那啥是Spring Data JPA呢?
我们来翻看一下Spring的官网,Spring Data JPA是Spring Data家族的一部分,作者的初衷是想开发者通过Spring Data JPA的使用来极大的简化对数据持久层的开发。好了,废话不多说,我们直接开始盘它!!!
三. 创建Maven项目
我们直接创建一个基于Springboot的Maven工程。
1. 引入相关依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
看到没有,文哥在pom.xml文件里面引入了lombok依赖,建议小伙伴把这个插件下载下来,用起来真的美滋滋~~~
2. 编写启动器
@SpringBootApplication
**public** **class** **SpringDataJpaApplication** {
**public** **static** **void** **main**(String[] args) {
SpringApplication.run(SpringDataJpaApplication.**class**,**args**);
}
}
3. 编写application.yml配置文件
server:
port: 8071
spring:
application:
name: service-user
datasource:
driver-**class**-**name**: **com**.**mysql**.**jdbc**.**Driver**
**url**: **jdbc**:**mysql**://192.168.10.139:3306/**jpa**
**username**: **root**
**password**: **Admin123**!
**type**: **com**.**alibaba**.**druid**.**pool**.**DruidDataSource**
**jpa**: #**springdataJpa**配置
**properties**:
**hibernate**:
**hbm2ddl**:
**auto**: **update** #**jpa**自动创建数据表,如果表已经存在,则不再创建
**dialect**: **org**.**hibernate**.**dialect**.**MySQL5InnoDBDialect** #指定数据表引擎 **InnoDB**
4. 编写pojo实体类
@Entity(name = "user")//实体类和数据表的对应关系
@Data //不用写get set方法了
**public** **class** **User** {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键自增长
**private** Integer uid;//主键
**private** String username;//用户名
**private** String password;//密码
**private** String telephone;//手机号
}
注意:这里有很多注解,文哥在这里给大家解释一下:
- @Data: 给实体类加get/set/toString/Equals AndHashCode方法,是lombok的注解。
- @Entity:指定当前类是实体类。
- @Id: 指定当前字段是主键。
- @GeneratedValue:指定当前主键的生成方式。
文哥解释之后,这几个注解理解起来是不是就非常简单了呢?
pojo实体编写完成以后,你就可以启动你的项目了,此时你会发现非常有意思的事情,当你打开数据库,你会发现:
你发现,Spring Data JPA会根据实体类帮助我们自动的生成数据表!!!是不是很方便。
5. 编写dao接口
这里便是整个spring-data-jpa中最令人虎躯一震的地方!令人震惊!!!一个接口居然可以实现常用的所有操作!(是不是和mybatisplus有点类似???)
**public** **interface** **UserDao** **extends** **JpaRepository**<**User**, **Integer**> {
}
你以为我们的杰作才开始吗?不,已然结束了。
至此我们就可以看到,这个接口继承了JpaRepository<实体,ID>,spring-data-jpa只需要这个信息,就可以帮你完成常用的操作:增删查改。
今天文哥就不再具体讲解JpaRepository中所包含的所有方法了,这里只把最简单的增删查改来给大家介绍一下,如果你想了解更多,可以来线下班里找文哥。
6. 编写service
**public** **interface** **UserService** {
**public** **void** **addUser**(User user);
**public** **void** **updateUser**(User user);
**public** **void** **deleteUserById**(Integer id);
**public** User **findUserById**(Integer id);
**public** List<User> **findAll**();
}
@Service
**public** **class** **UserServiceImpl** **implements** **UserService** {
@Autowired
UserDao userDao;
@Override
**public** **void** **addUser**(User user) {
userDao.save(user);
}
@Override
**public** **void** **updateUser**(User user) {
userDao.save(user);
}
@Override
**public** **void** **deleteUserById**(Integer id) {
userDao.deleteById(id);
}
@Override
**public** User **findUserById**(Integer id) {
**return** userDao.findById(id).get();
}
@Override
**public** List<User> **findAll**() {
**return** userDao.findAll();
}
}
进行到这里,我们的代码就基本编写完毕了,最后看看项目的整体目录结构:
8.编写测试类进行测试
@RunWith(SpringJUnit4ClassRunner.**class**)
@**SpringBootTest**(**classes** = SpringDataJpaApplication.**class**)
**public** **class** **TestSpringDataJpa** {
@Autowired
UserService userService;
/**
* 新增的方法
*/
@Test
**public** **void** **test01**(){
User user = **new** User();
user.setUsername("kobe");
user.setPassword("kobe24");
user.setTelephone("13333333333");
userService.addUser(user);
}
/**
* 根据id查询的方法
*/
@Test
**public** **void** **test02**(){
User user = userService.findUserById(1);
System.out.println(user);
}
/**
* 修改的方法
*/
@Test
**public** **void** **test03**(){
User user = **new** User();
user.setUid(4);
user.setPassword("admin");
user.setUsername("Mourinho");
user.setTelephone("16666567890");
userService.updateUser(user);
}
/**
* 查询所有数据的方法
*/
@Test
**public** **void** **test04**(){
List<User> userList = userService.findAll();
userList.forEach(user->{
System.out.println(user);
});
}
@Test
**public** **void** **test05**(){
userService.deleteUserById(3);
}
}
最后经过文哥亲测,没有问题,大家可以亲自测试一下。好了,今天的Spring Data JPA,文哥就给大家介绍到这里,是不是非常简单?你以后不会因为这个不会再跑路了吧?所以小伙伴们以后工作中遇到不会的问题,千万不要想着跑路,只要你肯钻研,办法总是有的。
版权归原作者 千锋教育官方 所有, 如有侵权,请联系我们删除。