IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> WEB应用开发综合实训day4 -> 正文阅读

[PHP知识库]WEB应用开发综合实训day4

本节实训内容为Spring上传文件和MyBatis简单应用
今天升级Mysql和解bug花了太多时间,没时间自己整理了,就直接贴老师的笔记了,有问题可以私信我。

  • 表单文件上传

    1. 导入依赖

      <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
      <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
      </dependency>
      <!-- 文件上传需要用到request,导入此依赖-->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
      </dependency>
      
      
    2. 配置spring–mvc.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xmlns:mvc="http://www.springframework.org/schema/mvc"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/mvc
              http://www.springframework.org/schema/mvc/spring-mvc.xsd">
      
         <context:component-scan base-package="com.qianfeng.controller"></context:component-scan>
         <mvc:default-servlet-handler/>
         <mvc:annotation-driven/>
         <!--上传文件解析器-->
         <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         </bean>
      </beans>
      
    3. upload_form.html

      <!-- 1. 上传文件一定是post请求
          2.  表单文件上传,要添加enctype="multipart/form-data"
      -->
      <form action="/day4/upload/user" method="post" enctype="multipart/form-data">
          用户名: <input type="text" name="userName"><br>
          密码: <input type="password" name="userPass"><br>
          年龄: <input type="text" name="userAge"><br>
          上传头像: <input type="file" name="userFile"> <br>
          <input type="submit" value="提交">
      </form>
      
    4. UploadController

      @Controller
      @RequestMapping("/upload")
      public class UploadController {
      
          /**
           * 1. 接收普通输入框的参数
           * 2. 接收上传文件
           * 注意事项:
           *      1. 使用MultipartFile接收上传文件,并且参数与上传文件的name一致
           *      2. 接收其他表单参数的实体类对象,上传文件路径属性不要跟上传文件的name一致,避免出现400报错
           */
          @RequestMapping("/user")
          @ResponseBody
          public String uploadUser(MultipartFile userFile, User user, HttpServletRequest request){
              //1. 获取当前项目的路径
              //D:\student\jike\day4_upload\target\day4_upload\
              String realPath = request.getServletContext().getRealPath("/");
              //2. 文件存储的父文件夹
              String parentPath = realPath+"upload_img/";
              //3. 父文件夹判断是否存在,不存在创建
              File parentFile = new File(parentPath);
              if(!parentFile.exists()){
                  //创建文件夹
                 parentFile.mkdirs();
              }
              //4. 文件名称不能重复(使用当前毫秒数,但是文件后缀需要获取)
              String fileName = System.currentTimeMillis()+getFileSuffix(userFile.getOriginalFilename());
              try {
                  //5. 项目最终上传的路径
                  //D:\student\jike\day4_upload\target\day4_upload\xxx.jpg
                  userFile.transferTo(new File(parentPath+fileName));
              } catch (IOException e) {
                  e.printStackTrace();
              }
              user.setUserPhoto("upload_img/"+fileName);
              System.out.println(user);
              return "success";
          }
          //返回文件后缀  x.x.gif
          public static String getFileSuffix(String originalName){
              //获取最后一个点的下标
              int index = originalName.lastIndexOf(".");
              //从某下标开始截取
              return originalName.substring(index);
          }
      }
      
  • Mybatis

    1. 数据库安装与配置(参考群文档)

    2. mybatis官网:https://mybatis.org/mybatis-3/zh/index.html

    3. ** 介绍:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。**

    4. Mybatis配置步骤

      • 创建quickstart项目

      • 导入依赖

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        
      • mybatis对数据库的增删查改都依赖SqlSession,sqlSession是从SqlSessionFactory中获取的,SqlSessionFactory是通过SqlSessionFactoryBuilder()读取mybatis的配置文件构建出来的

      • resources中创建mybatis-config.xml

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE configuration
                PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
            <!--开发  测试  生产-->
            <environments default="development">
                <environment id="development">
                    <!--mybatis默认使用的jdbc事务-->
                    <transactionManager type="JDBC"/>
                    <!--数据源-->
                    <dataSource type="POOLED">
                        <!--
                            mysql 8.X:com.mysql.cj.jdbc.Driver
                        -->
                        <property name="driver" value="com.mysql.jdbc.Driver"/>
                        <!--
                            mysql 8.x: 必须配置时区
                            jdbc:mysql://localhost:3306/db_mybatis_wenli?serverTimezone=Asia/Shanghai
                        -->
                        <property name="url" value="jdbc:mysql://localhost:3306/db_mybatis_wenli?characterEncoding=utf-8"/>
                        <!--自己数据库账号-->
                        <property name="username" value="root"/>
                        <!--自己数据库密码-->
                        <property name="password" value="root"/>
                    </dataSource>
                </environment>
            </environments>
            <mappers>
                <!--将dao接口对应的mapper文件注册进来-->
                <mapper resource="UserMapper.xml"></mapper>
            </mappers>
        </configuration>
        

        千万不要忘记Mapper文件的注册??????

      • dao接口

        public interface UserDao {
        
            /**
             * 添加数据
             */
            void addUser(User user);
        }
        
      • dao接口对应的Mapper文件(resources/UserMapper.xml)

        <?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">
        
        
        <!--
            namespace:对应dao接口的全类名
        -->
        <mapper namespace="com.qianfeng.dao.UserDao">
            <!--
                id跟dao接口中的方法名保持一致
                parameterType:传入的参数类型
                mybatis传参:使用#{变量名}
            -->
            <insert id="addUser" parameterType="com.qianfeng.bean.User">
                insert into tb_user(user_name,hobby,age)
                value(#{name},#{hobby},#{age})
            </insert>
        </mapper>
        
      • 代码测试

        /**
             * 添加内容
        */
        @Test
        public void testInsert(){
            try {
                InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                //获取SqlSession
                SqlSession sqlSession = sqlSessionFactory.openSession();
                //数据库curd依赖dao,建立sqlSession与Dao接口的关系
                UserDao userDao = sqlSession.getMapper(UserDao.class);
                User user = new User();
                user.setName("李四");
                user.setHobby("唱歌跳舞");
                user.setAge(12);
                userDao.addUser(user)
                //增删改都需要提交事务
                sqlSession.commit();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        

        注意:增删改都需要提交事务

    5. 测试mybatis查询数据

      • UserDao接口

        /**
             * 根据id查询对象
             * @param id
             * @return
             */
        User getUserById(int id);
        
      • UserMapper

        <!--
                parameterType:可以不写,因为会自动识别
                mybatis查询之后,会将查询的结果自动给你返回的对象赋值
            -->
        <select id="getUserById" resultType="com.qianfeng.bean.User">
            select id,user_name as name,hobby,age
            from tb_user where id=#{id}
        </select>
        

        注意:如果实体类属性与表中字段名不一样的话,返回结果为空,所以可以通过取别名解决问题??????

      • 结果测试

        /**
             * 根据id查询对象
             */
        @Test
        public void testGetUserById(){
            try {
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
                SqlSession sqlSession = sqlSessionFactory.openSession();
                UserDao userDao = sqlSession.getMapper(UserDao.class);
                User user = userDao.getUserById(2);
                System.out.println(user);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 23:53:54  更:2021-09-10 23:54:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:29:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码