知识就是力量

目录

2012-12-12 用户更新

2012-12-13 产品CRUD

2012-12-14 mybatis

2012-12-15 


更新步骤:

一:servlet  六大步骤

1.乱码处理 

req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");

2.获取前端的值

req.getParameter("");

3.封装到model

UserModel Model=new UserModel();
Model.setXX(XX);

4.调用service

UserService userService=new UserServiceImpl();

5.得到返回值

int count =userService.update(Model);

6.返回给前端

resp.getWriter().println(JSONObject.toJSONString(count));

二.调用service

三调用dao

四JDBC

 

难点:

* 1)servlet 封装model

* 2)sql语句 要判断是否为空等操作

* 3)最后又逗号怎么解决

 

* 1.修改密码需要单独设置

* 2.删除:

* 3.查询一条数据的时候,必备条件就算id

* 4.根据分页去查询

* 5.每次跟新model的时候,都会重新设置set和get方法,比较麻烦,所以有没有自动生成set和get方法的插件呢?

                  * lombok插件

* 6.sql语句每个单词前后都记得加空格

2012-12-13 产品CRUD

* 新增

* 1.model 和数据库的产品表 的列名一一对应

* 2.servlet 前端想要传递什么数据给后台(数据库想要保存什么数据)

        2.1乱码处理 

        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        2.2获取前端的值

        req.getParameter("");

        2.3封装到model

        UserModel Model=new UserModel();
        Model.setXX(XX);

        2.4调用service

        UserService userService=new UserServiceImpl();

        2.5得到返回值

        int count =userService.update(Model);

        2.6返回给前端

        resp.getWriter().println(JSONObject.toJSONString(count));

* 3.service 逻辑服务处 处理逻辑和调用dao层

* 4.dao 写sql语句,调用JDBC的更新/查询

* ---------------------------------------------------------

* 文件上传:

* 1.引入jar包

<dependency>
    <groupId>org.lucee</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
private static final long serialVersionUID = 1L;

    // 上传文件存储目录
    private static final String UPLOAD_DIRECTORY = "upload";

    // 上传配置
    private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;  // 3MB
    private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40; // 40MB
    private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50; // 50MB

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
        // 检测是否为多媒体上传
        if (!ServletFileUpload.isMultipartContent(req)) {
            // 如果不是则停止
            PrintWriter writer = null;
            try {
                writer = resp.getWriter();
            } catch (IOException e) {
                e.printStackTrace();
            }
            writer.println("Error: 表单必须包含 enctype=multipart/form-data");
            writer.flush();
            return;
        }

        // 配置上传参数
        DiskFileItemFactory factory = new DiskFileItemFactory(MEMORY_THRESHOLD,new File(System.getProperty("java.io.tmpdir")));
        // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        // 设置临时存储目录
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);

        // 设置最大文件上传值
        upload.setFileSizeMax(MAX_FILE_SIZE);

        // 设置最大请求值 (包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);
        // 中文处理
        upload.setHeaderEncoding("UTF-8");

        // 构造临时路径来存储上传的文件
        // 这个路径相对当前应用的目录
        String uploadPath = req.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
        // 如果目录不存在则创建
        createDirectory(uploadPath);
        try {
            // 解析请求的内容提取文件数据
            @SuppressWarnings("unchecked")
            List<FileItem> formItems = upload.parseRequest(req);

            if (formItems != null && formItems.size() > 0) {
                // 迭代表单数据
                for (FileItem item : formItems) {
                    // 处理不在表单中的字段
                    if (!item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        fileName=System.currentTimeMillis()+"--"+fileName;
                        String filePath = uploadPath + File.separator + fileName;
                        File storeFile = new File(filePath);
                        // 在控制台输出文件的上传路径
                        System.out.println(filePath);
                        // 保存文件到硬盘
                        item.write(storeFile);
                        req.setAttribute("message",
                                "文件上传成功!");
                        //                        拷贝一份文件到web目录下
                        String path = storeFile.getPath().split("out")[0] + "/web/" + UPLOAD_DIRECTORY + "/";

                        copyFile(storeFile, fileName);

                        resp.getWriter().println(JSONObject.toJSONString("/" + UPLOAD_DIRECTORY + "/" + fileName));
                    }
                }
            }
        } catch (Exception ex) {
            req.setAttribute("message",
                    "错误信息: " + ex.getMessage());
        }

    }
    private void createDirectory(String uploadPath) {
        // 如果目录不存在则创建
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }
    }
    private void copyFile(File storeFile, String fileName){
        String path = storeFile.getPath().split("out")[0] + "/src/main/web/" + UPLOAD_DIRECTORY;
        createDirectory(path);
        File file = new File(path, fileName);
        try (InputStream inputStream = new FileInputStream(storeFile);
             OutputStream outputStream = new FileOutputStream(file);) {
            int read = 0;
            while ((read = inputStream.read()) != -1) {
                outputStream.write(read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2012-12-14 mybatis

1.引入mybatis包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>
2.配置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>
    <!--    连接数据库的资源文件-->
    <properties resource="jdbc.properties"></properties>
    <!--    数据库的配置-->
    <settings>
        <!-- 控制台打印sql语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <!--开启数据库事务管理-->
            <transactionManager type="JDBC"/>
            <!--使用连接池,不用频繁打开关闭数据库,提高数据库效率。-->
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql映射文件-->
<!--        <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
        <!--Mapper代理方式-->
        <package name="com.itheima.mapper"/>
    </mappers>
</configuration>
3.导入:jdbc.properties
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC
db.username=*****
db.password=******
4.配置Mapper映射文件-----配置数据表CRUD操作的sql语句,在mybatis的核心配置文件中加载映射接口
<?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">


<mapper namespace="com.itheima.mapper.UserMapper">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
</mapper>

5.操作数据库
  //加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //执行sql
//        List<User> users = sqlSession.selectList("test.selectAll");
        //获取UserMapper接口代理对象
        UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = usermapper.selectAll();
        System.out.println(JSON.toJSONString(users));
        //释放资源
        sqlSession.close();

2012-12-15 

 

修改:只修改状态

* 只需要一个id即可,

* update product set enable=1 where id=5;

* String sql="UPDATE product SET enable = CASE enable WHEN 0 THEN 1 WHEN 1 THEN 0 END WHERE id="+productModel.getId();

* String sql = "UPDATE product SET enable = 1-enable WHERE id = " + productModel.getId();

* String sql = "UPDATE product SET enable=enable^1 where id=" + productModel.getId();

 

对于前端来说,我们应该返回一个统一的格式,让别人好理解

* layui

* {

* "code": 0,

* "msg": "",

* "count": 1000,

* "data": [{}, {}]

* }

* servlet 只做两件事情:得到前端的值,返回数据前端:不要做任何逻辑关系

 

对于service和dao都封装了一个基类

* 对于service 做了一个统一的返回值数据格式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值