diff --git a/src/main/java/cn/mafangui/hotel/config/GlobalCrosConfig.java b/src/main/java/cn/mafangui/hotel/config/GlobalCrosConfig.java index 8a037b8..4bf4b4b 100644 --- a/src/main/java/cn/mafangui/hotel/config/GlobalCrosConfig.java +++ b/src/main/java/cn/mafangui/hotel/config/GlobalCrosConfig.java @@ -36,6 +36,7 @@ public class GlobalCrosConfig { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SessionInterceptor()) .addPathPatterns("/**") + .excludePathPatterns("/hotel/**") .excludePathPatterns("/login/**") .excludePathPatterns("/register/**"); } diff --git a/src/main/java/cn/mafangui/hotel/controller/HotelController.java b/src/main/java/cn/mafangui/hotel/controller/HotelController.java index a4103c3..98e5ccd 100644 --- a/src/main/java/cn/mafangui/hotel/controller/HotelController.java +++ b/src/main/java/cn/mafangui/hotel/controller/HotelController.java @@ -1,6 +1,8 @@ package cn.mafangui.hotel.controller; import cn.mafangui.hotel.entity.Hotel; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.ResponseUtil; import cn.mafangui.hotel.service.HotelService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -42,8 +44,8 @@ public class HotelController { return hotelService.selectByName(hotelName); } - @RequestMapping(value = "/all") - public List getAllHotel(){ - return hotelService.selectAll(); + @RequestMapping(value = "") + public AjaxResult getAllHotel(){ + return ResponseUtil.success(hotelService.selectAll()); } } diff --git a/src/main/java/cn/mafangui/hotel/controller/LoginController.java b/src/main/java/cn/mafangui/hotel/controller/LoginController.java index a5921c0..61ff67c 100644 --- a/src/main/java/cn/mafangui/hotel/controller/LoginController.java +++ b/src/main/java/cn/mafangui/hotel/controller/LoginController.java @@ -26,7 +26,7 @@ public class LoginController { @RequestMapping(value = "/user",method = RequestMethod.POST) public AjaxResult userLogin(String username, String password, - HttpServletRequest request){ + HttpServletRequest request) { if(StringUtils.isEmpty(username)){ return ResponseUtil.failed("用户名不能为空"); }else if(StringUtils.isEmpty(password)) { @@ -38,7 +38,11 @@ public class LoginController { } HttpSession session = request.getSession(); session.setAttribute("userId",user.getUserId()); - return ResponseUtil.success(session.getId()); + session.setAttribute("username",user.getUsername()); + HashMap map = new HashMap<>(); + map.put("sessionId",session.getId()); + map.put("userId",user.getUserId()); + return ResponseUtil.success(map); } @RequestMapping(value = "/worker",method = RequestMethod.POST) diff --git a/src/main/java/cn/mafangui/hotel/controller/OrderController.java b/src/main/java/cn/mafangui/hotel/controller/OrderController.java index 5fc1fb8..2d1ab79 100644 --- a/src/main/java/cn/mafangui/hotel/controller/OrderController.java +++ b/src/main/java/cn/mafangui/hotel/controller/OrderController.java @@ -2,6 +2,8 @@ package cn.mafangui.hotel.controller; import cn.mafangui.hotel.entity.Order; import cn.mafangui.hotel.enums.OrderStatus; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.ResponseUtil; import cn.mafangui.hotel.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; @@ -145,8 +147,8 @@ public class OrderController { * @return */ @RequestMapping(value = "/userOrder") - public List getAllByUser(int userId){ - return orderService.UsersAllOrders(userId); + public AjaxResult getAllByUser(int userId){ + return ResponseUtil.success(orderService.UsersAllOrders(userId)); } /** diff --git a/src/main/java/cn/mafangui/hotel/controller/RegisterController.java b/src/main/java/cn/mafangui/hotel/controller/RegisterController.java index 91e2e34..819dbdb 100644 --- a/src/main/java/cn/mafangui/hotel/controller/RegisterController.java +++ b/src/main/java/cn/mafangui/hotel/controller/RegisterController.java @@ -32,7 +32,7 @@ public class RegisterController { } @RequestMapping(method = RequestMethod.POST,value = "/admin") - public AjaxResult register(String username, String password, String name, String gender, String phone, String email, String address){ + public AjaxResult adminRegister(String username, String password, String name, String gender, String phone, String email, String address){ Worker worker = new Worker(username,password,name,gender,phone,email,address); worker.setRole(Role.ADMIN.getValue()); int result = workerService.insert(worker); @@ -42,4 +42,15 @@ public class RegisterController { else return ResponseUtil.failed("注册失败,请稍后再试"); } + @RequestMapping(method = RequestMethod.POST,value = "/operator") + public AjaxResult operatorRegister(String username,String password,String name,String gender,String phone,String email,String address){ + Worker worker = new Worker(username,password,name,gender,phone,email,address); + worker.setRole(Role.OPERATOR.getValue()); + int result = workerService.insert(worker); + if(result==1){ + return ResponseUtil.success(result); + } + else return ResponseUtil.failed("注册失败,请稍后再试"); + } + } diff --git a/src/main/java/cn/mafangui/hotel/controller/RoomTypeController.java b/src/main/java/cn/mafangui/hotel/controller/RoomTypeController.java index d37c360..4448731 100644 --- a/src/main/java/cn/mafangui/hotel/controller/RoomTypeController.java +++ b/src/main/java/cn/mafangui/hotel/controller/RoomTypeController.java @@ -1,6 +1,8 @@ package cn.mafangui.hotel.controller; import cn.mafangui.hotel.entity.RoomType; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.ResponseUtil; import cn.mafangui.hotel.service.RoomTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -21,9 +23,10 @@ public class RoomTypeController { * 所有房型 * @return */ - @RequestMapping(value = "/all") - public List getAllRoomType(){ - return roomTypeService.findAllType(); + @RequestMapping(value = "") + public AjaxResult getAllRoomType(){ + List rooms = roomTypeService.findAllType(); + return ResponseUtil.success(rooms); } /** diff --git a/src/main/java/cn/mafangui/hotel/controller/UserController.java b/src/main/java/cn/mafangui/hotel/controller/UserController.java deleted file mode 100644 index 83cd967..0000000 --- a/src/main/java/cn/mafangui/hotel/controller/UserController.java +++ /dev/null @@ -1,187 +0,0 @@ -package cn.mafangui.hotel.controller; - -import cn.mafangui.hotel.entity.User; -import cn.mafangui.hotel.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpRequest; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import java.util.List; - -@RestController -@RequestMapping(value = "/user") -public class UserController { - @Autowired - private UserService userService; - - /** - * 用户登录 - * @param username - * @param password - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/login") - public int userLogin(String username, String password, HttpServletRequest request){ - int result; - if (username == null | username == "" | password == null | password == ""){ - return -1; - } - if (userService.selectByUsernameAndPassword(username,password) != null){ - result = 1; - HttpSession session = request.getSession(); - session.setAttribute("userId",username); - session.getId(); - } - else result = 0; - return result; - } - - /** - * 用户注册 - * @param username - * @param password - * @param name - * @param gender - * @param phone - * @param email - * @param address - * @param idcard - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/register") - public int userRegister(String username,String password,String name,String gender,String phone,String email,String address,String idcard){ - User user = new User(username,password,name,gender,phone,email,address,idcard); - return userService.insertUser(user); - } - - /** - * 用户添加 - * @param username - * @param password - * @param name - * @param gender - * @param phone - * @param email - * @param address - * @param idcard - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/add") - public int userAdd(String username,String password,String name,String gender,String phone,String email,String address,String idcard){ - User user = new User(username,password,name,gender,phone,email,address,idcard); - return userService.addUser(user); - } - - - /** - * 更新用户信息 - * @param userId - * @param name - * @param gender - * @param phone - * @param email - * @param address - * @param idcard - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/update") - public int userUpdate(int userId,String name,String gender,String phone,String email,String address,String idcard){ - User user = new User(); - user.setUserId(userId); - user.setName(name); - user.setGender(gender); - user.setPhone(phone); - user.setEmail(email); - user.setAddress(address); - user.setIdcard(idcard); - return userService.updateUser(user); - } - - /** - * 更改密码 - * @param username - * @param oldPassword - * @param newPassword - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/updatePassword") - public int updatePassword(String username,String oldPassword,String newPassword){ - User user = userService.selectByUsernameAndPassword(username,oldPassword); - if (user == null){ - return -1; - }else { - user.setPassword(newPassword); - return userService.updateUser(user); - } - } - - /** - * 所有在记录的用户和客户 - * @return - */ - @RequestMapping(value = "/all") - public List getAll(){ - return userService.selectAll(); - } - - /** - * 所有注册用户 - * @return - */ - @RequestMapping(value = "/allUser") - public List getAllUser(){ - return userService.selectAllUser(); - } - - /** - * 判断用户名是否存在 - * @param username - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/isUsernameExist") - public int isUsernameExist(String username){ - int result = 0; - if (userService.selectByUsername(username) != null){ - result = 1; - } - else result = 0; - return result; - } - - /** - * 根据username查找用户 - * @param username - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/withUsername") - public User getByUsername(String username){ - User user = userService.selectByUsername(username); - user.setPassword(null); - return user; - } - - /** - * 根据id查找用户 - * @param userId - * @return - */ - @RequestMapping(method = RequestMethod.POST,value = "/withId") - public User getById(int userId){ - return userService.selectById(userId); - } - - /** - * 删除用户 - * @param userId - * @return - */ - @RequestMapping(value = "/delete") - public int deleteUser(int userId){ - return userService.deleteUser(userId); - } - -} diff --git a/src/main/java/cn/mafangui/hotel/controller/user/UserController.java b/src/main/java/cn/mafangui/hotel/controller/user/UserController.java new file mode 100644 index 0000000..a3f4eef --- /dev/null +++ b/src/main/java/cn/mafangui/hotel/controller/user/UserController.java @@ -0,0 +1,143 @@ +package cn.mafangui.hotel.controller.user; + +import cn.mafangui.hotel.entity.User; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.MsgType; +import cn.mafangui.hotel.response.ResponseUtil; +import cn.mafangui.hotel.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpRequest; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.List; + +@RestController +@RequestMapping(value = "/user") +public class UserController { + @Autowired + private UserService userService; + + + + /** + * 用户添加 + * @param username + * @param password + * @param name + * @param gender + * @param phone + * @param email + * @param address + * @param idcard + * @return + */ + @RequestMapping(method = RequestMethod.POST,value = "/add") + public int userAdd(String username,String password,String name,String gender,String phone,String email,String address,String idcard){ + User user = new User(username,password,name,gender,phone,email,address,idcard); + return userService.addUser(user); + } + + + /** + * 更新用户信息 + * @param userId + * @param name + * @param gender + * @param phone + * @param email + * @param address + * @param idcard + * @return + */ + @RequestMapping(method = RequestMethod.POST,value = "/update") + public AjaxResult userUpdate(int userId, String name, String gender, String phone, + String email, String address, String idcard, HttpServletRequest request){ + HttpSession session = request.getSession(); + if (!session.getAttribute("userId").equals(userId)){ + return ResponseUtil.failed(MsgType.PERMISSION_DENIED); + } + User user = new User(); + user.setUserId(userId); + user.setName(name); + user.setGender(gender); + user.setPhone(phone); + user.setEmail(email); + user.setAddress(address); + user.setIdcard(idcard); + if(userService.updateUser(user)==1) + return ResponseUtil.success("修改成功"); + return ResponseUtil.success("修改失败,请检查或稍后再试"); + } + + /** + * 更改密码 + * @param username + * @param oldPassword + * @param newPassword + * @return + */ + @RequestMapping(method = RequestMethod.POST,value = "/updatePassword") + public AjaxResult updatePassword(String username,String oldPassword,String newPassword){ + User user = userService.selectByUsernameAndPassword(username,oldPassword); + if (user == null){ + return ResponseUtil.failed("密码不对"); + } + user.setPassword(newPassword); + if(userService.updateUser(user)==1) + return ResponseUtil.success("修改成功"); + return ResponseUtil.failed("修改失败"); + } + + /** + * 获取个人资料 + * @param request + * @return + */ + @RequestMapping(value = "/profile") + public AjaxResult getProfile(HttpServletRequest request){ + String username = (String) request.getSession().getAttribute("username"); + User user = userService.selectByUsername(username); + if(user==null) return ResponseUtil.failed("未知错误"); + user.setPassword(null); + StringBuilder sb = new StringBuilder(user.getIdcard()); + sb.replace(5,12,"********"); + user.setIdcard(sb.toString()); + return ResponseUtil.success(user); + } + + + /** + * 根据username查找用户 + * @param username + * @return + */ + @RequestMapping(value = "/withUsername") + public AjaxResult getByUsername(String username, HttpServletRequest request){ + if(!request.getSession().getAttribute("username").equals(username)){ + return ResponseUtil.failed(MsgType.PERMISSION_DENIED); + } + User user = userService.selectByUsername(username); + user.setPassword(null); + return ResponseUtil.success(user); + } + + /** + * 注销 + * @param request + * @return + */ + @RequestMapping(value = "/logout",method = RequestMethod.POST) + public AjaxResult logout(HttpServletRequest request){ + HttpSession session = request.getSession(); + session.removeAttribute("userId"); + session.removeAttribute("username"); + return ResponseUtil.success("注销成功"); + } + + +} diff --git a/src/main/java/cn/mafangui/hotel/controller/user/UserOrderController.java b/src/main/java/cn/mafangui/hotel/controller/user/UserOrderController.java new file mode 100644 index 0000000..18e3382 --- /dev/null +++ b/src/main/java/cn/mafangui/hotel/controller/user/UserOrderController.java @@ -0,0 +1,170 @@ +package cn.mafangui.hotel.controller.user; + +import cn.mafangui.hotel.entity.Order; +import cn.mafangui.hotel.enums.OrderStatus; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.ResponseUtil; +import cn.mafangui.hotel.service.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.Date; +import java.util.List; + +/** + * 订单接口 + */ +@RestController +@RequestMapping(value = "/user/order") +public class UserOrderController { + @Autowired + private OrderService orderService; + + /** + * 添加预订 + * 订单状态默认为未付款状态 + * @param orderTypeId + * @param orderType + * @param userId + * @param name + * @param phone + * @param roomTypeId + * @param roomType + * @param orderDate + * @param orderDays + * @param orderCost + * @return + */ + @RequestMapping(value = "/add") + public int addOrder(int orderTypeId,String orderType, int userId,String name, String phone,int roomTypeId, String roomType, + @DateTimeFormat(pattern = "yyyy-MM-dd") Date orderDate, Integer orderDays, Double orderCost){ + Order order = new Order(orderTypeId,orderType,userId,name,phone,roomTypeId, + roomType,orderDate,orderDays, OrderStatus.UNPAID.getCode(),orderCost); + return orderService.addOrder(order); + } + + /** + * 客户删除订单 + * @param orderId + * @return + */ + @RequestMapping(value = "/deleteByUser") + public AjaxResult deleteOrderByUser(int orderId){ + Order order = new Order(orderId,OrderStatus.WAS_DELETED.getCode()); + if(orderService.update(order)!=1) + return ResponseUtil.failed("删除失败"); + return ResponseUtil.success("删除成功"); + } + + /** + * 修改订单 + * @param orderId + * @param orderTypeId + * @param orderType + * @param userId + * @param name + * @param phone + * @param roomTypeId + * @param roomType + * @param orderDate + * @param orderDays + * @param orderCost + * @return + */ + @RequestMapping(value = "/update") + public int updateOrder(int orderId,int orderTypeId,String orderType, int userId,String name, String phone,int roomTypeId, String roomType, + @DateTimeFormat(pattern = "yyyy-MM-dd") Date orderDate, Integer orderDays, Double orderCost){ + Order order = new Order(orderTypeId,orderType,userId,name,phone,roomTypeId, + roomType,orderDate,orderDays, OrderStatus.UNPAID.getCode(),orderCost); + return orderService.update(order); + } + + /** + * 订单支付 + * @param orderId + * @return + */ + @RequestMapping(method = RequestMethod.POST,value = "/pay") + public int payOrder(int orderId){ + return orderService.payOrder(orderId); + } + + /** + * 取消订单 + * @param orderId + * @return + */ + @RequestMapping(value = "/cancel") + public int cancelOrder(int orderId){ + return orderService.cancelOrder(orderId); + } + + /** + * 订单超时 + * @param orderId + * @return + */ + @RequestMapping(value = "/overtime") + public int orderOver(int orderId){ + Order order = new Order(orderId,OrderStatus.OVERTIME.getCode()); + return orderService.update(order); + } + + + /** + * 所有订单 + * @return + */ + @RequestMapping(value = "/all") + public List getAllOrder(){ + return orderService.AllOrders(); + } + + /** + * 根据userID查询所有订单 + * @param userId + * @return + */ + @RequestMapping(value = "/withUserId") + public List getByUser(int userId){ + return orderService.selectByUserId(userId); + } + + /** + * 客户查询个人所有订单(不包括被自己删除的) + * @return + */ + @RequestMapping(value = "") + public AjaxResult getAllByUser(HttpServletRequest request){ + HttpSession session = request.getSession(); + Integer userId = (Integer) session.getAttribute("userId"); + return ResponseUtil.success(orderService.UsersAllOrders(userId)); + } + + /** + * 根据订单号查询订单 + * @param orderId + * @return + */ + @RequestMapping(value = "/withId") + public Order getById(int orderId){ + return orderService.selectById(orderId); + } + + /** + * 根据姓名、预留手机号查找订单 + * 主要用于客户入住 + * @param name + * @param phone + * @return + */ + @RequestMapping(value = "/withNameAndPhone") + public Order getByNameAndPhone(String name,String phone){ + return orderService.selectByNameAndPhone(name,phone); + } +} diff --git a/src/main/java/cn/mafangui/hotel/response/MsgType.java b/src/main/java/cn/mafangui/hotel/response/MsgType.java index 168fd3d..5c070c3 100644 --- a/src/main/java/cn/mafangui/hotel/response/MsgType.java +++ b/src/main/java/cn/mafangui/hotel/response/MsgType.java @@ -8,7 +8,8 @@ public enum MsgType { SUCCESS(1000,"success"), FAILED(1001,"Failure"), - PARAM_IS_INVALID(1100,"参数非法") + PARAM_IS_INVALID(1001,"参数非法"), + PERMISSION_DENIED(1002,"权限不足"), ; private Integer code; diff --git a/src/main/java/cn/mafangui/hotel/tool/SessionInterceptor.java b/src/main/java/cn/mafangui/hotel/tool/SessionInterceptor.java index b3f9fa9..3bd6a5b 100644 --- a/src/main/java/cn/mafangui/hotel/tool/SessionInterceptor.java +++ b/src/main/java/cn/mafangui/hotel/tool/SessionInterceptor.java @@ -1,5 +1,8 @@ package cn.mafangui.hotel.tool; +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.ResponseUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @@ -12,26 +15,35 @@ public class SessionInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - System.out.println("Pre"); HttpSession session = request.getSession(); - System.out.println(session.getAttribute("userId")); - if(session!=null && session.getAttribute("userId")!=null){ + if(session.getAttribute("userId") != null){ return true; }else { + setCorsMappings(request, response); PrintWriter writer = response.getWriter(); - writer.write("Not Login."); + AjaxResult result = ResponseUtil.failed("Not Login"); + ObjectMapper mapper = new ObjectMapper(); + writer.write(mapper.writeValueAsString(result)); return false; } } + private void setCorsMappings(HttpServletRequest request, HttpServletResponse response){ + String origin = request.getHeader("Origin"); + response.setHeader("Access-Control-Allow-Origin", origin); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + } + @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { - System.out.println("post"); + } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - System.out.println("after"); } } diff --git a/src/main/java/cn/mafangui/hotel/tool/UserInterceptor.java b/src/main/java/cn/mafangui/hotel/tool/UserInterceptor.java new file mode 100644 index 0000000..b32dc5c --- /dev/null +++ b/src/main/java/cn/mafangui/hotel/tool/UserInterceptor.java @@ -0,0 +1,29 @@ +package cn.mafangui.hotel.tool; + +import cn.mafangui.hotel.response.AjaxResult; +import cn.mafangui.hotel.response.MsgType; +import cn.mafangui.hotel.response.ResponseUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.PrintWriter; + + +public class UserInterceptor implements HandlerInterceptor { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + HttpSession session = request.getSession(); + if(session.getAttribute("userId") != null){ + return true; + }else { + PrintWriter writer = response.getWriter(); + AjaxResult result = ResponseUtil.failed(MsgType.PERMISSION_DENIED); + ObjectMapper mapper = new ObjectMapper(); + writer.write(mapper.writeValueAsString(result)); + return false; + } + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1324fe5..82645f5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,7 +1,7 @@ server: port: 8080 servlet: - context-path: "/hotel" + context-path: "/ho-api" spring: datasource: driver-class-name: com.mysql.jdbc.Driver