先从demo-server开始
后台目录结构:
在entity目录下新建四个实体类:
其命名分别为:Book,Province,City,Town
Book.java的内容如下:(对应数据库的book表)
```java
```java
package com.example.entity;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
@Data
@Entity
public class Book {
@Id
private Integer id;
private String name;
private String author;
}
Province.java的内容如下:(对应数据库的province表)
```java
package com.example.entity;
import lombok.Data;
import javax.persistence.*;
/**
* 三级联动 省份
* */
@Data
@Entity
@Table(name = "province")
public class Province {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id",unique = true,nullable = false)
private Integer id;
@Column(name = "code",nullable = false)
private String code;
@Column(name = "name",nullable = false)
private String name;
}
City.java的内容如下:(对应数据库的city表)
package com.example.entity;
import lombok.Data;
import javax.persistence.*;
/**
* 三级联动 市区
* */
@Data
@Entity
@Table(name = "city")
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id",unique = true,nullable = false)
private Integer id;
@Column(name = "code",nullable = false)
private String code;
@Column(name = "name",nullable = false)
private String name;
@Column(name = "province_code",nullable = false)
private String provinceCode;
}
Town.java的内容如下:(对应数据库的town表)
package com.example.entity;
import lombok.Data;
import javax.persistence.*;
/**
* 三级联动 区域
* */
@Data
@Entity
@Table(name ="town")
public class Town {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id",unique = true,nullable = false)
private Integer id;
@Column(name = "code",nullable = false)
private String code;
@Column(name = "name",nullable = false)
private String name;
@Column(name = "city_code",nullable = false)
private String cityCode;
}
dao目录下新建文件BookDAO,Book01DAO,ProvinceDAO,CityDAO,TownCity
BookDAO的内容如下:
package com.example.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.Book;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BookDAO extends BaseMapper<Book> {
}
Book01DAO的内容如下:
package com.example.dao;
import com.example.entity.Book;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface Book01DAO extends JpaRepository<Book,Integer> {
@Query(value = "select * from book where name like %?1%",nativeQuery = true)
Page<Book> findNameLike(String name, PageRequest pageRequest);
}
ProvinceDAO的内容如下:
package com.example.dao;
import com.example.entity.Province;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProvinceDAO extends JpaRepository<Province,Integer> {
}
CityDAO的内容如下:
package com.example.dao;
import com.example.entity.City;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface CityDAO extends JpaRepository<City,Integer> {
/**
* 实现jpa的基本方法,根据省份编号查询城市信息
*/
public List<City> findCityByProvinceCode(String provinceCode);
}
TownDAO的内容如下:
package com.example.dao;
import com.example.entity.Town;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface TownDAO extends JpaRepository<Town,Integer> {
/**
* 实现jpa基本方法,根据城市编号查询区域信息
*/
public List<Town> findTownByCityCode(String cityCode);
}
service包下新建BookService,Book01Service,ProvinceService,CityService,TownService
BookService的内容如下:
package com.example.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.Book;
import org.springframework.data.domain.Page;
public interface BookService extends IService<Book> {
boolean saveBook(Book book);
boolean modify(Book book);
boolean delete(Integer id);
Book selectById(Integer id);
IPage<Book> getPage(int currentPage, int pageSize, Book book);
}
Book01Service的内容如下:
package com.example.service;
import com.example.entity.Book;
import org.springframework.data.domain.Page;
public interface Book01Service {
Page<Book> findPage(Integer currentPage, Integer pageSize, String name);
}
ProvinceService的内容如下:
package com.example.service;
import com.example.entity.Province;
import java.util.List;
public interface ProvinceService {
List<Province> findAll();
}
CityService的内容如下:
package com.example.service;
import com.example.entity.City;
import java.util.List;
public interface CityService {
List<City> findByProvinceCode(String provinceCode);
}
TownService的内容如下:
package com.example.service;
import com.example.entity.Town;
import java.util.List;
public interface TownService {
List<Town> findByCityCode(String cityCode);
}
在impl包里面实现service包下面接口的方法:
新建:BookServiceImpl,Book01ServiceImpl,ProvinceServiceImpl,TownServiceImpl,CityServiceImpl其内容:
BookServiceImpl:
package com.example.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.dao.BookDAO;
import com.example.entity.Book;
import com.example.service.BookService;
import org.apache.logging.log4j.util.Strings;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class BookServiceImpl extends ServiceImpl<BookDAO,Book> implements BookService {
@Resource
private BookDAO bookDAO;
@Override
public boolean saveBook(Book book) {
return bookDAO.insert(book)>0;
}
@Override
public boolean modify(Book book) {
return bookDAO.updateById(book)>0;
}
@Override
public boolean delete(Integer id) {
return bookDAO.deleteById(id)>0;
}
@Override
public Book selectById(Integer id) {
return bookDAO.selectById(id);
}
/**
* 分页、条件查询
* */
@Override
public IPage<Book> getPage(int currentPage, int pageSize, Book book) {
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
lqw.like(Strings.isNotEmpty(book.getName()),Book::getName,book.getName());
lqw.like(Strings.isNotEmpty(book.getAuthor()),Book::getAuthor,book.getAuthor());
IPage page = new Page(currentPage,pageSize);
bookDAO.selectPage(page,lqw);
return page;
}
}
Book01ServiceImpl:
package com.example.service.impl;
import com.example.dao.Book01DAO;
import com.example.entity.Book;
import com.example.service.Book01Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class Book01ServiceImpl implements Book01Service {
@Resource
private Book01DAO book01DAO;
/**
* 模糊查询 分页功能
* */
public Page<Book> findPage(Integer currentPage,Integer pageSize,String name){
Sort sort=Sort.by(Sort.Direction.ASC,"id"); //根据时间倒序排序
PageRequest pageRequest= PageRequest.of(currentPage-1,pageSize,sort);
return book01DAO.findNameLike(name,pageRequest);
}
}
ProvinceServiceImpl:
package com.example.service.impl;
import com.example.dao.ProvinceDAO;
import com.example.entity.Province;
import com.example.service.ProvinceService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class ProvinceServiceImpl implements ProvinceService {
@Resource
private ProvinceDAO provinceDAO;
@Override
public List<Province> findAll() {
return provinceDAO.findAll();
}
}
CityServiceImpl:
package com.example.service.impl;
import com.example.dao.CityDAO;
import com.example.entity.City;
import com.example.service.CityService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class CityServiceImpl implements CityService {
@Resource
private CityDAO cityDAO;
@Override
public List<City> findByProvinceCode(String provinceCode) {
return cityDAO.findCityByProvinceCode(provinceCode);
}
}
TownServiceImpl:
package com.example.service.impl;
import com.example.dao.TownDAO;
import com.example.entity.Town;
import com.example.service.TownService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class TownServiceImpl implements TownService {
@Resource
private TownDAO townDAO;
@Override
public List<Town> findByCityCode(String cityCode) {
return townDAO.findTownByCityCode(cityCode);
}
}
接下来是controller里面实现和前台的对接:
新建BookController.java其内容:
package com.example.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.entity.Book;
import com.example.service.Book01Service;
import com.example.service.BookService;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/book")
@CrossOrigin
public class BookController {
@Resource
private BookService bookService;
@Resource
private Book01Service book01Service;
/**
*新增
* */
@PostMapping("/add")
public Boolean save(@RequestBody Book book){
boolean flag= bookService.saveBook(book);
if(flag){
return true;
}else{
return false;
}
}
/**
* 修改
* */
@PutMapping("/update")
public Boolean update(@RequestBody Book book){
boolean flag= bookService.modify(book);
if(flag){
return true;
}else{
return false;
}
}
/**
* 删除
* */
@DeleteMapping("/delete/{id}")
public Boolean delete(@PathVariable Integer id){
boolean flag= bookService.delete(id);
if(flag){
return true;
}else{
return false;
}
}
/**
* 查询全部
* */
@GetMapping
public List<Book> getAll(){
return bookService.list();
}
/**
* 根据ID查询
* */
@GetMapping("/{id}")
public Book getById(@PathVariable Integer id){
return bookService.selectById(id);
}
/**
* 条件查询 分页查询
* */
@GetMapping("/{currentPage}/{pageSize}")
public IPage<Book> getPage(@PathVariable int currentPage,@PathVariable int pageSize,Book book){
IPage<Book> page=bookService.getPage(currentPage,pageSize,book);
//
if(currentPage>page.getPages()){
page=bookService.getPage((int)page.getPages(),pageSize,book);
}
return page;
}
/**
* 分页模糊查询
* */
@GetMapping("/page")
public Page<Book> findPage(@RequestParam(defaultValue = "1")Integer currentPage,
@RequestParam(defaultValue = "2")Integer pageSize,
@RequestParam(required = false) String name){
return book01Service.findPage(currentPage, pageSize, name);
}
}
新建AddressController.java其内容:
package com.example.controller;
import com.example.entity.City;
import com.example.entity.Province;
import com.example.entity.Town;
import com.example.service.CityService;
import com.example.service.ProvinceService;
import com.example.service.TownService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@CrossOrigin
@RequestMapping("/book")
public class AddressController {
@Resource
private ProvinceService provinceService;
@Resource
private CityService cityService;
@Resource
private TownService townService;
/**
* 查询所有省份信息
* */
@GetMapping("/province")
public List<Province> findAll(){
return provinceService.findAll();
}
/**
* 根据省份编号查询市级信息
* */
@GetMapping("/city/{provinceCode}")
public List<City> findByProvinceCode(@PathVariable("provinceCode") String provinceCode){
return cityService.findByProvinceCode(provinceCode);
}
/**
* 根据市级编号查询区域信息
* */
@GetMapping("/town/{cityCode}")
public List<Town> findByCityCode(@PathVariable("cityCode") String cityCode){
return townService.findByCityCode(cityCode);
}
}
最后是config包下的分页拦截器:
MPConfig:
package com.example.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
//1. 定义 Mp 拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//2. 添加具体的拦截器 分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
至此后台的编写已经完成。