首先还是要连接一下什么是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>
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/>
首先还是写一个接口:
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 }
写实现类:
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 }
写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 }
然后就是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")); } }