Layui的文件上传
操作步骤
1.前端-文件上传的表单
<form action="访问后端地址" method="post" enctype="multipart/form-data" > 上传图片:<input type="file" name="file" /> </form> enctype="multipart/form-data" 支持多文件上传 必须设置为post提交 上传组件:input type="file"
2. 后端访问接口地址中--->Servlet提供的@MultipartConfig
@MulipartConfig--->会前端文件上传组件 input type="file"获取到文件流对象
3.Java代码处理
package com.qf.controller; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; /** * 文件上传 */ @WebServlet("/upload") @MultipartConfig public class UploadFileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收其他的表单数据 String pname = request.getParameter("pname"); System.out.println(pname) ; //接收 前端enctype="multipart/form-data"--->支持post //1)通过请求对象Part对象----它可以解析文件名称 Part part = request.getPart("file") ;//参数--->文件上传组件的name属性值 //2)获取上传文件的名称 String fileName = part.getSubmittedFileName() ; System.out.println("上传文件的名称是:"+fileName) ; //3)获取文件的存储路径---项目部署路径 String realPath = request.getServletContext().getRealPath("/myImage"); System.out.println("文件存储路径是:"+realPath) ; // D:\EE_2302\day43\code\Maven_2302\src\main\webapp\myImage //4)通过part对象将写入磁盘上--->realpath地址里面 part.write(realPath+"/"+fileName); // part.write("") ; //绝对路径 } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
1. layUI表格数据(table data)的获取
2.MyBatis框架
"高级JDBC" 什么是Mybatis Mybatis的入门 Mybatis涉及到的涉及模式
3.Mybatis的使用
mybatis的crud---使用单元测试进行测试
二阶段使用Apache提供的对jdbc的简易封装的工具库--commons-dbutils
理解就一个插件,需要自己书写大量代码---而且针对原生jdbc封装(7大步骤) 原生的写法弊端: package com.qf.jdbc_01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; /** * @author 高圆圆 * @date 2023/5/5 14:07 */ public class JDBCTest { public static void main(String[] args) throws Exception { //1)导入驱动jar包 //2)注册驱动 Class.forName("com.mysql.jdbc.Driver") ; //3)获取数据库的连接对象 //存储"硬编码" Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myee2302_db_2", "root", "123456" ); //4)准备sql语句 //sql语句里面的参数没有办法动态判断(如果update语句,如果 当前参数为null,没有办法直接判断) String sql = "insert into account values(?,?,?)" ; //5)通过连接对象获取预编译对象,并且sql发送给数据库 PreparedStatement ps = conn.prepareStatement(sql) ; //6)参数赋值 //存在"硬编码" ps.setInt(1,5) ; ps.setString(2,"李国栋") ; ps.setInt(3,1000); //7)更新操作 int count = ps.executeUpdate(); //释放资源 ps.close() ; conn.close(); } }
什么是Mybatis
ORM框架:映射框架 框架--是一个半成品,里面使用大量的设计模式,简化书写代码,提供大了的动态sql语句以及结果映射!
入门
1.导入mybatis的依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>
2. 需要准备配置 mybatis核心配置文件 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"> <!--xx.dtd是xml文件约束,约束标签--> <!--核心配置--> <configuration> <!--环境配置--> <environments default="mysql"> <!--可以配置多个环境--> <environment id="mysql"> <!--mybatis事务管理器 连接数据库操作 --> <transactionManager type="JDBC"/> <!--启用mybatis自带的连接池--> <dataSource type="POOLED"> <!--配置连接池这个类中的属性参数 drvier/url/username/password都是 org.apache.ibatis.datasource.pooled.PooledDataSource信息 --> <!--驱动类--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--连接数据库的地址--> <property name="url" value="jdbc:mysql://localhost:3306/myee2302_db_2"/> <!--用户名--> <property name="username" value="root"/> <!--登录密码--> <property name="password" value="123456"/> </dataSource> </environment> <!--配置其他环境--> <!--<environment id="oracle"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> --> </environments>
3.准备好mybatis的持久层接口以及它的映射文件
public interface AccountDao { /** * 查询所有账户 * @return 返回账户列表 */ List<Account> findAllAccounts() ; }
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--映射器的配置 namesapce:名称空间指定接口的完全限定名称 --> <mapper namespace="com.qf.mapper.AccountDao"> <!--大量的sql标签 id必须和接口文件中的方法名必须一致 当前接口中的方法有返回值,返回值如果是实体类型或者是List集合 输出映射:resultType必须要指定为当前实体类型的完全限定名称 --> <select id="findAllAccounts" resultType="com.qf.pojo.Account"> select * from account </select> </mapper>
4.单元测试进行执行
package com.qf.mybatistest; import com.qf.mapper.AccountDao; import com.qf.pojo.Account; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * @author 高圆圆 * @date 2023/5/5 14:48 * 单元测试类 */ public class MybatisTest { @Test public void testFindAll() throws IOException { //1)读取resource下面的mybatis-config.xml文件 //org.apache.ibatis.io.Resources --InputStream getResourceAsStream(配置文件名称) InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //2)创建一个对象SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder() ; //3)创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载流对象 获取到工厂对象 //4)创建 SqlSession---就是执行对象--底层就是PreparedStatement SqlSession sqlSession = sqlSessionFactory.openSession();//自动提交 //5)获取AccountDao接口对象---通过mybatis的动态代理获取接口对象 AccountDao accountDao = sqlSession.getMapper(AccountDao.class);//接口类型字节码文件 //6)调用方法 List<Account> allAccounts = accountDao.findAllAccounts(); if(allAccounts!=null || allAccounts.size()>0){ for(Account account :allAccounts){ System.out.println(account); } } } }
1.mybatis关于模糊查询的语法 '%${value}%'(字符拼接)或者使用 #{}(占位符号)
2.mybatis里面#{}也支持对象图导航语言(快速通过表达式访问bean属性)
@Data//setXXX()/getXXx()/toString() class QueryVo{ private User user ;//getUser() //User--->getUserName() } //通过用户名来查询用户--->输入参数QueryVo这个类型
3.mybatis关于添加用户的时候,获取到最后一次插入数据id值
4.mybatis多个参数传递问题
interface UseDao{ User selectUserByUsernameAndSex(@Param("username")String name,@Param("sex")String gender) ; User selectUserByUsernameAndSex(Map<String,Object> map) ; } //映射文件---> #{param1} #{param2}...依次 (不推荐) //通过mybatis提供的参数绑定的注解 @Param //Map的key值需要和占位符号的内容一致 select * from user where username = #{username} and sex = #{sex}
5.mybatis的其他配置---->配置外部资源文件/配置分页插件/配置实体的包的别名/映射器指定接口的包名
6.mybatis动态的sql语句
一些mybatis动态标签
7. mybatis和Servlet整合
com.qf.pojo ---实体 com.qf.controller: servlet com.qf.service:业务接口---->需要调用dao(mybatis实现)--- 自定义MybatisUtils:读取mybatis核心配置文件,获取接口代理对象 com.qf.dao:接口文件---resource下面的接口映射文件(写sql语句)
Mybatis分页插件PageHelper的使用
1.导包
<!--mybatis的分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency>
2.mybatis-config.xml核心配置文件中配置分页插件拦截器
<!--配置插件--> <plugins> <!--插件里面属性 interceptor指定当前拦截器 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>