学习内容:
- 接着forQuery1的内容,思路见上图
- 新增add功能,URL为tmall_ssm/admin_category_list
- 实现图片上传
实现思路:
- 首先在 CategoryMapper.xml中增加id=”add”的sql语句,使用keyProperty和useGeneratedKeys属性,将自动递增的id值设置在Category对象上
1 | <insert id="add" keyProperty="id" useGeneratedKeys="true" parameterType="Category"> |
[注] Mapper XML的Insert, Update, Delete ‘s Attributes
属性 | 描述 |
---|---|
id | 命名空间中的唯一标识符,可被用来代表这条语句。 |
parameterType | 将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。 |
flushCache | 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句)。 |
timeout | 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。 |
statementType | STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 |
useGeneratedKeys | (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。 |
keyProperty | (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
keyColumn | (仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
databaseId | 如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。 |
- 在CategoryMapper/CategoryService/CategoryServiceImpl中增加add(Category category)方法,代码略
- 新建工具类ImageUtil,提供了change2jpg方法,确保 上传 文件的二进制为jpg格式,目前不接触学习,代码略
- 在CategoryController中增加add方法
1 | @RequestMapping("admin_category_add") |
[说明]
参考深入理解HTTP Session。摘要如下:在Servlet中,session指HttpSession类的对象,是一个 容器,可以存放会话过程中的任何对象,为第一次请求本jsp时所创建,同时赋予其sessionID,根据ID找到session对象。
servletContext是servlet引擎提供用来服务于web应用的接口。servletContext具有名字,唯一映射到文件系统的一个目录。
Web应用中servlet可以使用servlet上下文得到:
- 在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。
- 读取Web应用中文件内容和其他静态资源的功能。
- 互相发送请求的方式。
- 记录错误和信息化消息的功能。
ServletContext()的方法String getRealPath(String path) 给定一个URI,由相对路径path返回文件系统中URI对应的绝对路径。如果不能进行映射,返回null。
getParent方法参考java中的getParentFile
transferTo
public void transferTo(java.io.File dest)
throws java.io.IOException,
java.lang.IllegalStateException
Transfer the received file to the given destination file.
This may either move the file in the filesystem, copy the file in the filesystem, or save memory-held contents to the destination file. If the destination file already exists, it will be deleted first.
[译]将接收的文件传递给指定路径的文件,或者在文件系统中相互传递;或者将内存中内容存入路径文件。若指定路径文件已存在,会先删除旧文件后存入。
If the target file has been moved in the filesystem, this operation cannot be invoked again afterwards. Therefore, call this method just once in order to work with any storage mechanism.
[译]若目标文件不存在将不会触发操作。因此使用任何存储机制都仅调用一次此 方法。
- add方法参数使用了工具类UploadedImageFile(见下面的代码),定义了MultipartFile属性,用于接收上传文件的注入。
1 | public class UploadedImageFile { |
- listCategory.jsp中增加了新增分类页面的代码
1 | <div class="panel panel-warning addDiv"> |
将@RequestMapping修饰的CategoryController.add()方法参数中自动注入name和image