zoukankan      html  css  js  c++  java
  • SSM003/构建Maven单模块项目(二)

    一。Controller基础代码(mooc)

    1。UserController.java

     1 /**
     2      *springmvc1-2:返回jsp页面
     3      * 请求URL: /user/getUserById?userId=1
     4      * */
     5     @RequestMapping(value = "/getUserById",method = {RequestMethod.GET,RequestMethod.POST})
     6     public String getUserById(@RequestParam("userId") Long userId,Model model){
     7         User user=iUserService.getUserById(userId);
     8         model.addAttribute(user);
     9         return "user";
    10     }
    View Code

    2。IUserService.java

    1 User getUserById(Long userId);
    View Code

    3。UserServiceImpl.java

    1 @Override
    2     public User getUserById(Long userId) {
    3         return userMapper.getUserById(userId);
    4     }
    View Code

    4。UserMapper.java

    1 public User getUserById(Long userId);
    View Code

    5。UserMapper.xml

    1 <select id="getUserById" parameterType="java.lang.Long" resultMap="userResultMap">
    2         select user_id,user_name,user_pwd,age,email from com_user
    3         <where>
    4             <if test="_parameter!=null">
    5                 and user_id=#{userId}
    6             </if>
    7         </where>
    8     </select>
    View Code

    6。user.jsp (注意pom.xml引入taglib依赖 & jsp引入taglib标签)

    注意:前台取值,直接从user取值即可。

     1 <%@ page contentType="text/html;charset=UTF-8"%>
     2 <%@ include file="/WEB-INF/view/include/taglib.jsp" %>
     3 <!DOCTYPE html>
     4 <html lang="en">
     5 <head>
     6     <title>jsp</title>
     7 </head>
     8 <body>
     9   <h2>out put...</h2>
    10   <h3>${user.userName}</h3>
    11 </body>
    12 </html>
    View Code

    浏览器访问http://localhost:60268/user/getUserById?userId=1即可直接返回结果。

    遇到的问题:

    问题原因:

    mapper.xml文件原代码

    1 <select id="getUserById" parameterType="java.lang.Long" resultMap="userResultMap">
    2         select user_id,user_name,user_pwd,age,email from com_user
    3         <where>
    4             <if test="userId!=null and userId!=''">
    5                 and user_id=#{userId}
    6             </if>
    7         </where>
    8     </select>
    View Code

    <if test="userId!=null and userId!=''" ...异常(test验证时出现异常)。

    解决方案:

    将<if test="userId!=null and userId!=''" ...替换为<if test="_parameter!=null">解决问题。

    参考博客:https://www.cnblogs.com/soundcode/p/6523555.html

    二。Controller现代方式-Restful风格

    1。UserController.java

    注意:参数应用注解@PathVariable

     1 /**
     2      * Restful风格的URL
     3      * 请求URL: /user/getUserById2/{userId} :{userId}表示路径变量
     4      * */
     5     @RequestMapping(value = "/getUserById2/{userId}",method = {RequestMethod.GET,RequestMethod.POST})
     6     public String getUserById2(@PathVariable("userId") Long userId, Map<String,Object> map){
     7         User user=iUserService.getUserById(userId);
     8         map.put("user",user);
     9         return "user";
    10     }
    View Code

    2。user.jsp (取数方式同上:user.userName)

    地址栏访问:http://localhost:60268/user/getUserById2/1  (1可以为传入的动态变量)

    三。Controller传统方式(HttpServletRequest)

    1。UserController.java

     1  /**
     2      * 使用传统的HttpServletRequest之类的对象
     3      * 请求url: /user/getUserById3?userId=1
     4      * */
     5     @RequestMapping(value = "/getUserById3",method = {RequestMethod.GET,RequestMethod.POST})
     6     public String getUserById3(HttpServletRequest request){
     7         Long userId=Long.valueOf(request.getParameter("userId"));
     8         User user=iUserService.getUserById(userId);
     9         request.setAttribute("user",user);
    10         return "user";
    11     }
    View Code

    地址栏访问:http://localhost:60268/user/getUserById3?userId=1

    小结:

    注解使用:

    【1】@Controller:用于定义在类级别上,表示该类要被DispatcherServlet管理

    【2】@RequestMapping:定义在类级别 & 方法级别上。用于组成URL完整路径

    【3】@RequestParam / @PathVariable:定义在参数上。用于将参数绑定到URL

    四。Binding

    binding:将请求中的字段按照名字匹配的原则填入模型对象

    1。UserController.java

     1  /**
     2      * Binding:将请求中的字段按照名字匹配的原则填入模型对象
     3      * */
     4     @RequestMapping(value = "/add",method = RequestMethod.GET)
     5     public String add(){
     6         return "user/user-add";
     7     }
     8 
     9     @RequestMapping(value = "/save",method = RequestMethod.POST)
    10     public String save(User user){
    11         iUserService.save(user);
    12         return "redirect:getUserById2/"+user.getUserId();
    13     }
    View Code

    2。在WEB-INF/view包下面创建包user,在user包下创建文件user-add.jsp

    index.jsp:借助index.jsp访问/user/add 跳转到user-add.jsp页面

    <h3><a href="/user/add">send request(add)</a></h3>
    View Code

    user-add.jsp

     1 <%@ page contentType="text/html;charset=UTF-8"%>
     2 <%@ include file="/WEB-INF/view/include/taglib.jsp" %>
     3 <!DOCTYPE html>
     4 <html lang="en">
     5 <head>
     6     <title>jsp</title>
     7 </head>
     8 <body>
     9 <!--2.模拟binding -->
    10 <form name="addForm" action="/user/save" method="post">
    11     <div>
    12         <span>add info</span><br>
    13         userId: <input type="text" id="userId" name="userId" value=""><br>
    14         userName: <input type="text" id="userName" name="userName" value=""><br>
    15         userPwd: <input type="text" id="userPwd" name="userPwd" value=""><br>
    16         age: <input type="text" id="age" name="age" value=""><br>
    17         email: <input type="text" id="email" name="email" value=""><br>
    18         <input type="submit" id="submit" name="submit" value="submit"><br>
    19     </div>
    20 </form>
    21 </body>
    22 </html>
    View Code

    3。IUserService

    int save(User user);
    View Code

    4。UserServiceImpl

     @Override
        public int save(User user) {
            return userMapper.save(user);
        }
    View Code

    5。UserMapper.java

    public int save(User user);
    View Code

    6。UserMapper.xml

     1 <insert id="save" parameterType="com.csvalue.model.User">
     2         <!--
     3           说明:[keyProperty]:selectKey 语句结果应该被设置的目标属性(指定为哪一列生成主键)
     4                [resultType]:结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。(与keyProperty类型一致)
     5                [order]:这可以被设置为 BEFORE 或 AFTER。
     6                      BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行insert语句。
     7                      AFTER,那么先执行insert语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
     8          注意1:该<insert>语句传入的参数为User对象(POJO),<selectKey>会将结果放入参数User中。keyProperty对应的字段在User中必须有相应的setter方法,setter参数类型也要一致。否则报错。
     9          注意2:在MySQL中是支持主键自增的,那么这个时候你的order的值就必须设置为after,也就是在执行完insert操作之后才可以获取主键的值,否则的话就会报错(因为在没有执行insert操作之前没有主键的值)
    10                 在oracle这种不支持主键自增的数据库中 , order的值必须设置为before , 先为序列进行赋值 , 然后在执行插入操作
    11          -->
    12         <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="userId">
    13             select LAST_INSERT_ID() as ID
    14         </selectKey>
    15         insert into com_user(user_id,user_name,user_pwd,age,email)
    16         values (
    17         #{userId,jdbcType=INTEGER},
    18         #{userName,jdbcType=VARCHAR},
    19         #{userPwd,jdbcType=VARCHAR},
    20         #{age,jdbcType=INTEGER},
    21         #{email,jdbcType=VARCHAR}
    22         )
    23     </insert>
    View Code

    注意点:

    【1】。UserMapper.xml使用<selectKey>,则表com_user表user_id字段必须设置为自增,类型为int,且为主键

          alter table com_user change user_id user_id  int primary key auto_increment;

     

    浏览器访问:localhost:8080 ->跳转到index.jsp页面 -》点击链接 -》 进入user-add.jsp

     

    填写信息。submit-> 

  • 相关阅读:
    temp etc/hosts
    chrome 32位安装好没法访问解决命令 64位也会有这样的问题
    函数与存储过程的区别
    VS创建新的本地数据库
    主从同步
    自定义函数Function
    特殊存储过程——触发器Trigger
    存储过程Procedure
    工具:sql server profiler(分析器)
    数据表访问
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9197127.html
Copyright © 2011-2022 走看看