JavaWeb第七次课后作业

1.对Poem表进行删除,插入,修改操作

首先编写PoetMapper接口,定义相关数据库操作,PoetMapper接口具体代码如下:

@Mapper
public interface PoetMapper {
@Select("select * from poet")
    public List<Poet> selectall();
@Insert("insert into poet values(#{id},#{name},#{gender},#{dynasty},#{title},#{style})")
    public boolean insert(Poet poet);
@Select("select * from poet where id=#{id}")
    public List<Poet> selectpart(short id);
@Update("update poet set name=#{name},gender=#{gender},dynasty=#{dynasty},title=#{title},style=#{style} where id=#{id}")
    public boolean update(Poet poet);
@Delete("delete from poet where id=#{id}")
    public boolean delete(short id);
}

编写service事务接口:

public interface PoetService {
    public List<Poet> Sselectall();
    public boolean Sinsert(Poet poet);
    public List<Poet> Sselectpart(short id);
    public boolean Supdate(Poet poet);
    public boolean Sdelete(short id);
}

service具体实现类:

@Service
public class PoetServiceA implements PoetService {
    @Autowired
    PoetMapper poetMapper;
    @Override
    public List<Poet> Sselectall() {
        return poetMapper.selectall();
    }
 
    @Override
    public boolean Sinsert(Poet poet) {
        boolean result = poetMapper.insert(poet);
        return result;
 
    }
 
    @Override
    public boolean Supdate(Poet poet) {
       return poetMapper.update(poet);
    }
 
 
 
    @Override
    public boolean Sdelete(short id) {
        return poetMapper.delete(id);
    }
 
    @Override
    public List<Poet> Sselectpart(short id) {
        return poetMapper.selectpart(id);
    }
}

controller类 具体代码如下,其中对于插入操作和更新作的接口采用json格式进行传参,利用Poet类进行传参;对于查询部分的操作采用路径参数传递参数的方法

1.删除操作的具体前端代码 、

 编写poem.html页面,首先实现数据的删除操作,先在数据库中添加几条数据,以便实现删除操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <script src="./js/axios-0.18.0.js"></script>
    <link rel="stylesheet" href="element-ui/index.css">
    <script src="./element-ui/index.js"></script>
</head>
<body>
<h1 style="text-align: center">诗人信息列表</h1>
<div id="app" align="center">
    <a href="poet-insert.html" style="text-align: center">新增信息</a>
    <template>
        <el-table
                :data="poetList"
                stripe
                style="width: 100%">
            <el-table-column
                    prop="id"
                    label="序号"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="name"
                    label="姓名"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="gender"
                    label="性别">
            </el-table-column>
            <el-table-column
                    prop="dynasty"
                    label="朝代">
            </el-table-column>
            <el-table-column
                    prop="title"
                    label="称号">
            </el-table-column>
            <el-table-column
                    prop="style"
                    label="风格">
            </el-table-column>
            <el-table-column label="操作">
                <template slot-scope="scope" >
                <a :href="'poet-update.html?id='+scope.row.id">修改</a>
                <button type="button" v-on:click="deletee(scope.row.id)">删除</button>
                </template>
            </el-table-column>
        </el-table>
    </template>
</div>
</body>
<script>
    new Vue({
        el: "#app",
        data() {
            return {
                poetList: []
            }
        },
        methods:{
            selectall:function(){
                var this_=this;
                axios.post('/PoetSelect',{}).then(function(response){
                    this_.poetList=response.data.data;
                })
                .catch(function(error){
                    console.log(error);
                })
            },
            deletee:function (id){
                var this_=this;
                if(window.confirm("您确定要删除这条数据吗?")){
                    axios.post('/PoetDelete?id='+id).then(function(response){
                        alert("删除成功!")
                        this_.selectall();
                    })
                    .catch(function(error){
                        console.error("删除失败",error);
                    })
                }
            }
        },
        mounted() {
            axios.get('/PoetSelect').then(res => {
                    if (res.data.statusCode) {
                        this.poetList = res.data.data;
                    }
                }
            )
        }
    })
</script>
</html>

2.插入操作的具体前端代码

编写一个新的页面poet-insert.html,实现点击新增操作能够将数据插入表格中。poet-insert.html页面中主要为表单元素,通过v-model实现双向数据绑定,表单元素的改变能够实现poet对象中数据的修改。在点击了“新增”按钮后能将数据提交给数据表,需要在按钮上绑定点击事件,实现点击后将数据都传递到data中的poet中,通过axios异步post传递操作将poet对象传递给接口“/PoetInsert”实现插入接口,同时判断操作成功后location.href将页面回跳到poet.html页面,如果操作失败则将错误的描述输出到控制台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script src="./js/vue.js"></script>
  <script src="./js/axios-0.18.0.js"></script>
  <link rel="stylesheet" href="element-ui/index.css">
  <script src="./element-ui/index.js"></script>
