《web应用技术》第5次课后作业

1、在idea中配置好数据源

  • 准备工作(创建springboot工程、数据库表user、实体类User)
  • 引入相关依赖,配置数据库连接信息
  • 编写SQL语句(注解/XML)

创建数据表user

创建实体类 User

package com.caz.pojo;

public class User {
    private Integer id;
    private String name;
    private short age;
    private short gender;
    private String phone;

    public User() {
    }

    public User(Integer id, String name, short age, short gender, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public short getAge() {
        return age;
    }

    public void setAge(short age) {
        this.age = age;
    }

    public short getGender() {
        return gender;
    }

    public void setGender(short gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }
}

配置数据库连接信息

编写SQL语句

package com.caz;

import com.caz.mapper.UserMapper;
import com.caz.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest//springboot整合单元测试的注解
class MybatisApplicationTests {
    @Autowired//依赖注入
    private UserMapper userMapper;

    @Test
    public void testListUser(){
        List<User> userList = userMapper.list();//调用接口中的list方法来查询
        userList.stream().forEach(user ->{
            System.out.println(user);
        });
    }
}

测试程序运行结果

2、视频案例中只给出了查询所有结果的示例,在这个基础上完成添加、删除、修改操作的代码。

插入信息

//插入信息
    @Insert("insert into user(name, age, gender, phone) values (#{name}, #{age}, #{gender}, #{phone})")
    public void insert(User user);
 @Test
    public void testInsert(){
        //构造对象
        User user=new User();
        user.setName("陈安志");
        user.setAge((short) 20);
        user.setGender((short)1);
        user.setPhone("15671629190");
        userMapper.insert(user);
    }

 

删除信息

//删除指定id的信息
    @Delete("delete from user where id=#{id}")
    public void delete(Integer id);
@Test
    public void testDelete() {
        userMapper.delete(3);
        testListUser();
    }

修改信息 

@Update("update user set name=#{name} where id=#{id} ")
    public void update(User user);
@Test
    public void testUpdate(){
        List<User> userList = userMapper.list();
        User user=userList.get(2);
        user.setName("222");
        userMapper.update(user);
        testListUser();
    }

3、idea的sql 控制台,可以测试sql语句是否正确。所以mapper接口中的sql语句可以先测试。对于有参数的情况,用?代替。

4、lombok库的使用。尝试将实体类采用注解的方式来实现。 (通过添加注解,使其自动为实体类中的属性生成相应的方法)

5、对以下案例使用mybatis进行添加、删除、修改、更新的操作。(不需要实现页面,test中控制台能输出结果就行。)

首先创建表writer,并插入信息

create table writer(
                       id int unsigned primary key auto_increment comment 'ID',
                       name varchar(5) comment '姓名',
                       gender char comment '性别',
                       dynasty varchar(10) comment '朝代',
                       title varchar(15) comment '头衔',
                       style varchar(20) comment '风格'
) comment '诗人信息';
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'陶渊明','男','东晋末至南朝宋初期','诗人和辞赋家','古今隐逸诗人之宗');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'王维','男','唐代','诗佛','空灵、寂静');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'李白','男','唐代','诗仙','豪放飘逸的诗风和丰富的想象力');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'李商隐','女','唐代','诗坛鬼才','无');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'李清照','女','宋代','女词人','婉约风格');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'杜甫','男','唐代','诗圣','反映社会现实和人民疾苦');
insert into writer(id, name, gender, dynasty,title,style) VALUES (null,'苏轼','男','北宋','文学家、书画家,诗神','清新豪健的诗风和独特的艺术表现力');

创建实体类Writer 

package com.caz.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Writer {
    private Integer id;
    private String name;
    private char gender;
    private String dynasty;
    private String title;
    private String style;
}

查找

@Select("select * from writer")//查询注解,表明执行查询操作
    public List<Writer> list();
 @Test
    public void testListWriter(){
        List<Writer> writerList = writerMapper.list();//调用接口中的list方法来查询
        writerList.stream().forEach(writer ->{
            System.out.println(writer);
        });
    }

 

删除

//删除指定id的信息
    @Delete("delete from writer where id=#{id}")
    public void delete(Integer id);
@Test
    public void writerDelete() {
        writerMapper.delete(3);
        testListWriter();//列出结果
    }

 

插入

