访问官网,在Dependencies中选择SpringBoot自身、LomBok的依赖、Spring Web模块、Spring Data JPA以及MySQL驱动依赖,这样点击generate按钮的时候会生成项目,并在项目中的pom文件中加入这些依赖。
既然我们用到了SpringData JPA和MySQL,我们得为其进行配置最基础的信息。比如说数据库的用户名和密码,相对应的库,以及SpringData JAP的策略。官网原生的是application.properties文件的,我改了一下后缀,我比较喜欢yml格式。
#服务器端口配置
server:
port: 8100
#数据库配置,数据库需要你自己提前建好表
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/learn?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
# JPA配置
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true #控制台显示sql语句
format_sql: true #规范化控制台显示的sql语句(换行了更美观)
UserController调用service的方法
@RestController
public class UserController {
@Autowired
UserService userService;
/**
* 获取所有用户(JPA)
*/
@GetMapping(value = "/user", produces = {"application/json;charset=UTF-8"})
public void getAllUser () {
List<User> allUser = userService.getAllUser();
for (User user : allUser) {
System.out.println(user);
}
}
/**
* 获取所有用户(使用原生sql)
*/
@GetMapping(value = "/userNative", produces = {"application/json;charset=UTF-8"})
public void getAllUserNative () {
List<User> allUser = userService.getAllUserNative();
for (User user : allUser) {
System.out.println(user);
}
}
/**
* 分页
*/
@GetMapping(value = "/pagedQueryUser", produces = {"application/json;charset=UTF-8"})
public void pagedQueryUser (@RequestParam(value = "pageNum") Integer pageNum,
@RequestParam(value = "pageLimit") Integer pageLimit) {
Page<User> allUser = userService.pagedQueryUser(pageNum,pageLimit);
for (User user : allUser) {
System.out.println(user);
}
}
}
// 接口
public interface UserService {
List<User> getAllUser();
List<User> getAllUserNative();
Page<User> pagedQueryUser(Integer pageNum, Integer pageLimit);
}
// 实现
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> getAllUser() {
return userRepository.findAll(); //为啥会有findAll()方法?因为我们的UserRepository 继承了JpaRepository
}
@Override
public List<User> getAllUserNative() {
return userRepository.findAllNative();
}
@Override
public Page<User> pagedQueryUser(Integer pageNum, Integer pageLimit) {
//sort日后可以配活,按照哪个字段升序还是降序
Sort sort = Sort.by(Sort.Order.desc("userId"));
Pageable pageable = PageRequest.of(pageNum - 1, pageLimit, sort);
return userRepository.findAll(pageable);
}
}
因为我们有了LomBok的Data注解,并且在IDEA已经下好的LomBok的插件,所以我们可以不用写set、get方法。
@Entity // jpa的注解,需要加
@Table(name = "users") // 指定数据库的表名
@Data // lombok
public class User {
/*
主键生成策略
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
*/
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="userID")
private Integer userId;
@Column(name="userName")
private String userName;
@Column(name="password")
private String password;
}
UserRepository是dao层的东西了,相当于UserDao/UserMapper,只是叫法不一样而已。比如在Struts2喜欢将名字取成xxxAction,而在SpringMVC喜欢将名字取成xxxxController。
一般地,我们将UserRepository继承JpaRepository就可以有对应的增删改查方法,原因如下:
@Repository
public interface UserRepository extends JpaRepository<User, String> {//为啥我们传入,看一下源码就能了解
//在JPA中也能执行原生的SQL,具体参考https://blog.csdn.net/lovequanquqn/article/details/83501121
@Query(value = "select * from users",nativeQuery = true)
List<User> findAllNative();
}
进入JpaApplication(依据官网Artifact命名是Jpa,所以是JpaApplication),右键,启动我们的SpringBoot项目:
在浏览器输入我们的url: http://localhost:8100/user。
然后我们从后台查看,有打印出查询的SQL语句和表中数据。
其他几个接口同理。
https://github.com/ruoxiyun/jpa