Browse Source

生成token、token验证、用户注册、用户登陆、用户修改信息、订单查询、生成订单后端实现 (待和前端调试)

CHENYIZONG 6 years ago
parent
commit
c12252eea2

+ 12 - 0
pom.xml

@@ -88,6 +88,18 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.10.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.51</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 9 - 6
src/main/java/com/example/hotel/bl/user/AccountService.java

@@ -1,9 +1,7 @@
 package com.example.hotel.bl.user;
 
-import com.example.hotel.vo.OrderVO;
-import com.example.hotel.vo.UserForm;
-import com.example.hotel.vo.ResponseVO;
-import com.example.hotel.vo.UserVO;
+import com.example.hotel.po.User;
+import com.example.hotel.vo.*;
 
 /**
  * @author huwen
@@ -13,16 +11,21 @@ public interface AccountService {
 
     /**
      * 注册账号
+     *
      * @return
      */
-    public ResponseVO registerAccount(UserForm userForm);
+    ResponseVO registerAccount(UserVO userVO);
 
     /**
      * 用户登录,登录成功会将用户信息保存再session中
+     *
      * @return
      */
-    public UserVO login(UserForm userForm);
+    User login(UserForm userForm);
 
+    User getUserInfo(String email);
+
+    ResponseVO updateUserInfo(String email, String password,String username,String phonenumber);
 
 
 }

+ 27 - 7
src/main/java/com/example/hotel/blImpl/user/AccountServiceImpl.java

@@ -8,20 +8,22 @@ import com.example.hotel.vo.ResponseVO;
 import com.example.hotel.vo.UserVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 
 
 @Service
 public class AccountServiceImpl implements AccountService {
     private final static String ACCOUNT_EXIST = "账号已存在";
+    private final static String UPDATE_ERROR = "修改失败";
     @Autowired
     private AccountMapper accountMapper;
 
     @Override
-    public ResponseVO registerAccount(UserForm userForm) {
+    public ResponseVO registerAccount(UserVO userVO) {
+        User user = new User();
+        BeanUtils.copyProperties(userVO,user);
         try {
-            accountMapper.createNewAccount(userForm.getEmail(), userForm.getPassword());
+            accountMapper.createNewAccount(user);
         } catch (Exception e) {
             System.out.println(e.getMessage());
             return ResponseVO.buildFailure(ACCOUNT_EXIST);
@@ -30,13 +32,31 @@ public class AccountServiceImpl implements AccountService {
     }
 
     @Override
-    public UserVO login(UserForm userForm) {
-        UserVO userVO = new UserVO();
+    public User login(UserForm userForm) {
         User user = accountMapper.getAccountByName(userForm.getEmail());
         if (null == user || !user.getPassword().equals(userForm.getPassword())) {
             return null;
         }
-        BeanUtils.copyProperties(user,userVO);
-        return userVO;
+        return user;
+    }
+
+    @Override
+    public User getUserInfo(String email) {
+        User user = accountMapper.getAccountByName(email);
+        if (user == null) {
+            return null;
+        }
+        return user;
+    }
+
+    @Override
+    public ResponseVO updateUserInfo(String email, String password, String username, String phonenumber) {
+        try {
+            accountMapper.updateAccount(email, password, username, phonenumber);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            return ResponseVO.buildFailure(UPDATE_ERROR);
+        }
+        return ResponseVO.buildSuccess();
     }
 }

+ 0 - 17
src/main/java/com/example/hotel/config/InterceptorConfiguration.java

@@ -1,17 +0,0 @@
-package com.example.hotel.config;
-
-import com.example.hotel.interceptor.SessionInterceptor;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-
-@Configuration
-public class InterceptorConfiguration implements WebMvcConfigurer {
-    public final static String SESSION_KEY = "user";
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(new SessionInterceptor()).excludePathPatterns("/login", "/index", "/signUp", "/register", "/error", "/**/*.css", "/**/*.js", "/**/*.png", "/**/*.gif", "/**/*.jpg", "/**/*.jpeg", "/font/**").addPathPatterns("/**");
-    }
-}

+ 61 - 0
src/main/java/com/example/hotel/config/WebConfiguration.java

@@ -0,0 +1,61 @@
+package com.example.hotel.config;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-03
+ */
+import com.example.hotel.interceptor.TokenInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
+import org.springframework.web.servlet.config.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executors;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+/**
+ * 跨域请求支持/token拦截
+ * tip:只能写在一个配置类里
+ */
+@Configuration
+public class WebConfiguration implements WebMvcConfigurer {
+
+    private TokenInterceptor tokenInterceptor;
+
+    //构造方法
+    public WebConfiguration(TokenInterceptor tokenInterceptor){
+        this.tokenInterceptor = tokenInterceptor;
+    }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowCredentials(true)
+                .allowedHeaders("*")
+                .allowedMethods("*");
+               // .allowedOrigins("*");
+    }
+
+    @Override
+    public void configureAsyncSupport(AsyncSupportConfigurer configurer){
+        configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(3)));
+        configurer.setDefaultTimeout(30000);
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry){
+        List<String> excludePath = new ArrayList<>();
+        //排除拦截,除了注册登录(此时还没token),其他都拦截
+        excludePath.add("/api/register");  //登录
+        excludePath.add("/api/login");     //注册
+      //  excludePath.add("/static/**");  //静态资源
+        excludePath.add("/assets/**");  //静态资源
+
+        registry.addInterceptor(tokenInterceptor)
+                .addPathPatterns("/**")
+                .excludePathPatterns(excludePath);
+        WebMvcConfigurer.super.addInterceptors(registry);
+    }
+}

