2022.01.08 更新
已更新新版本博客,更新内容很多,因此新开了一篇博客,戳这里。
1 概述
使用Spring Boot
作为后端框架与Android
端配合MySQL
进行基本的交互,包含了最基本的增删查改功能。
2 开发环境
- IDEA 2019.2
- Tomcat 9.0.27
- MySQL 8.0.17
- Spring Boot 2.2.1
- JDK 8
3 后端
3.1 新建一个Spring Boot项目
参考此处。
3.2 实体类
新建User
类作为实体类:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
//getter setter...
}
3.3 持久层
新建UserRepository
实现增删查改:
@Repository
public interface UserRepository extends CrudRepository<User,Integer>
{
@Query(value = "select * from user where name = ?1",nativeQuery = true)
public List<User> findByName(String name);
@Modifying
@Query(value = "delete from user where name = ?1",nativeQuery = true)
public int deleteByName(String name);
}
由于CrudRepository
中已经包含了"增"与"改",所以按需要实现自己的"查"与"删"即可。
CrudRepository
的API
很简单,官方文档。
- "增"使用
save
即可,参数为实体类 - "删"使用
deleteById
,通过主键删除,若不想通过主键删除可以自己编写SQL
,像上面一样 - "查"使用
findAll
或findById
,自定义查找的话需要自己编写SQL
- "改"也可使用
save
,注意需要设置主键
@Query
用于设置SQL语句,nativeQuery
表示使用原生SQL
。
3.4 业务层
@Transactional
@Service
public class MainService {
@Autowired
private UserRepository userRepository;
public Iterable<User> getAllUsers()
{
return userRepository.findAll();
}
public List<User> findByName(String name)
{
return userRepository.findByName(name);
}
public boolean add(String name)
{
User user = new User();
user.setName(name);
userRepository.save(user);
return true;
}
public boolean modify(Integer id,String name)
{
User user = new User();
user.setName(name);
user.setId(id);
userRepository.save(user);
return true;
}
public boolean deleteByName(String name)
{
return userRepository.deleteByName(name) != 0;
}
}
getAllUsers()
:返回所有行,Iterable<E>
类型findByName()
:根据name
返回所有name
相同的行add
直接使用了save
,由于save
返回的是实体类,原本的代码是这样写的:
return userRepository.save(user) != null;
但是文档说了不会为null
,所以只能强制返回true
了。
modify
使用了id
与name
作为参数,新建一个user
,将其作为setter
的参数,然后交给save
deleteByName
使用了自定义的删除函数,返回的是int
,在UserRepository
中这个int
代表SQL
影响的行数,删除成功则行数不为0,删除失败,或者没有这行数据则行数为0,因此将返回值与0进行比较
3.5 控制层
@Controller
@RequestMapping(path = "/demo")
public class MainController {
@Autowired
private MainService mainService;
@GetMapping(path = "/getAll")
public @ResponseBody Iterable<User> getAllUsers()
{
return mainService.getAllUsers();
}
@PostMapping(path = "/get")
public @ResponseBody List<User> findByName(String name)
{
return mainService.findByName(name);
}
@PostMapping(path = "/add")
public @ResponseBody boolean add(@RequestParam String name)
{
return mainService.add(name);
}
@PostMapping(path = "/modify")
public @ResponseBody boolean modify(@RequestParam Integer id,@RequestParam String name)
{
return mainService.modify(id,name);
}
@PostMapping(path =