• 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

     1 <servlet>
     2       <!--配置请求的入口 -->
     3       <servlet-name>SpringMVC</servlet-name>
     4       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     5       <!-- [配置初始化参数 -->
     6       <init-param>
     7       <param-name>contextConfigLocation</param-name>
     8       <param-value>classpath:applicationContext.xml</param-value>
     9       </init-param>
    10   </servlet>
    11   
    12   <!-- 配置映射 -->
    13   <servlet-mapping>
    14   <servlet-name>SpringMVC</servlet-name>
    15   <url-pattern>/</url-pattern><!-- 由于使用rest架构,没有后缀名,就直接拦截所有的 -->
    16   </servlet-mapping>
    View Code

    applicationContext.xml

     1  <!--开启组件扫描 -->
     2     <context:component-scan base-package="cn.com"></context:component-scan>
     3     <!-- 开启mvc标注 -->
     4     <mvc:annotation-driven></mvc:annotation-driven>
     5     <!-- 配置视图处理器 -->
     6     <bean
     7         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     8         <property name="prefix" value="/WEB-INF/"></property>
     9         <property name="suffix" value=".jsp"></property>
    10     </bean>
    11 
    12     <!-- 配置一个数据源对象 也叫 连接池对象 -->
    13     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    14         <property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
    15         <property name="url">
    16             <value>jdbc:oracle:thin:@127.0.0.1:1521:xe</value>
    17         </property>
    18         <property name="username" value="scott"></property>
    19         <property name="password" value="tiger"></property>
    20     </bean>
    21     <!-- 定义一个模板对象 -->
    22     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    23         <constructor-arg index="0" ref="dataSource"></constructor-arg>
    24     </bean>
    25 
    26 
    27     <!-- 配置文件解析器 --><!-- 暂时没神魔用 -->
    28     <bean id="multipartResolver"
    29         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    30     </bean>
    31    <!-- 配置     对所有静态资源放行 -->
    32   <mvc:default-servlet-handler/>
    View Code

    首先还是写一个接口:

     1 public interface BankAccountDao {
     2     
     3     int insertAccount(BankAccountModel ba);//添加
     4     
     5     int deleteAccount(int id);//删除
     6     
     7     BankAccountModel selectByID(int id);//按照ID查询
     8     
     9     int updateAccount(BankAccountModel acc);//更新
    10 }
    View Code

    写实现类:

     1 @Repository("bankDao")//dao层注解,用于装载组件,绝不可以大意,
     2 public class BankAccountDaoIMP implements BankAccountDao {
     3 
     4     @Autowired//自动装配
     5     public JdbcTemplate jdbc;
     6 
     7     @Override
     8     public int insertAccount(BankAccountModel ba) {
     9         String sql = "insert into XDL_BANK_ACCOUNT values (?,?,?,?)";
    10         try {
    11             return jdbc.update(sql, ba.getId(), ba.getAcc_no(), ba.getAcc_password(), ba.getAcc_money());
    12         } catch (Exception e) {
    13             e.printStackTrace();
    14         }
    15         return 0;
    16     }
    17 
    18     @Override
    19     public int deleteAccount(int id) {
    20         String sql="delete from XDL_BANK_ACCOUNT where id=?";
    21         return jdbc.update(sql,id);
    22     }
    23 
    24     
    25 
    26     @Override
    27     public BankAccountModel selectByID(int id) {
    28         String sql="select * from XDL_BANK_ACCOUNT where id=?";
    29         
    30         try {
    31             return jdbc.queryForObject(sql, new BankAccountMap(),id);
    32         } catch (DataAccessException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }
    36         return null;
    37     }
    38 
    39     @Override
    40     public int updateAccount(BankAccountModel acc) {
    41         String sql="update XDL_BANK_ACCOUNT set acc_no = ?,acc_password = ?,acc_money = ? where id=?";
    42         try {
    43             return jdbc.update(sql, acc.getAcc_no(),acc.getAcc_password(),acc.getAcc_money(),acc.getId());
    44         } catch (DataAccessException e) {
    45             e.printStackTrace();
    46         }
    47         return 0;
    48     }
    View Code

    写service服务类

     1 @Service("BankService")//service层的标注
     2 public class BankAccountService {
     3     @Autowired
     4     private BankAccountDao bankDao;
     5     /*添加用户*/
     6     public int register(BankAccountModel ba) {
     7         return bankDao.insertAccount(ba);
     8     }
     9      /*删除用户*/
    10     public boolean remove(int id) {
    11         return bankDao.deleteAccount(id)==0?false:true;
    12     }
    13      /*查找用户*/
    14     public BankAccountModel accountByID(int id){
    15         return bankDao.selectByID(id);
    16     }
    17      /*更新用户*/
    18     public boolean updateByID(BankAccountModel acc){
    19         return bankDao.updateAccount(acc)==0?false:true;
    20     }
    21     
    22 }
    View Code

    然后就是Controller啦

    @RequestMapping("/toAccount.do")
        public String toAccount() {
            return "account";//直接去account.jsp页面
        }
    View Code

    在然后写一个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>
    View Code

    其中,用户需要更新数据时,使用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"));
        }
        
        
    
    }
    View Code
  • 相关阅读:
    每天改进一点点之改进日志收集系统 原创: 赵建鹏 雪球工程师团队 2018-03-23
    Locust
    ('' or 60)
    python动态获取对象的属性和方法 (转载)
    MySQL 8.0: From SQL Tables to JSON Documents (and back again)
    词典型 遍历键 顺序
    子系统权限栏目 自己生成 自己控制
    Redis 单线程却能支撑高并发
    OPPO数据中台之基石:基于Flink SQL构建实数据仓库
    技术干货丨如何在VIPKID中构建MQ服务
  • 原文地址:https://www.cnblogs.com/hx1098/p/9332205.html
Copyright © 2020-2023  润新知