</head>
<body>
<div id="app" style=" display: flex;
            justify-content: center;
            align-items: center">
    <table>
        <tr>
            <td>ID</td>
            <td>
            <input type="text" v-model="poet.id">
            </td>
        </tr>
        <tr>
            <td>
                姓名:
            </td>
            <td>
                <input type="text" v-model="poet.name">
            </td>
        </tr>
        <tr>
            <td>
                性别:
            </td>
            <td>
                <input type="radio" name="gender" v-model="poet.gender" value="1">男
                <input type="radio" name="gender" v-model="poet.gender" value="2">女
            </td>
        </tr>
        <tr>
            <td>
                朝代:
            </td>
            <td>
                <input type="text" v-model="poet.dynasty">
            </td>
        </tr>
        <tr>
            <td>
                头衔:
            </td>
            <td>
                <input type="text" v-model="poet.title">
            </td>
        </tr>
        <tr>
            <td>
                风格:
            </td>
            <td>
                <input type="text" v-model="poet.style">
            </td>
        </tr>
        <tr>
            <td>
                <input type="button" @click="addpoet" value="增加">
            </td>
        </tr>
    </table>
</div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
            poet:{
                "id":"",
                "name":"",
                "gender":"",
                "dynasty":"",
                "title":"",
                "style":""
            }
        },
        methods:{
            addpoet:function (){
                axios.post('/PoetInsert',this.poet).then(r=>{
                    if(r.data.statusCode==1){
                        location.href='poet.html';
                    }
                    else{
                        alert(r.data.message);
                    }
                }).catch(error=>{
                    console.error(error);
                })
            }
        }
    })
</script>
</html>

3.修改操作的具体前端代码

修改操作的主要操作过程是首先将表单数据与poet对象双向绑定,便于将修改后的数据存储在poet对象中。created钩子将修改的数据的id号存储在本页面的数据id中,同时调用selectpart方法,传入id的具体值调用”PoetSelectpart“接口将修改前的数据传递给poet对象。需要注意的是this.poet=r.data.data语句将poet对象变成了一个json数组,如果直接传递给poetupdate方法会出现failed to load resource: the server responded with a status of 400 ()的错误,前后端参数不一致。对于后端需要的参数是poet对象,而前端传递的是数组。需要将r.data.data数组中的第一个json数据赋值给this.poet,才能成功传递参数实现修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script src="./js/vue.js"></script>
  <script src="./js/axios-0.18.0.js"></script>
  <link rel="stylesheet" href="element-ui/index.css">
  <script src="./element-ui/index.js"></script>
</head>
<body>
<div id="app" style=" display: flex;
            justify-content: center;
            align-items: center">
    <table>
        <tr>
            <td>ID</td>
            <td>
                <input type="text" v-model="this.id">
            </td>
        </tr>
        <tr>
            <td>
                姓名:
            </td>
            <td>
                <input type="text" v-model="poet.name">
            </td>
        </tr>
        <tr>
            <td>
                性别:
            </td>
            <td>
                <input type="radio" name="gender" v-model="poet.gender" value="1">男
                <input type="radio" name="gender" v-model="poet.gender" value="2">女
            </td>
        </tr>
        <tr>
            <td>
                朝代:
            </td>
            <td>
                <input type="text" v-model="poet.dynasty">
            </td>
        </tr>
        <tr>
            <td>
                头衔:
            </td>
            <td>
                <input type="text" v-model="poet.title">
            </td>
        </tr>
        <tr>
            <td>
                风格:
            </td>
            <td>
                <input type="text" v-model="poet.style">
            </td>
        </tr>
        <tr>
            <td>
                <input type="button" @click="updatepoet" value="修改">
            </td>
        </tr>
    </table>
 
</div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
            poet:{},
            id:''
        },
        methods:{
            selectpart:function (){
                axios.get(`/PoetSelectpart/${this.id}`).then(r=>{
                    if(r.data.statusCode==1){
                        if (Array.isArray(r.data.data) && r.data.data.length > 0) {
                            this.poet = r.data.data[0];
                        } else {
                            this.poet = {};
                        }
                    }
                    else{
                        console.log(r.data.message);
                    }
                }).catch(er=>{
                    console.error(er);
                })
            },
            updatepoet:function (){
                axios({ method: 'put',
                    url: '/PoetUpdate',
                    data: JSON.stringify(this.poet),
                    headers: {
                        'Content-Type': 'application/json'
                    } }).then(r=>{
                    if(r.data.statusCode==1){
                        location.href='poet.html';
                    }
                    else{
                        alert(r.data.message);
                    }
                }).catch(e=>{
                    console.error(e);
 
                })
            }
        },
        created(){
            this.id=location.href.split("?id=")[1]
            this.selectpart();
        }
    })
</script>
</html>

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值