@Test
    public void writerInsert(){
        //构造对象
        Writer writer=new Writer();
        writer.setName("王安石");
        writer.setGender('男');
        writer.setDynasty("唐代");
        writer.setTitle("五柳先生");
        writer.setStyle("含蓄深婉");
        writerMapper.insert(writer);
        testListWriter();//列出结果
    }
//插入信息
    @Insert("insert into writer(name, gender, dynasty, title,style) values (#{name}, #{gender}, #{dynasty}, #{title},#{style})")
    public void insert(Writer writer);

 

更新 

//更新信息
    @Update("update writer set title=#{title} where id=#{id} ")
    public void update(Writer writer);
@Test
    public void writerUpdate(){
        Writer writer=new Writer();
        writer.setId(9);
        writer.setTitle("临川先生");
        writerMapper.update(writer);
        testListWriter();
    }

 

 

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是大数据技术架构HDFS的课后作业: 1. 请简述HDFS的三种副本机制,并比较它们的优缺点。 答:HDFS的三种副本机制分别是简单复制、带宽限制复制和管道复制。 - 简单复制:将文件完整地复制到多个节点上,这样可以实现数据的冗余备份,提高数据的可靠性。优点是实现简单,但缺点是占用了大量的存储空间,且不便于数据的并发读写。 - 带宽限制复制:将文件分成若干个数据块,分别复制到不同的节点上,但每个节点只能复制一个数据块。这样可以实现数据的冗余备份,同时减少了副本之间的数据冲突。优点是节约存储空间,缺点是复制速度较慢。 - 管道复制:将文件分成若干个数据块,通过管道的方式依传输到不同的节点上,每个节点只负责处理一部分数据块。这样可以实现数据的并发读写和冗余备份。优点是复制速度快,且占用的存储空间较少,但缺点是实现较为复杂。 2. 请简述HDFS的读写流程,并分别介绍读写操作的细节。 答:HDFS的读写流程分别如下: - 读流程:客户端向NameNode发起读请求,NameNode返回包含所需数据块的DataNode列表,客户端通过网络连接DataNode读取数据块,如果读取的数据块不完整,则继续向其他DataNode请求数据块,直到读取完整个文件。 - 写流程:客户端向NameNode发起写请求,NameNode返回包含新建文件所需数据块的DataNode列表,客户端通过网络连接DataNode写入数据块,每写完一个数据块,DataNode会将数据块复制到其他的DataNode上,以实现数据的冗余备份。 读操作的细节如下:客户端读取数据时,会根据数据块的大小进行分段读取,每个数据块的大小默认为128MB,如果读取的数据块不完整,则需要向其他DataNode请求数据块,这时读取的数据块会被缓存到客户端的本地磁盘中,以便后续读取。同时,HDFS还支持数据的压缩、加密等操作,以提高数据的传输效率和安全性。 写操作的细节如下:客户端写入数据时,会将数据分成若干个数据块,每个数据块的大小默认为128MB,然后将数据块依写入DataNode中。每个DataNode会将写入的数据块进行复制,以实现数据的冗余备份。同时,HDFS还支持数据的压缩、加密等操作,以提高数据的传输效率和安全性。 3. 请简述HDFS的故障恢复机制,并介绍故障恢复的过程。 答:HDFS的故障恢复机制主要包括NameNode的故障恢复和DataNode的故障恢复。 - NameNode的故障恢复:如果NameNode发生故障,HDFS会切换到备用的NameNode上,进行故障恢复。此时,备用的NameNode会将元数据从Zookeeper中恢复,然后重新启动HDFS服务。在故障恢复期间,HDFS的读写操作将被暂停。 - DataNode的故障恢复:如果一个DataNode发生故障,HDFS会将该DataNode上的数据块复制到其他的DataNode上,以实现数据的冗余备份。如果某个数据块的所有副本都不可用,HDFS会将该数据块标记为损坏,并尝试从其他节点上复制数据块,以恢复数据的完整性。 故障恢复的过程如下:当NameNode或DataNode发生故障时,HDFS会将故障节点的状态标记为“不可用”,然后将该节点上的数据块复制到其他节点上,以实现数据的冗余备份。如果某个数据块的所有副本都不可用,HDFS会将该数据块标记为“损坏”,然后尝试从其他节点上复制数据块,以恢复数据的完整性。在故障恢复期间,HDFS的读写操作可能会受到一定的影响,但一般不会影响到整个HDFS系统的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值