ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring -- 小练习

2019-08-01 20:08:02  阅读:172  来源: 互联网

标签:pageNum pageSize int Spring 练习 result total data


目标:ajax 查询分页   。

需求 :

1、整体框架必须使用完整的配置办法。

2、spring中包含注解扫描、属性文件加载、数据源、sqlsessionfactory对象、扫描器、声明式事务。

3、页面显示使用ajax。

4、对象向json字符串转换使用Gson工具包

5、service中注解

效果图如下:

                     

步骤、

1、 建立数据库相关表 -- emp(学生信息表) dept(学院信息表)

2、在程序中建立响应的类

  a.首先要明确所需信息是由两表联合查询到的,且 由emp表中的列 deptno 与 dept 表中的列 id 进行连接查询

    所以创建的emp类中应包含dept表中信息。

   建立如下两个实体类:

                          

 b. 因为需要实现分页,故创建相应的PageInfo类 来存储每一页的信息,以及相关分页的信息。

                        

 

3、创建mapper接口 通过注解形式进行数据库查询

public interface ShowMapper {
    @Select("select a.*,b.id `dept.id`,b.name `dept.name` from emp a LEFT JOIN dept b on a.deptno = b.id limit #{0},#{1}")
	List<Emp> selAll(int pageStart ,int pageSize);
    @Select("select count(*) from emp")
    int selTotal();
}

4、创建相应的service类

@Service // 此处注解自动注册,不需要添加bean到applicationContext.xml文件中
public class ShowServiceImpl implements ShowService {
	@Resource  // 注意此处需添加注解,实现依赖注入
	private ShowMapper mapper;
	@Override
	public PageInfo showAll(int pageNum, int pageSize) {
		int pageStart = (pageNum-1)*pageSize; // 根据当前页数 计算出查询的记录数开始位置
		PageInfo pi = new PageInfo();
		pi.setPageNum(pageNum);
		pi.setPageSatrt(pageStart);
		pi.setPageSize(pageSize);
		//System.out.println(mapper);
		//System.out.println(pageStart+"  "+pageSize);
		int total = mapper.selTotal();
		List<Emp> list = mapper.selAll(pageStart, pageSize);
		pi.setList(list);
		int t=0;
		if(total%pageSize==1){
			t = total/pageSize+1;
		}else
			t = total/pageSize;
		pi.setTotal(t);
		return pi;
	}
	// 此处为调试程序所写,无用,忽略
	@Override
	public int test() {
		System.out.println("just a test");
		return 0;
	}
}

5、建立servlet

@WebServlet("/show")
public class ShowServlet extends HttpServlet {
	
	private ShowService ser;
	@Override
	public void init() throws ServletException {
		//初始化 得到相应的service实体类
		WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
		 ser = context.getBean("showServiceImpl",ShowServiceImpl.class);
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		String pageNumStr = req.getParameter("pageNum");
		String pageSizeStr = req.getParameter("pageSize");
		int pageNum = 1;
		int pageSize = 2;
		if(pageNumStr!=null && !pageNumStr.equals("")){
			pageNum = Integer.parseInt(pageNumStr);
		}
		if(pageSizeStr!=null && !pageSizeStr.equals("")){
			pageSize = Integer.parseInt(pageSizeStr);
		}
		PageInfo pageInfo = ser.showAll(pageNum, pageSize);
		resp.setContentType("application/json;charset=utf-8"); //设置返回内容的格式 为JSON对象
		PrintWriter out = resp.getWriter();
		//ObjectMapper mapper =  new ObjectMapper(); // Jackson工具包使用  本程序使用Gson
		out.write(new Gson().toJson(pageInfo));
		out.flush();
		out.close();
	}
}

6、创建前端显示 index.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript">
	$(function() {
		var pageNum = 1;
		var pageSize = 2;
		var total = 0;
		getMyData(); // 刚载入页面调用此函数 显示第一页内容

		$("a:eq(0)").click(function() {
			pageNum = pageNum - 1;
			if (pageNum <= 0) {
				pageNum = 1;
			} else {
				getMyData();
			}
			return false;
		})
		$("a:eq(1)").click(function() {
			pageNum = pageNum + 1;
			//	alert(pageNum);
			//alert(total);
			if (pageNum > total) {
				pageNum = total;
			} else {
				getMyData();
			}
			return false;
		})

		function getMyData() {
			$.post("show", {
				"pageSize" : pageSize,
				"pageNum" : pageNum
			}, function(data) {
				//总页数	
				//var data = JSON.parse(data);
				//alert(pageNum);
				total = data.total;
				var result = "";
				for (var i = 0; i < data.list.length; i++) {
					result += "<tr>";
					result += "<td>" + data.list[i].empno + "</td>";
					result += "<td>" + data.list[i].name + "</td>";
					result += "<td>" + data.list[i].dept.name + "</td>";
					result += "</tr>"
				}
				//alert(result)
				$("#Tbody").html(result);
			})
		}

	})
</script>
</head>
<body>
	<table border="1px">
		<tr>
			<td>员工编号</td>
			<td>姓名</td>
			<td>所在院系</td>
		</tr>
		<tbody id="Tbody">
		</tbody>
	</table>
	<a href="">上一页</a>
	<a href="">下一页</a>
</body>
</html>

7、配置web.xml文件

 为整合mybatis需要配置以下内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

8、配置applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd"
	default-autowire="byName">  <!-- 设置自动注入 根据名字 -->
	
	<!-- 扫描组件 自动注册bean id 把类的第一个大写字母变小写 -->
	<context:component-scan base-package="com.yyl.service.impl"></context:component-scan>
	
	<!-- 配置读取属性  由于需要读取配置文件 所以需要指明文件所在位置-->
	<context:property-placeholder location="classpath:db.properties"/> 
	
	<!-- 配置datasource 数据库连接信息  -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	
	<!-- 配置factory -->
	<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"></bean>
	
	<!-- 扫描器 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.yyl.mapper"></property>
		<property name="sqlSessionFactoryBeanName" value="factory"></property>
	</bean>
	
	<!-- 配置事务 -->
	<bean id="myTxMagage"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager"></bean>
		
	<!-- 声明事务 -->
	<tx:advice id="myTxAdvisor" transaction-manager="myTxMagage">
		<tx:attributes>
			<tx:method name="ins*" />
			<tx:method name="del*" />
			<tx:method name="upd*" />
			<tx:method name="*" read-only="true" />
		</tx:attributes>
	</tx:advice>
	
	<!-- 配置AOP -->
	<aop:config>
		<aop:pointcut expression="execution(* com.yyl.service.impl.*.*(..))"
			id="mypoint" />
		<aop:advisor advice-ref="myTxAdvisor" pointcut-ref="mypoint" />
	</aop:config>
	
	<!-- 配置代理设置 设为cglib代理模式   -->
	<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>

 

标签:pageNum,pageSize,int,Spring,练习,result,total,data
来源: https://blog.csdn.net/qq_42506224/article/details/98094943

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有