目录
1、项目需求
2、技术需求
3、pom.xml
4、application.yml
4、MybatisPlus的配置文件
5、springboot中配置日期类型转换器
6、用户管理
7、线路管理
8、旅游公司管理
9、旅游线路管理
10、部分功能……
11、源码下载
1、项目需求
用户展示
旅游线路展示
线路图片上传与删除
线路分类 展示
旅行社展示
2、技术需求
前台有的老,学技术就可以了
后台技术 springboot 、 mybatis-plus 前台 bootstrap 、 jquery 、 thymeleaf 、 fifileinput 插件 数据库 mysql
3、pom.xml
com.qinluyu
SpringBoot04
1.0-SNAPSHOT
war
1.8
spring-boot-starter-parent
org.springframework.boot
2.3.0.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-jdbc
org.springframework.boot
spring-boot-starter-test
mysql
mysql-connector-java
5.1.45
org.springframework.boot
spring-boot-configuration-processor
true
com.baomidou
mybatis-plus-boot-starter
3.5.1
com.github.pagehelper
pagehelper
5.1.10
org.springframework.boot
spring-boot-starter-thymeleaf
org.projectlombok
lombok
provided
commons-fileupload
commons-fileupload
1.3.3
org.springframework.boot
spring-boot-maven-plugin
2.5.6
4、application.yml
server:
port: 9091
servlet:
context-path: /
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/travel?characterEncoding=utf8?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
hikari:
idle-timeout: 60000
maximum-pool-size: 30
minimum-idle: 10
thymeleaf:
cache: false
mybatis-plus:
mapper-locations: classpath:/mybatis
@Configuration
@MapperScan("com.qinluyu.dao")
public class MybatisPlusConfig {
@Bean
public PageInterceptor pageInterceptor(){
return new PageInterceptor();
}
}
5、springboot中配置日期类型转换器
@Component
public class DateConverterConfig implements Converter {
private static final List formarts = new ArrayList<>(4);
static{
formarts.add("yyyy-MM");
formarts.add("yyyy-MM-dd");
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
@Override public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\d{4}-\d{1,2}$")){
return parseDate(source, formarts.get(0));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2}$")){
return parseDate(source, formarts.get(1));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}$")){
return parseDate(source, formarts.get(2));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}:\d{1,2}$")){
return parseDate(source, formarts.get(3));
}
else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
public Date parseDate(String dateStr, String format) {
Date date=null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
}
catch (Exception e) {
}
return date;
}
}
6、用户管理
server:
port: 9091
servlet:
context-path: /
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/travel?characterEncoding=utf8?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
hikari:
idle-timeout: 60000
maximum-pool-size: 30
minimum-idle: 10
thymeleaf:
cache: false
mybatis-plus:
mapper-locations: classpath:/mybatis
@Configuration
@MapperScan("com.qinluyu.dao")
public class MybatisPlusConfig {
@Bean
public PageInterceptor pageInterceptor(){
return new PageInterceptor();
}
}
5、springboot中配置日期类型转换器
@Component
public class DateConverterConfig implements Converter {
private static final List formarts = new ArrayList<>(4);
static{
formarts.add("yyyy-MM");
formarts.add("yyyy-MM-dd");
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
@Override public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\d{4}-\d{1,2}$")){
return parseDate(source, formarts.get(0));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2}$")){
return parseDate(source, formarts.get(1));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}$")){
return parseDate(source, formarts.get(2));
}
else if(source.matches("^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}:\d{1,2}$")){
return parseDate(source, formarts.get(3));
}
else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
public Date parseDate(String dateStr, String format) {
Date date=null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
}
catch (Exception e) {
}
return date;
}
}
6、用户管理
(1)实体类
@Data
@TableName("tab_user")
public class User implements Serializable{
@TableId(type = IdType.AUTO)
private Integer uid;
private String username;
private String password;
private String name;
private Date birthday;
private String sex;
private String telephone;
private String email;
private String status;
private String code;
private Boolean isadmin;
}
(2)Dao类
public interface UserDao extends BaseMapper{ }
(3)Service类
public interface UserService {
public PageInfo findPage(User condition, int pageNum, int pageSize);
public List find(User condition);
public int add(User user);
public User findById(Integer id);
public int update(User user);
public int delete(Integer id);
}
(4)Service的实现类(重写)
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
@Override
public PageInfo findPage(User condition, int pageNum, int pageSize) {
return PageHelper.startPage(pageNum,pageSize).doSelectPageInfo(()->{
userDao.selectList(Wrappers.query());
});
}
@Override
public List find(User condition) {
return userDao.selectList(Wrappers.query());
}
@Override
public int add(User user) {
return userDao.insert(user);
}
@Override
public User findById(Integer id) {
return userDao.selectById(id);
}
@Override
public int update(User user) {
return userDao.updateById(user);
}
@Override
public int delete(Integer id) {
return userDao.deleteById(id);
}
}
(5)controller类
@Controller
@RequestMapping("/admin/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/page")
public String page(User user, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10")Integer pageSize, Model model){
PageInfo page = userService.findPage(user, pageNum, pageSize);
model.addAttribute("page", page);
return "/user/list";
}
@RequestMapping("/toadd")
public String toAdd() {
return "/user/add";
}
@RequestMapping("/doadd")
public String doAdd(User user) {
userService.add(user);
return "redirect:/admin/user/page";
}
@RequestMapping("/toupdate/{id}")
public String toUpdate(@PathVariable("id") Integer id, Model model) {
User user = userService.findById(id);
model.addAttribute("user", user);
return "/user/update";
}
@RequestMapping("/doupdate")
public String doUpdate(User user) {
userService.update(user);
return "redirect:/admin/user/page";
}
@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") Integer id) {
userService.delete(id);
return "redirect:/admin/user/page";
}
@RequestMapping("/delete")
public String batchDelete(@RequestParam("ids") Integer[] ids) {
for (Integer id : ids) {
userService.delete(id);
}return "redirect:/admin/user/page";
}
(6)前端分页
(7)添加(删除)数据后回显
7、线路管理
8、旅游公司管理
9、旅游线路管理
(1)图片上传
private void performRImage(Route route, @RequestParam("rimageFile") MultipartFile rimageFile, HttpServletRequest request) throws IOException {
String savePath = request.getServletContext().getRealPath("img/product/rimage/");
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + FilenameUtils.getExtension(rimageFile.getOriginalFilename());
File savePathDir = new File(savePath);
if (!savePathDir.exists()) {
savePathDir.mkdirs();
}
rimageFile.transferTo(new File(savePathDir, fileName));
route.setRimage("img/product/rimage/" + fileName);
}
@RequestMapping("/toimage")
public String toImage(Integer id, Model model) {
Route route = routeService.findById(id);
model.addAttribute("route", route);
return "route/image";
}
@RequestMapping("/doimage")
public String doImage(
Integer rid,
@RequestParam("bigPicFile") MultipartFile[] bigPicFile,
@RequestParam("smallPicFile")MultipartFile[] smallPicFile,
HttpServletRequest request) throws Exception {
List bigPic = new ArrayList<>();
List smallPic = new ArrayList<>();
String path = request.getServletContext().getRealPath("/");
for (MultipartFile f : bigPicFile) {
File bigPath = new File(path + "img\product\big-pic\");
if (!bigPath.exists()) {
bigPath.mkdirs();
}
String fileName = UUID.randomUUID().toString().replace("-", "") + "." +
FilenameUtils.getExtension(f.getOriginalFilename());
f.transferTo(new File(bigPath, fileName));
bigPic.add("img/product/big-pic/" + fileName);
}
for (MultipartFile f : smallPicFile) {
File smallPath = new File(path + "img\product\small-pic\");
if (!smallPath.exists()) {
smallPath.mkdirs();
}
String fileName = UUID.randomUUID().toString().replace("-", "") + "." +
FilenameUtils.getExtension(f.getOriginalFilename());
f.transferTo(new File(smallPath, fileName));
smallPic.add("img/product/small-pic/" + fileName);
}
//要添加的图片列表
List ris = new ArrayList<>();
for (int i=0; i
10、部分功能……
经测试后,基本功能实现
部分功能还需再写,比如分类管理可以添加、删除却不能修改
图片如果是空,则提交不了
等等
11、源码下载
SpringBoot入门学习之旅游网站项目-Java文档类资源-CSDN下载



