一。Controller基础代码(mooc)

1。UserController.java

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

2。IUserService.java

 User getUserById(Long userId);

3。UserServiceImpl.java

 @Override
public User getUserById(Long userId) {
return userMapper.getUserById(userId);
}

4。UserMapper.java

 public User getUserById(Long userId);

5。UserMapper.xml

 <select id="getUserById" parameterType="java.lang.Long" resultMap="userResultMap">
select user_id,user_name,user_pwd,age,email from com_user
<where>
<if test="_parameter!=null">
and user_id=#{userId}
</if>
</where>
</select>

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

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

 <%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/view/include/taglib.jsp" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>jsp</title>
</head>
<body>
<h2>out put...</h2>
<h3>${user.userName}</h3>
</body>
</html>

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

遇到的问题:

问题原因:

mapper.xml文件原代码

 <select id="getUserById" parameterType="java.lang.Long" resultMap="userResultMap">
select user_id,user_name,user_pwd,age,email from com_user
<where>
<if test="userId!=null and userId!=''">
and user_id=#{userId}
</if>
</where>
</select>

<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

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

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

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

三。Controller传统方式(HttpServletRequest)

1。UserController.java

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

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

小结:

注解使用:

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

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

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

四。Binding

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

1。UserController.java

  /**
* Binding:将请求中的字段按照名字匹配的原则填入模型对象
* */
@RequestMapping(value = "/add",method = RequestMethod.GET)
public String add(){
return "user/user-add";
} @RequestMapping(value = "/save",method = RequestMethod.POST)
public String save(User user){
iUserService.save(user);
return "redirect:getUserById2/"+user.getUserId();
}

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>

user-add.jsp

 <%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/view/include/taglib.jsp" %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>jsp</title>
</head>
<body>
<!--.模拟binding -->
<form name="addForm" action="/user/save" method="post">
<div>
<span>add info</span><br>
userId: <input type="text" id="userId" name="userId" value=""><br>
userName: <input type="text" id="userName" name="userName" value=""><br>
userPwd: <input type="text" id="userPwd" name="userPwd" value=""><br>
age: <input type="text" id="age" name="age" value=""><br>
email: <input type="text" id="email" name="email" value=""><br>
<input type="submit" id="submit" name="submit" value="submit"><br>
</div>
</form>
</body>
</html>

3。IUserService

int save(User user);

4。UserServiceImpl

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

5。UserMapper.java

public int save(User user);

6。UserMapper.xml

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

注意点:

【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-> 

SSM003/构建Maven单模块项目(二)的更多相关文章

  1. SSM003/构建Maven单模块项目(一)

    一.环境准备 1.开发工具:IDEA 2.JDK版本:jdk1.8 3.Maven版本:apache-maven-3.2.5 4.数据库mysql. 二.基于Maven构建web项目 Step1:Fi ...

  2. Jenkins构建Maven多模块项目时,单独编译子模块,并且不触发构建其它模块

    一.Jenkins构建Maven多模块项目时,单独编译子模块 配置: 1.Root POM指向父pom.xml 2.Goals and options指定构建模块的参数:mvn -pl jsoft-w ...

  3. 使用http://start.spring.io/构建maven微服务项目的几个坑及eclipse构建spring boot微服务项目

    一,使用http://start.spring.io/构建maven微服务项目 本来嘛,直接构建的项目导入时没有任何问题的导入就可以运行,可是最近构建好项目,然后导入,种种报错 1.导入之后POM报错 ...

  4. Eclipse+Maven创建webapp项目<二> (转)

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  5. Eclipse+Maven创建webapp项目<二>

    Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...

  6. eclipse构建maven的web项目(转载)

    eclipse构建maven的web项目 分类: java opensource2013-12-25 16:22 43人阅读 评论(0) 收藏 举报 maven框架webappwebeclipse 使 ...

  7. SSM001/构建maven多模块项目

    一.Idea构建maven多模块项目 1.创建maven项目--创建父模块 [1].File->New->Module... [2].点击next,填写:GroupId,ArtifactI ...

  8. Maven 使用Eclipse构建Maven的SpringMVC项目

    首先Eclipse需要安装Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e. 用MyEclipse安装Maven插件,建出的Maven项目有些问题 ...

  9. 使用Eclipse构建Maven的SpringMVC项目

    一.直接建立Maven项目方法1.建立Maven项目 接下来使用Eclipse的maven构建一个web项目,以构建SpringMVC项目为例: 1.1 选择建立Maven Project 选择Fil ...

随机推荐

  1. oracle数据库架构

    3.1 Client/Server Oracle 采取的是 Client/Server 架构. oracle 服务端分为两部分: Instance 实例 Database 数据库 实例, 又称为数据库 ...

  2. Git提交代码的正确姿势

    按此步骤基本没问题,中间有conflict,需要手动解决. 1.git stash 2.git pull 3.git stash pop 4.git add --xxx 5.git commit -m ...

  3. easyui自学模板代码

    index.jsp源码 <%@ page language="java" contentType="text/html; charset=UTF-8" p ...

  4. 基于python3环境下搭建Robot Framework 自动化测试框架(一)

    大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...

  5. 【leetcode】473. Matchsticks to Square

    题目如下: 解题思路:居然把卖火柴的小女孩都搬出来了.题目的意思是输入一个数组,判断能否把数组分成四个子数组,使得每个子数组的和相等.首先我们可以很容易的求出每个子数组的和应该是avg = sum(n ...

  6. Hybris commerce产品主数据的搜索API,批量返回若干主数据的值

    新建一个产品,identifier设置为i042416-1,创建之后立即能够在Backoffice里搜索出来: 等到Storefront的indexing做完之后,前台通过关键字i042416也能将这 ...

  7. css盒子模型中的border属性

        认识border属性 我们可以通过boder属性来为元素设置边框:元素的边框 (border) 是围绕元素内容和内边距的一条或多条线.CSS border 属性允许你规定元素边框的样式.宽度和 ...

  8. Git 使用的问题总结

    1.git stash pop 显示 xxx already exists, no checkout 当我们先使用 git stash save -u '保存信息说明' 来储藏更改,然后拉取代码 gi ...

  9. HDU 1298 T9 ( 字典树 )

    题意 : 给你 w 个单词以及他们的频率,现在给出模拟 9 键打字的一串数字,要你在其模拟打字的过程中给出不同长度的提示词,出现的提示词应当是之前频率最高的,当然提示词不需要完整的,也可以是 w 个单 ...

  10. oracle数据泵导入导出

    1.首先建立DUMP_DIR sqlplus / as sysdba select * from dba_directories 如果没有DUMP_DIR就执行下面的语句 CREATE OR REPL ...