+ 36 - 18
src/main/java/com/example/hotel/controller/user/AccountController.java

@@ -1,46 +1,64 @@
 package com.example.hotel.controller.user;
 
 import com.example.hotel.blImpl.user.AccountServiceImpl;
-import com.example.hotel.config.InterceptorConfiguration;
+import com.example.hotel.po.User;
+import com.example.hotel.util.TokenUtil;
 import com.example.hotel.vo.UserForm;
 import com.example.hotel.vo.ResponseVO;
+import com.example.hotel.vo.UserInfoVO;
 import com.example.hotel.vo.UserVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpServletRequest;
 
 
 @RestController()
 @RequestMapping("/api")
 public class AccountController {
-    private final static String ACCOUNT_INFO_ERROR="用户名或密码错误";
+    private final static String ACCOUNT_INFO_ERROR = "用户名或密码错误";
     @Autowired
     private AccountServiceImpl accountService;
 
     @PostMapping("/login")
-    public ResponseVO login(@RequestBody UserForm userForm, HttpSession session){
-        UserVO user = accountService.login(userForm);
-        if(user==null){
-           return ResponseVO.buildFailure(ACCOUNT_INFO_ERROR);
+    public ResponseVO login(@RequestBody UserForm userForm) {
+        User user = accountService.login(userForm);
+        if (user == null) {
+            return ResponseVO.buildFailure(ACCOUNT_INFO_ERROR);
         }
-        //注册session
-        session.setAttribute(InterceptorConfiguration.SESSION_KEY,userForm);
-        return ResponseVO.buildSuccess(user);
+        String token = TokenUtil.sign(user);
+        return ResponseVO.buildSuccess(token);
+
     }
 
     @PostMapping("/register")
-    public ResponseVO registerAccount(@RequestBody UserForm userForm){
-        return accountService.registerAccount(userForm);
+    public ResponseVO registerAccount(@RequestBody UserVO userVO) {
+        return accountService.registerAccount(userVO);
     }
 
-    @PostMapping("/logout")
-    public String logOut(HttpSession session){
-        session.removeAttribute(InterceptorConfiguration.SESSION_KEY);
-        return "index";
+//    @PostMapping("/logout")
+//    public String logOut(HttpSession session) {
+//        session.removeAttribute(InterceptorConfiguration.SESSION_KEY);
+//        return "index";
+//    }
+
+    @GetMapping("/userinfo")
+    public ResponseVO getUserInfo(HttpServletRequest httpServletRequest) {
+        String token = httpServletRequest.getHeader("token");
+        String email = TokenUtil.getEmail(token);
+        User user = accountService.getUserInfo(email);
+        if(user==null){
+            return ResponseVO.buildFailure(ACCOUNT_INFO_ERROR);
+        }
+        return ResponseVO.buildSuccess(user);
     }
 
-//    @GetMapping("/usertype")
-//    public String getUserType()
+    @PostMapping("/userinfo/update")
+    public ResponseVO updateInfo(@RequestBody UserInfoVO userInfoVO, HttpServletRequest httpServletRequest){
+        String token = httpServletRequest.getHeader("token");
+        String email = TokenUtil.getEmail(token);
+        return accountService.updateUserInfo(email,userInfoVO.getPassword(),userInfoVO.getUserName(),userInfoVO.getPhoneNumber());
+
+    }
 
 }

+ 15 - 5
src/main/java/com/example/hotel/data/user/AccountMapper.java

@@ -1,7 +1,6 @@
 package com.example.hotel.data.user;
 
 import com.example.hotel.po.User;
-import com.example.hotel.vo.UserVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -13,16 +12,27 @@ public interface AccountMapper {
 
     /**
      * 创建一个新的账号
-     * @param email
-     * @param password
+     *
      * @return
      */
-    public int createNewAccount(@Param("email") String email, @Param("password") String password);
+     int createNewAccount(User user);
 
     /**
      * 根据用户名查找账号
      * @param email
      * @return
      */
-    public User getAccountByName(@Param("email") String email);
+     User getAccountByName(@Param("email") String email);
+
+    /**
+     * 更新用户信息
+     * @param email
+     * @param password
+     * @param username
+     * @param phonenumber
+     * @return
+     */
+     int updateAccount(@Param("email") String email, @Param("password") String password,@Param("username") String username, @Param("phonenumber") String phonenumber);
+
+
 }

+ 1 - 0
src/main/java/com/example/hotel/data/user/OrderMapper.java

@@ -14,6 +14,7 @@ import java.util.List;
 @Mapper
 @Repository
 public interface OrderMapper {
+
     int insertOrder(Order order);
 
     List<OrderVO> selectAllOrder();

+ 0 - 21
src/main/java/com/example/hotel/interceptor/SessionInterceptor.java

@@ -1,21 +0,0 @@
-package com.example.hotel.interceptor;
-
-import com.example.hotel.config.InterceptorConfiguration;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-
-public class SessionInterceptor extends HandlerInterceptorAdapter {
-//    @Override
-//    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception{
-//        HttpSession session=httpServletRequest.getSession();
-//        if(null!=session && null!=session.getAttribute(InterceptorConfiguration.SESSION_KEY)){
-//            return true;
-//        }
-//        httpServletResponse.sendRedirect("/index");
-//        return false;
-//    }
-}

+ 48 - 0
src/main/java/com/example/hotel/interceptor/TokenInterceptor.java

@@ -0,0 +1,48 @@
+package com.example.hotel.interceptor;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-03
+ */
+import com.alibaba.fastjson.JSONObject;
+import com.example.hotel.util.TokenUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class TokenInterceptor implements HandlerInterceptor {
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception{
+        if(request.getMethod().equals("OPTIONS")){
+            response.setStatus(HttpServletResponse.SC_OK);
+            return true;
+        }
+        response.setCharacterEncoding("utf-8");
+        String token = request.getHeader("token");
+        if(token != null){
+            boolean result = TokenUtil.verify(token);
+            if(result){
+                System.out.println("通过拦截器");
+                return true;
+            }
+        }
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        try{
+            JSONObject json = new JSONObject();
+            json.put("msg","token verify fail");
+            json.put("code","50000");
+            response.getWriter().append(json.toJSONString());
+            System.out.println("认证失败,未通过拦截器");
+        }catch (Exception e){
+            e.printStackTrace();
+            response.sendError(500);
+            return false;
+        }
+        return false;
+    }
+}

+ 3 - 3
src/main/java/com/example/hotel/po/Order.java

@@ -10,7 +10,7 @@ public class Order {
     private Integer id;
     private Integer userId;
     private Integer hotelId;
-    private Date checkInnDate;
+    private Date checkInDate;
     private Date checkOutDate;
     private String roomType;
     private Integer roomNum;
@@ -43,11 +43,11 @@ public class Order {
     }
 
     public Date getCheckInnDate() {
-        return checkInnDate;
+        return checkInDate;
     }
 
     public void setCheckInnDate(Date checkInnDate) {
-        this.checkInnDate = checkInnDate;
+        this.checkInDate = checkInnDate;
     }
 
     public Date getCheckOutDate() {

+ 38 - 0
src/main/java/com/example/hotel/po/User.java

@@ -1,10 +1,16 @@
 package com.example.hotel.po;
 
 
+import com.example.hotel.enums.UserType;
+
 public class User {
     private Integer id;
     private String email;
     private String password;
+    private String userName;
+    private String phoneNumber;
+    private double credit;
+    private UserType userType;
 
     public Integer getId() {
         return id;
@@ -14,6 +20,30 @@ public class User {
         this.id = id;
     }
 
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public double getCredit() {
+        return credit;
+    }
+
+    public void setCredit(double credit) {
+        this.credit = credit;
+    }
+
     public String getEmail() {
         return email;
     }
@@ -29,4 +59,12 @@ public class User {
     public void setPassword(String password) {
         this.password = password;
     }
+
+    public UserType getUserType() {
+        return userType;
+    }
+
+    public void setUserType(UserType userType) {
+        this.userType = userType;
+    }
 }

+ 0 - 41
src/main/java/com/example/hotel/po/UserInfo.java

@@ -1,41 +0,0 @@
-package com.example.hotel.po;
-
-public class UserInfo {
-    private Integer id;
-    private String userName;
-    private Integer phoneNumber;
-    private double credit;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public Integer getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public void setPhoneNumber(Integer phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    public double getCredit() {
-        return credit;
-    }
-
-    public void setCredit(double credit) {
-        this.credit = credit;
-    }
-
-}

+ 74 - 0
src/main/java/com/example/hotel/util/TokenUtil.java

@@ -0,0 +1,74 @@
+package com.example.hotel.util;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-03
+ */
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.example.hotel.po.User;
+
+import java.util.Date;
+
+public class TokenUtil {
+
+    private static final long EXPIRE_TIME= 10*60*60*1000;
+    private static final String TOKEN_SECRET="txdy";  //密钥盐
+
+    /**
+     * 签名生成
+     * @param user
+     * @return
+     */
+    public static String sign(User user){
+        String token = null;
+        try {
+            Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
+            token = JWT.create()
+                    .withIssuer("auth0")
+                    .withClaim("email", user.getEmail())
+                    .withExpiresAt(expiresAt)
+                    // 使用了HMAC256加密算法。
+                    .sign(Algorithm.HMAC256(TOKEN_SECRET));
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+        return token;
+    }
+
+    /**
+     * 签名验证
+     * @param token
+     * @return
+     */
+    public static boolean verify(String token){
+        try {
+            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("auth0").build();
+            DecodedJWT jwt = verifier.verify(token);
+            System.out.println("认证通过:");
+            System.out.println("email: " + jwt.getClaim("email").asString());
+            System.out.println("过期时间:      " + jwt.getExpiresAt());
+            return true;
+        } catch (Exception e){
+            return false;
+        }
+    }
+
+    /**
+     * 获得token中的信息无需secret解密也能获得
+     *
+     * @return token中包含的用户名
+     */
+    public static String getEmail(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim("email").asString();
+        } catch (JWTDecodeException e) {
+            return null;
+        }
+    }
+}

+ 3 - 3
src/main/java/com/example/hotel/vo/OrderVO.java

@@ -10,7 +10,7 @@ public class OrderVO {
     private Integer id;
     private Integer userId;
     private Integer hotelId;
-    private Date checkInnDate;
+    private Date checkInDate;
     private Date checkOutDate;
     private String roomType;
     private Integer roomNum;
@@ -42,11 +42,11 @@ public class OrderVO {
         this.hotelId = hotelId;
     }
     public Date getCheckInnDate() {
-        return checkInnDate;
+        return checkInDate;
     }
 
     public void setCheckInnDate(Date checkInnDate) {
-        this.checkInnDate = checkInnDate;
+        this.checkInDate = checkInnDate;
     }
 
     public Date getCheckOutDate() {

+ 0 - 10
src/main/java/com/example/hotel/vo/UserForm.java

@@ -15,8 +15,6 @@ public class UserForm {
     private String password;
 
 
-    private String userType;
-
 
     public String getEmail() {
         return email;
@@ -33,12 +31,4 @@ public class UserForm {
     public void setPassword(String password) {
         this.password = password;
     }
-
-    public String getUserType() {
-        return userType;
-    }
-
-    public void setUserType(String userType) {
-        this.userType = userType;
-    }
 }

+ 36 - 0
src/main/java/com/example/hotel/vo/UserInfoVO.java

@@ -0,0 +1,36 @@
+package com.example.hotel.vo;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-03
+ */
+public class UserInfoVO {
+    private String password;
+    private String userName;
+    private String phoneNumber;
+
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+}

+ 38 - 0
src/main/java/com/example/hotel/vo/UserVO.java

@@ -1,5 +1,7 @@
 package com.example.hotel.vo;
 
+import com.example.hotel.enums.UserType;
+
 /**
  * @author fjj
  * @date 2019/4/11 3:22 PM
@@ -8,6 +10,10 @@ public class UserVO {
     private Integer id;
     private String email;
     private String password;
+    private String userName;
+    private String phoneNumber;
+    private double credit;
+    private UserType userType;
 
     public Integer getId() {
         return id;
@@ -17,6 +23,30 @@ public class UserVO {
         this.id = id;
     }
 
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public double getCredit() {
+        return credit;
+    }
+
+    public void setCredit(double credit) {
+        this.credit = credit;
+    }
+
     public String getEmail() {
         return email;
     }
@@ -32,4 +62,12 @@ public class UserVO {
     public void setPassword(String password) {
         this.password = password;
     }
+
+    public UserType getUserType() {
+        return userType;
+    }
+
+    public void setUserType(UserType userType) {
+        this.userType = userType;
+    }
 }

+ 8 - 3
src/main/resources/dataImpl/user/AccountMapper.xml

@@ -1,13 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.example.hotel.data.user.AccountMapper">
-    <insert id="createNewAccount" useGeneratedKeys="true" keyProperty="id">
-        insert into User(email,password)
-        values(#{email},#{password})
+    <insert id="createNewAccount" parameterType="com.example.hotel.po.User" useGeneratedKeys="true" keyProperty="id">
+        insert into User(email,password,username,phonenumber,credit,usertype)
+        values(#{email},#{password},#{username},#{phonenumber},#{credit},#{usertype})
     </insert>
     <select id="getAccountByName" resultMap="User">
         select * from User where email=#{email}
     </select>
+    <update id="updateAccount">
+        update User set password=#{password},username=#username,phonenumber=#phonenumber,credit=#credit
+        where email=#{email}
+    </update>
+
 
     <resultMap id="User" type="com.example.hotel.po.User">
     </resultMap>

+ 16 - 0
src/main/resources/dataImpl/user/OrderMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.example.hotel.data.user.OrderMapper">
+
+    <insert id="insertOrder" parameterType="com.example.hotel.po.Order"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into Order(id,userId,hotelId,checkInDate,checkOutDate,roomType,roomNum,peopleNum,haveChild,createDate)
+        values (#{id},#{userId},#{checkInDate},#{checkOutDate},#{roomType},#{roomNum},#{peopleNum},#{haveChild},#{createDate})
+    </insert>
+    <select id="selectAllOrder" resultMap="Order">
+        select * from Order
+    </select>
+
+    <resultMap id="Order" type="com.example.hotel.po.Order">
+    </resultMap>
+</mapper>