`
gavin
  • 浏览: 83264 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

jquery + JsonView + spring + ibatis实例

阅读更多
    本着尽量轻量级、尽量少依赖的原则选择了这一组合。主要思路是前端jquery以getJSON取得数据,然后展示,减少页面刷新,减少jsp的使用,数据层根据需要选择ibatis或hibernate什么的。

ibatis的配置就不贴了,下面是spring的主要配置,用了annotation,需要配置的也少。
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
	<property name="configLocation" value="WEB-INF/config/SqlMapConfig.xml" />
</bean>	
<bean id="personDao" class="net.dao.PersonDao">
	<property name="sqlMapClient" ref="sqlMapClient" />
</bean>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" >
	<property name="mediaTypes">
		<map>
			<entry key="json" value="application/json"/>
		</map>
	</property>
	<property name="defaultViews">
		<list>
			<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
		</list>
	</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
	<property name="order" value="1" />
</bean>

三个java类代码很简单,表达主要意思就行了
public class PersonDao extends SqlMapClientDaoSupport {
//也不想做三层,表示一下,自己取舍吧
}

@Service("personService")
public class PersonServiceImpl implements PersonService {

	@Autowired
	private PersonDao personDao;
	//调一个定义好的查询sql
	public List findByLastName(String lastName) {
		return  personDao.getSqlMapClientTemplate().queryForList("getPerson");
	}
}

@Controller
@RequestMapping("/person/**")
public class PersonController {

	@Autowired
	private PersonService personService;
	
	@RequestMapping(value = "/person/{id}", method = RequestMethod.GET)
	public String show(@PathVariable("id") Long id, ModelMap modelMap) {
		Assert.notNull(id, "Identifier must be provided.");
		modelMap.addAttribute("person", personService.findByLastName(id.toString()));
		return "person/show";
	}
}

web.xml里配置DispatcherServlet 映射*.json请求,jquery请求返回json对象。imList可以生成表格、下拉列表等。jqgrid比jquery都大了,如果只是显示一下,就用这个只有几K的小插件吧。(IE8有点问题,要自己改一下)
<html>
 <head>
    <meta http-equiv = "content-type" content = "text/html; charset=UTF-8" />
    <script language="javascript" type="text/javascript" src="jquery.js"></script>
 	<script id="source" language="javascript" type="text/javascript">
	$(function() {
		
		$.getJSON("person/12.json", null, function(json){
		  	var result = json.person;
			//展示数据
		});
	});
	</script>
 </head>
 <body>
	<div id="mytb"></div>
 </body>
</html>

2010-1-26补充:
通过如下配置可以约定按首字母小写类名去掉Controller加方法名来实现url映射,不用在类里面写url了,配置进一步简化。
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

看下面的类映射common/find
@Controller
public class CommonController {

	@Autowired
	private CommonService commonService;
	
	@RequestMapping
	public void find(@RequestParam("sqlid") String sqlid,
					WebRequest webRequest, ModelMap modelMap) {
		Map map = new HashMap();
		Map<String, String[]> parameter = webRequest.getParameterMap();
		//把Map<String, String[]>转成Map<String, String>
		Iterator<Entry<String, String[]>> it = parameter.entrySet().iterator();
	    while (it.hasNext()) {
	        Map.Entry<String, String[]> pairs = it.next();
	        if(pairs.getValue().length > 0)
	        	map.put(pairs.getKey(), pairs.getValue()[0]);
	    }
	    //查询
	    List list = commonService.find(sqlid, map);
		modelMap.addAttribute("result", list);
	}
}

方法参数不仅可以加WebRequest,还有其它好多可以加,比如做个服务器端验证或处理Session什么的,可方便了,加上就能用。以前听到介绍某种语言效率高,写很少可以办很多事,也不以为然。现在使用其它语言机会多了,看到一些便利的地方很是喜欢。回过头来再看java及其框架,我的要求是配置再少些,代码再少些。spring注解加默认约定,减少了配置,减少了我们要写的代码量,java开发的效率提高了。
2010-4-16:现在感觉做主要是查询的应用很爽,java代码只有二百行左右(需求不简单,五个模块,各种查询)ibatisl配置了十几个查询sql,条件与ajax发过来的对应。
	var settings = {sid:"getpp",exchange:2,limit:50,cc_date:$("#date_input").val()};
	$.ajax({type: "POST",url:"../find.json", data:settings, success:function(json){
		//create grid
		},dataType:"json",error:function () {
			alert('服务器错误,请稍后重试');
		}
	});

<select id="getpp" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
		SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, (
			SELECT company,SUM(amount) amount FROM XXXX WHERE 
			<isNotEmpty property="date">
			date=#date# 
			</isNotEmpty>
			<isEmpty property="date">
			date between #start_date# and #end_date# 
			</isEmpty>
			<isNotEmpty property="code">
			and code=#code#
			</isNotEmpty>
			<isEmpty property="code">
			and code like CONCAT('%', #name#, '%')
			</isEmpty>
			and EXCHANGE=#exchange#
			GROUP BY company
			ORDER BY amount DESC LIMIT #limit#
		) t
	</select> 

js代码写了六七百行,用了jqgrid表格和flot画图。如果是不刷新页面的应用,要使用经过考验的组件,那些没名的小组件不能用,内存会不停的增涨。
分享到:
评论

相关推荐

    SSI(Struts2+Spring+IBatis)+Jquery做的无刷新小项目

    这些操作都是通过Ajax请求触发,由Struts2控制器处理,再通过Spring管理的iBatis DAO执行相应的数据库操作,最后将结果以JSON或其他格式返回,由jQuery动态更新页面显示。 此外,项目的代码结构可能包括以下几个...

    Struts1.1+spring2.5+ibatis2.3+Ajax整合的源代码

    Ajax则通过JavaScript(可能是jQuery库)与后台进行通信,发送和接收JSON格式的数据。 6. **源代码结构**:压缩包中的"StrutsTest"很可能包含了项目的源代码结构,包括Web应用目录结构(WEB-INF目录下的配置文件、...

    Struts2入门教程。包括jquery集成等。入门必看

    - **JSON示例**:通过实例展示如何在Struts2中使用JSON。 - **Struts2与JSON示例**:详细介绍如何在Struts2中集成JSON处理。 #### 十二、集成Hibernate - **系统总体设计**:从整体角度出发,描述如何设计包含...

    struts2系列教程

    - **16.6 jQuery处理JSON**:jQuery处理JSON数据的方法。 #### 十七至十九章 - **实战案例**:通过具体的项目案例进一步加深对Struts2的理解,包括投票管理系统、无纸化办公管理系统、数据采集系统等。 以上内容...

    esayui完整例子

    综上所述,这个压缩包中的 "springibatis" 文件可能是 Spring 和 iBatis 的整合示例,Spring 提供了依赖注入和事务管理等功能,使得 Struts2 和 iBatis 的集成更加便捷和稳定。通过学习这个例子,开发者可以深入理解...

    Struts2入门v3.0.pdf

    - **集成jQuery**:jQuery是一个快速、简洁的JavaScript库,本书提供了关于如何在Struts2项目中使用jQuery的指导。 #### 十三、实战案例分析 - **投票管理系统**:通过一个完整的投票管理系统的开发案例,展示了...

Global site tag (gtag.js) - Google Analytics