Rest架构下的增删改查
首先还是要连接一下什么是Rest, REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想,
什么是restful?
符合rest 规范和设计风格的程序 就是restful
   按照rest 规范 设计一个针对 id 是 2 的银行账户做一个设计
/account/2 get 获取id=2的银行账户
  /account/2          post  增加id=2 的银行账户 
  /account/2          delete 删除id=2 的银行账户
  /account/2          put    修改id=2 的银行账户
好了,话不多说了,直接从搭建架构开始一步一步搭建 Rest架构下的增删改查
首先导入各种dao,aop,ioc,mvc,json,数据库连接的jar包
web.xml
<servlet>
<!--配置请求的入口 -->
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- [配置初始化参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet> <!-- 配置映射 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern><!-- 由于使用rest架构,没有后缀名,就直接拦截所有的 -->
</servlet-mapping>
applicationContext.xml
<!--开启组件扫描 -->
<context:component-scan base-package="cn.com"></context:component-scan>
<!-- 开启mvc标注 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图处理器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean> <!-- 配置一个数据源对象 也叫 连接池对象 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1::xe</value>
</property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<!-- 定义一个模板对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg index="" ref="dataSource"></constructor-arg>
</bean> <!-- 配置文件解析器 --><!-- 暂时没神魔用 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
<!-- 配置 对所有静态资源放行 -->
<mvc:default-servlet-handler/>
首先还是写一个接口:
 public interface BankAccountDao {
     int insertAccount(BankAccountModel ba);//添加
     int deleteAccount(int id);//删除
     BankAccountModel selectByID(int id);//按照ID查询
     int updateAccount(BankAccountModel acc);//更新
 }
写实现类:
 @Repository("bankDao")//dao层注解,用于装载组件,绝不可以大意,
 public class BankAccountDaoIMP implements BankAccountDao {
     @Autowired//自动装配
     public JdbcTemplate jdbc;
     @Override
     public int insertAccount(BankAccountModel ba) {
         String sql = "insert into XDL_BANK_ACCOUNT values (?,?,?,?)";
         try {
             return jdbc.update(sql, ba.getId(), ba.getAcc_no(), ba.getAcc_password(), ba.getAcc_money());
         } catch (Exception e) {
             e.printStackTrace();
         }
         return 0;
     }
     @Override
     public int deleteAccount(int id) {
         String sql="delete from XDL_BANK_ACCOUNT where id=?";
         return jdbc.update(sql,id);
     }
     @Override
     public BankAccountModel selectByID(int id) {
         String sql="select * from XDL_BANK_ACCOUNT where id=?";
         try {
             return jdbc.queryForObject(sql, new BankAccountMap(),id);
         } catch (DataAccessException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return null;
     }
     @Override
     public int updateAccount(BankAccountModel acc) {
         String sql="update XDL_BANK_ACCOUNT set acc_no = ?,acc_password = ?,acc_money = ? where id=?";
         try {
             return jdbc.update(sql, acc.getAcc_no(),acc.getAcc_password(),acc.getAcc_money(),acc.getId());
         } catch (DataAccessException e) {
             e.printStackTrace();
         }
         return 0;
     }
写service服务类
 @Service("BankService")//service层的标注
 public class BankAccountService {
     @Autowired
     private BankAccountDao bankDao;
     /*添加用户*/
     public int register(BankAccountModel ba) {
         return bankDao.insertAccount(ba);
     }
      /*删除用户*/
     public boolean remove(int id) {
         return bankDao.deleteAccount(id)==0?false:true;
     }
      /*查找用户*/
     public BankAccountModel accountByID(int id){
         return bankDao.selectByID(id);
     }
      /*更新用户*/
     public boolean updateByID(BankAccountModel acc){
         return bankDao.updateAccount(acc)==0?false:true;
     }
 }
然后就是Controller啦
@RequestMapping("/toAccount.do")
    public String toAccount() {
        return "account";//直接去account.jsp页面
    }
在然后写一个html前端页面
<script src="${pageContext.request.contextPath }/js/jquery2.1.4.js" type="text/javascript"></script>
<script type="text/javascript">
     //添加用户
     function addAccount(){
        //alert();
        var id=$("#id").val();
        var acc_no=$("#acc_no").val();
        var acc_password=$("#acc_password").val();
        var acc_money=$("#acc_money").val();
        $.ajax({
            url:"/Spring-MVC-Day07/account/"+id,
            type:"post",
            success:function(data){
                alert(data);
                if(data){
                    $("#sp1").html("注册成功!");
                }else{
                    $("#sp1").html("注册失败!");
                }
            },
            data:{
                id:id,
                acc_no:acc_no,
                acc_password:acc_password,
                acc_money:acc_money
            }
        });
     }
     //删除用户
     function deleteAccount(){
         var id=$("#id").val();
         $.ajax({
             url:"/Spring-MVC-Day07/account/"+id,
             type:"delete",
             success:function(data){
                 alert(data);
                 if(data){
                     $("#sp1").html("删除成功!");
                 }else{
                     $("#sp1").html("删除失败!");
                 }
             }
         });
     }
    //查询用户
    function   getAccountByID(){
       var id=$("#id").val();
        $.ajax({
            url:"/Spring-MVC-Day07/account/"+id,
            type:"get",
            success:function(data){
                $("#id").val(data.id);
                $("#acc_no").val(data.acc_no);
                $("#acc_password").val(data.acc_password);
                $("#acc_money").val(data.acc_money);
            }
        });
   }
   //更新用户
   function updateAccount(){
    var id=$("#id").val();
       var acc_no=$("#acc_no").val();
       var acc_password=$("#acc_password").val();
       var acc_money=$("#acc_money").val();
       $.ajax({
           url:"/Spring-MVC-Day07/account/"+id,
           type:"put",
           success:function(data){
               alert(data);
               if(data){
                   $("#sp1").html("更新成功!");
               }else{
                   $("#sp1").html("更新失败!");
               }
           },
           data:JSON.stringify({
               id:id,
               acc_no:acc_no,
               acc_password:acc_password,
               acc_money:acc_money
           }),//将json字符串转换为json对象
           contentType:"application/json"
       });
   }
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="">
    id<input type="text" id="id"><br>
    acc_no<input type="text" id="acc_no"><br>
    acc_password<input type="text" id="acc_password"><br>
    acc_money<input type="text" id="acc_money"><br>
    <input type="button" value="增加" onclick="addAccount()"><br>
    <input type="button" value="删除用户" onclick="deleteAccount()"><br>
    <input type="button" value="查询单个用户" onclick="getAccountByID()"><br>
    <input type="button" value="更新按钮" onclick="updateAccount()"><br>
    <span id="sp1"></span>
    </form>
</body>
</html>
其中,用户需要更新数据时,使用ajax传递值时,data中的值必须使用JSON.stringify()将其系列化,Controller那边才能使用
public boolean updateAccount(@RequestBody BankAccountModel ba,@PathVariable("id") int id){}接受到值
差点忘记Mapping
public class BankAccountMap implements RowMapper<BankAccountModel> {
    /**
     * 把结果集转换成对象  index:到了第几行
     */
    @Override
    public BankAccountModel mapRow(ResultSet rs, int index) throws SQLException {
        return new BankAccountModel(rs.getInt("id"), rs.getString("aCC_NO"),
                rs.getString("aCC_PASSWORD"), rs.getDouble("aCC_MONEY"));
    }
}
Rest架构下的增删改查的更多相关文章
- Hibernate下的增删改查
		概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? ... 
- MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]
		MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ... 
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
		前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ... 
- BootstrapTable+KnockoutJS实现增删改查解决方案
		BootstrapTable+KnockoutJS实现增删改查解决方案 前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一 ... 
- mysql8 mongodb4 增删改查 性能对比,2019 最专业对比,nosql 真的比 sql 性能强很多?
		原文:mysql8 mongodb4 增删改查 性能对比,2019 最专业对比,nosql 真的比 sql 性能强很多? 版权所有:http://www.fengyunxiao.cn 近几年看了很多关 ... 
- 手把手教你基于koa2,mongoose实现增删改查
		初始化项目 npm init -y 先安装一波乱七八糟的依赖插件(需要具备一定的koa2知识,至于mongoDB自行百度安装教程),模板引擎我使用的是art-template(据说是性能最好的,而且是 ... 
- MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查
		SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ... 
- 设置Sql server用户对表、视图、存储过程、架构的增删改查权限
		根据数据库Schema限制用户对数据库的操作行为 授予Shema dbo下对象的定义权限给某个用户(也就是说该用户可以修改架构dbo下所有表/视图/存储过程/函数的结构) use [Your DB N ... 
- SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
		在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ... 
随机推荐
- django系列8.4--django中间件的可应用案例, 限制请求次数与时间
			应用案例 1.做IP访问频率限制 某些IP访问服务器的频率过高,进行拦截, 比如每分钟不能超过20次 2.URL访问过滤 如果用户访问的是login视图,就允许请求 如果访问其他视图, 需要检测是不是 ... 
- Linux的思维导图
- Java概念辨析:equals和==    equals和hashCode
			1. equals和== ======================================================================================= ... 
- LOJ#6504. 「雅礼集训 2018 Day5」Convex(回滚莫队)
			题面 传送门 题解 因为并不强制在线,我们可以考虑莫队 然而莫队的时候有个问题,删除很简单,除去它和前驱后继的贡献即可.但是插入的话却要找到前驱后继再插入,非常麻烦 那么我们把它变成只删除的回滚莫队就 ... 
- PHP一句话木马Webshell变形免杀总结
			0×00 前言 大部分Webshell查杀工具都是基于关键字特征的,通常他们会维护一个关键字列表,以此遍历指定扩展名的文件来进行扫描,所以可能最先想到的是各种字符串变形,下面总结了一些小的方法,各种不 ... 
- 【bash】今天你坑队友了吗
			需求: 压缩日志并删除压缩过的文件 很日常的运维需求!!! 好,来看代码 echo 'start' quke.log rm -f quke.log echo 'delete' 不管是初级运维还是高级运 ... 
- SQL中DateTime转换成Varchar样式
			SQL中DateTime转换成Varchar样式语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect ... 
- android Studio 运行不显示avd 无法运行
			上图说明: 出现上图页面,有可能是端口被占用了,我出现这种情况是杀死了一个酷狗音乐的进程 干掉以后: 
- Java多线程—阻塞队列和生产者-消费者模式
			阻塞队列支持生产者-消费者这种设计模式.该模式将“找出需要完成的工作”与“执行工作”这两个过程分离开来,并把工作项放入一个“待完成“列表中以便在随后处理,而不是找出后立即处理.生产者-消费者模式能简化 ... 
- C#-WebForm-LinQ-条件精确查询、高级查询
			前台界面,并在后台绑定数据 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ca ... 
