您的位置:首页 > 编程语言 > Java开发

用maven项目mybatis集成spring+springmvc无刷新实现crud

2017-07-11 10:21 781 查看
具体步奏

步骤1.下载 mybatis-spring插件或者添加maven依赖

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.3</version>

</dependency>

步骤2.配置dbcp数据源

步骤3.配置SqlSessionFactoryBean设置数据源以及mybatis配置文件的位置



步骤四.配置SqlSessionTemplate 通过构造器注入SqlSessionFactoryBean

步骤五.配置DataSourceTransactionManager注入数据源配置事物

步骤六.配置MapperScannerConfigurer扫描注解对应的mapper文件对应的包

步骤七 配置spring事物的切面以及通知



pom.xml

[html] view
plain copy

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>springIntegrationMybatis</groupId>

<artifactId>springIntegrationMybatis</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<name/>

<description/>

<dependencies>

<dependency>

<groupId>org.apache.openejb</groupId>

<artifactId>javaee-api</artifactId>

<version>5.0-1</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-api</artifactId>

<version>1.2_04</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-impl</artifactId>

<version>1.2_04</version>

<scope>provided</scope>

</dependency>

<!-- 配置mybatis的依赖 -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.8</version>

</dependency>

<!-- 配置本地的jar -->

<dependency>

<groupId>ojdbc</groupId>

<artifactId>objdc1</artifactId>

<version>3.2.8</version>

<scope>system</scope>

<systemPath>C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar</systemPath>

</dependency>

<!-- spring和springMvc的jar -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.3.8.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.3.8.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>4.3.8.RELEASE</version>

</dependency>

<!-- json的jar -->

<dependency>

<groupId>net.sf.json-lib</groupId>

<artifactId>json-lib</artifactId>

<version>2.3</version>

<classifier>jdk15</classifier>

</dependency>

<!-- jackson的一系列jar -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.6.0</version>

</dependency>

<dependency>

<groupId>javax.validation</groupId>

<artifactId>validation-api</artifactId>

<version>1.0.0.GA</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>2.6.0</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-mapper-asl</artifactId>

<version>1.9.12</version>

</dependency>

<dependency>

<groupId>net.sf.ezmorph</groupId>

<artifactId>ezmorph</artifactId>

<version>1.0.6</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.6.0</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-core-asl</artifactId>

<version>1.9.12</version>

</dependency>

<!-- mybatis集成spring的核心jar -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.3.0</version>

</dependency>

<!-- dbcp的数据源jar -->

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.3</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>com.springsource.org.aspectj.weaver</artifactId>

<version>1.6.8.RELEASE</version>

</dependency>

<!-- 打印日志 -->

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

</dependencies>

<build>

<sourceDirectory>${basedir}/src</sourceDirectory>

<outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>

<resources>

<resource>

<directory>${basedir}/src</directory>

<excludes>

<exclude>**/*.java</exclude>

</excludes>

</resource>

</resources>

<plugins>

<plugin>

<artifactId>maven-war-plugin</artifactId>

<configuration>

<webappDirectory>${basedir}/WebRoot</webappDirectory>

<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>

</configuration>

</plugin>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.5</source>

<target>1.5</target>

</configuration>

</plugin>

</plugins>

</build>

</project>


spring.xml

[html] view
plain copy

<?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:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd

">

<context:component-scan base-package="cn.et.day20170606">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

<!-- 加载资源文件 -->

<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 定义 数据源 通过el表达式把值设置进去 加载资源文件 -->

<bean id="datasoure" class="org.apache.commons.dbcp.BasicDataSource">

<property name="url" value="${url}"></property>

<property name="driverClassName" value="${driverClassName}"></property>

<property name="username" value="${userAccount}"></property>

<property name="password" value="${password}"></property>

<property name="validationQuery" value="SELECT sysdate FROM DUAL"/>

</bean>

<!-- 数据库的操作类 -->

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="datasoure"></property>

<property name="configLocation" value="classpath:mybatis_config.xml"></property>

</bean>

<!-- 配置扫描 扫描接口映射的注解和xml文件-->

<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

[html] view
plain copy

<span style="white-space:pre"> </span> <!-- 这么注入才不会覆盖加载资源文件 -->

<property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>

<property name="basePackage" value="cn.et.day20170606.dao.mapper"></property>

</bean>

<!-- 声明事物管理器 数据库的事物控制类 用来控制事物 -->

<bean id="trancsaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<!--必须要加载这个属性 通过这个源把数据库的事物交给他处理 -->

<property name="dataSource" ref="datasoure"></property>

</bean>

<!-- 声明事物通知 -->

<tx:advice id="tran" transaction-manager="trancsaction">

<tx:attributes>

<!-- 告诉他拦截这个方法 -->

<tx:method name="insert*" />

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="delete*" propagation="REQUIRED"/>

<!-- *代表了除了 上面配置的方法都不使用事务 -->

<tx:method name="*" read-only="true"/>

</tx:attributes>

</tx:advice>

<!-- 声明的事物通知方法 -->

<aop:config>

<!-- 配置一个切入点 -->

<aop:pointcut expression="execution(* cn.et.day20170606.service.*Service.*(..))" id="money"/>

<!-- 把通知和切入点引进来 -->

<aop:advisor advice-ref="tran" pointcut-ref="money"/>

</aop:config>

</beans>


springmvc.xml

[html] view
plain copy

<?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:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd

">

<!-- 配置扫描 -->

<context:component-scan base-package="cn.et.day20170606">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

</context:component-scan>

<!-- 配置json消息转换器-->

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

<property name="supportedMediaTypes">

<list>

<!--

设置响应的支持的响应类型

-->

<value>text/html</value>

<value>text/html;charset=utf-8</value>

<value>application/json;charset=utf8</value>

</list>

</property>

</bean>

<!-- 交给tomcat处理 才可以访问静态资源 -->

<mvc:default-servlet-handler/>

<!-- 配置视图解析器

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsps/" p:suffix=".jsp">

</bean>

-->

<mvc:annotation-driven/>

</beans>


mybatis.xml

[html] view
plain copy

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),

则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age

,数据库中的age字段没有值,Mybatis返回的map中只映射了 name和sex字段,而age字段则没有包含 -->

<settings>

<setting name="callSettersOnNulls" value="true"/>

</settings>

</configuration>


Controller

[java] view
plain copy

package cn.et.day20170606.controller;

import java.io.IOException;

import java.io.OutputStream;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import cn.et.day20170606.entity.EmpEntity;

import cn.et.day20170606.service.EmpJaxaService;

import cn.et.day20170606.utils.PagingEntity;

/**

*

* @author Administrator

*http://localhost:8080/springmvc/day0606/queryEmp

*/

@Controller

@RequestMapping(value="/day0609")

public class EmpJaxaAction {

@Autowired

private EmpJaxaService empService;

/**

*查询数据库的分页数据方法

*/

@RequestMapping(value="/queryPaginEmp")

@ResponseBody

public PagingEntity queryPagingEmp(Integer pagin,String ename){

return empService.queryPaginEmp(ename, pagin);

}

/**

*查询数据库的数据方法

*/

@RequestMapping(value="/queryEmp")

@ResponseBody

public List queryEmp(String ename){

return empService.queryEmp(ename);

}

/**

*新增数据库的数据方法

*成功返回1 失败返回0

* @throws IOException

*/

@ResponseBody

@RequestMapping(value="/insertEmp")

public void insertEmp(String ename,

String job,

String mgr,

String hiredate,

String sal,

String comm,

String deptno,OutputStream os) throws IOException{

EmpEntity emp=new EmpEntity();

emp.setComm(comm);

emp.setEname(ename);

emp.setHiredate(hiredate);

emp.setDeptno(deptno);

emp.setJob(job);

emp.setMgr(mgr);

emp.setSal(sal);

try{

empService.insertEmp(emp);

os.write("1".getBytes());

}catch (Exception e) {

os.write("0".getBytes());

}

}

/**

*更新数据库的数据方法

* @throws IOException

*/

@ResponseBody

@RequestMapping(value="/updateEmp")

public void updateEmp(String ename,String empno,

String job,

String mgr,

String hiredate,

String sal,

String comm,

String deptno,OutputStream os) throws IOException{

EmpEntity emp=new EmpEntity();

emp.setComm(comm);

emp.setEname(ename);

emp.setHiredate(hiredate);

emp.setDeptno(deptno);

emp.setJob(job);

emp.setMgr(mgr);

emp.setSal(sal);

emp.setDeptno(deptno);

emp.setEmpno(empno);

try{

empService.updateEmp(emp);

os.write("1".getBytes());

}catch (Exception e) {

os.write("0".getBytes());

}

}

/**

* 删除数据库数据的方法

* @throws IOException

*/

@ResponseBody

@RequestMapping(value="/deleteEmp")

public void deleteEmp(String empno,OutputStream os) throws IOException{

try{

empService.deleteEmp(empno);

os.write("1".getBytes());

}catch (Exception e) {

os.write("0".getBytes());

}

}

}


Service

[java] view
plain copy

package cn.et.day20170606.service.impl;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import cn.et.day20170606.dao.EmpJaxaDao;

import cn.et.day20170606.entity.EmpEntity;

import cn.et.day20170606.service.EmpJaxaService;

import cn.et.day20170606.utils.Calculate;

import cn.et.day20170606.utils.PagingEntity;

@Service

public class EmpJaxaServiceImpl implements EmpJaxaService {

@Autowired

private EmpJaxaDao empDao;

/**

*调用查询数据库的数据方法

*/

public List<Map<String,Object>> queryEmp(String ename){

return empDao.queryEmp("%"+ename+"%");

}

/**

*调用新增数据库的数据方法

*/

public void insertEmp(EmpEntity emp){

empDao.insertEmp(emp);

}

/**

*调用更新数据库的数据方法

*/

public void updateEmp(EmpEntity emp){

empDao.updateEmp(emp);

}

/**

* 调用删除数据库数据的方法

*/

public void deleteEmp(String empno){

empDao.deleteEmp(empno);

}

/**

*查询数据库的分页数据方法

*/

public PagingEntity queryPaginEmp(String ename,Integer current) {

if(ename==null){

ename="";

}

int sum=empDao.queryTotalEmp(ename);

PagingEntity p=Calculate.calculate(current, 5, sum);

List list=empDao.queryPaginEmp(ename,p.getStart(),p.getEnd());

p.setList(list);

return p;

}

}


Repository

[java] view
plain copy

package cn.et.day20170606.dao.impl;

import java.io.IOException;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import cn.et.day20170606.dao.EmpJaxaDao;

import cn.et.day20170606.dao.mapper.EmpMybatiesMapper;

import cn.et.day20170606.entity.EmpEntity;

@Repository

public class EmpJaxaDaoImpl implements EmpJaxaDao{

@Autowired

private EmpMybatiesMapper empMybatiesMapper;

/**

*查询数据库的数据方法

* @throws IOException

* @throws IOException

*/

public List<Map<String,Object>> queryEmp(String ename){

return empMybatiesMapper.queryEmp(ename);

}

/**

*新增数据库的数据方法

* @throws IOException

*/

public void insertEmp(EmpEntity emp){

empMybatiesMapper.insertEmp(emp);

}

/**

*更新数据库的数据方法

* @throws IOException

*/

public void updateEmp(EmpEntity emp){

empMybatiesMapper.updateEmp(emp);

}

/**

* 删除数据库数据的方法

* @throws IOException

* @throws IOException

*/

public void deleteEmp(String empno){

empMybatiesMapper.deleteEmp(empno);

}

/**

*查询数据库的分页数据方法

*注意结束位置再前面 开始位置再后面

* @throws IOException

*/

public List<Map<String,Object>> queryPaginEmp(String ename, int start,

int end){

return empMybatiesMapper.queryPaginEmp(ename, end, start);

}

/**

*查询数据库的总数方法

* @throws IOException

*/

public int queryTotalEmp(String ename){

return empMybatiesMapper.queryTotalEmp(ename);

}

}



mybatis的注解接口

[java] view
plain copy

package cn.et.day20170606.dao.mapper;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.annotations.Delete;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Param;

import org.apache.ibatis.annotations.Select;

import org.apache.ibatis.annotations.Update;

import cn.et.day20170606.entity.EmpEntity;

public interface EmpMybatiesMapper {

[java] view
plain copy

<span style="white-space:pre"> 1 max(列)+1 只允许单线程 不建议在开发坏境中用 开发测试可以用

2 序列 只允许单数据库的情况 next 开发坏境

3 uuid 分布式应用程序 (select sys_guid from dual)</span>

/**

*查询数据库的数据方法

*/

@Select(value="select empno,ename,job,mgr,to_char(hiredate,'yyyy-mm-dd') as hiredate,sal,comm,deptno from emp where nvl(ename,' ') like '%'||#{ename}||'%'")

public List<Map<String,Object>> queryEmp(@Param(value="ename")String ename);

/**

*查询数据库的分页数据方法

*/

@Select(value="select * from (select empno,ename,job,mgr,to_char(hiredate,'yyyy-mm-dd') as hiredate,sal,comm,deptno,rownum rn from emp where nvl(ename,' ') like '%'||#{ename}||'%') where rn<=#{start} and rn>=#{end}")

public List<Map<String,Object>> queryPaginEmp(@Param(value="ename")String ename,@Param(value="start")int start,@Param(value="end")int end);

/**

*查询数据库的总数方法

*/

@Select("select count(rowid) as CT from emp where nvl(ename,' ') like '%'||#{ename}||'%'")

public int queryTotalEmp(@Param(value="ename")String ename);

/**

*新增数据库的数据方法

*/

@Insert(value="insert into emp values((select nvl(max(empno),0)+10 from emp),#{emp.ename},#{emp.job},#{emp.mgr},to_date(#{emp.hiredate},'yyyy-mm-dd'),#{emp.sal},#{emp.comm},#{emp.deptno})")

public void insertEmp(@Param(value="emp")EmpEntity emp);

/**

*更新数据库的数据方法

*/

@Update(value="update emp set ename=#{emp.ename},job=#{emp.job},mgr=#{emp.mgr},hiredate=to_date(#{emp.hiredate},'yyyy-mm-dd'),sal=#{emp.sal},comm=#{emp.comm},deptno=#{emp.deptno} where empno=#{emp.empno}")

public void updateEmp(@Param(value="emp")EmpEntity emp);

/**

* 删除数据库数据的方法

*/

@Delete(value="delete from emp where empno=#{empno}")

public void deleteEmp(@Param(value = "empno") String empno);

}


entity

[java] view
plain copy

package cn.et.day20170606.entity;

/**

* 数据库的数据类 (一个对象就是数据库的一行)

* @author Administrator

*

*/

public class EmpEntity {

private String empno;

private String ename;

private String job;

private String mgr;

private String hiredate;

private String sal;

private String comm;

private String deptno;

public String getEmpno() {

return empno;

}

public void setEmpno(String empno) {

this.empno = empno;

}

public String getEname() {

return ename;

}

public void setEname(String ename) {

this.ename = ename;

}

public String getJob() {

return job;

}

public void setJob(String job) {

this.job = job;

}

public String getMgr() {

return mgr;

}

public void setMgr(String mgr) {

this.mgr = mgr;

}

public String getHiredate() {

return hiredate;

}

public void setHiredate(String hiredate) {

this.hiredate = hiredate;

}

public String getSal() {

return sal;

}

public void setSal(String sal) {

this.sal = sal;

}

public String getComm() {

return comm;

}

public void setComm(String comm) {

this.comm = comm;

}

public String getDeptno() {

return deptno;

}

public void setDeptno(String deptno) {

this.deptno = deptno;

}

}


分页的工具类

[java] view
plain copy

package cn.et.day20170606.utils;

import java.util.List;

/**

* 分页的一些参数

* @author

*

* 编写时间:2017-4-19 下午03:45:42

*/

public class PagingEntity {

/**

* 当前页数

*/

private int current;

/**

* 一页显示的条数

*/

private int quantity;

/**

* 数据库的总条数

*/

private int sum;

/**

* 首页

*/

private int first=1;

/**

* 尾页

*/

private int trail;

/**

* 上一页

*/

private int last;

/**

* 下一页

*/

private int next;

/**

* 开始的位置

*/

private int start;

/**

* 结束的位置

*/

private int end;

private List list;

public int getCurrent() {

return current;

}

public void setCurrent(int current) {

this.current = current;

}

public int getQuantity() {

return quantity;

}

public void setQuantity(int quantity) {

this.quantity = quantity;

}

public int getSum() {

return sum;

}

public void setSum(int sum) {

this.sum = sum;

}

public int getLast() {

return last;

}

public void setLast(int last) {

this.last = last;

}

public int getNext() {

return next;

}

public void setNext(int next) {

this.next = next;

}

public int getStart() {

return start;

}

public void setStart(int start) {

this.start = start;

}

public int getEnd() {

return end;

}

public void setEnd(int end) {

this.end = end;

}

public int getFirst() {

return first;

}

public void setFirst(int first) {

this.first = first;

}

public int getTrail() {

return trail;

}

public void setTrail(int trail) {

this.trail = trail;

}

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

}


给分页bean赋值

[java] view
plain copy

package cn.et.day20170606.utils;

/**

* 用来计算分页的参数

* @author 周芳园

*

* 编写时间:2017-4-19 下午04:01:33

*/

public class Calculate {

/**

* 设置他的参数

* @param current

* @param quantity

* @param sum

* @return

*/

public static PagingEntity calculate(int current,int quantity,int sum){

PagingEntity pa=new PagingEntity();

pa.setCurrent(current);

pa.setQuantity(quantity);

pa.setSum(sum);

int last=(current==1?1:current-1);

int start=(current-1)*quantity+1;

int end=current*quantity;

int trail=(sum%quantity==0?sum/quantity:sum/quantity+1);

int next=(current==trail?trail:current+1);

pa.setLast(last);

pa.setNext(next);

pa.setStart(start);

pa.setEnd(end);

pa.setTrail(trail);

return pa;

}

/**

* 测试逻辑对不对

*/

public static void main(String[] args) {

Calculate ca=new Calculate();

PagingEntity pa=ca.calculate(2, 5, 16);

System.out.print("当前页"+pa.getCurrent());

System.out.print("总页"+pa.getTrail());

System.out.println("上一页"+pa.getLast());

System.out.println("开始位置"+pa.getStart());

System.out.println("结束位置"+pa.getEnd());

}

}


jsp

[html] view
plain copy

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript">

var path="${pageContext.request.contextPath}/day0609";

//根据id获取对象

function $(id){

return document.getElementById(id);

}

//和div赋值

function toUpdate(empno,ename,job,mgr,hiredate,sal,comm,deptno){

$('updateDiv').style.display='block';

$('empNoId').value=empno;

$('updateEname').value=(ename=='null'?'':ename);

$('updateJob').value=(job=='null'?'':job);

$('updateMgr').value=mgr;

$('updateHiredate').value=hiredate;

$('updateSal').value=sal;

$('updateComm').value=comm;

$('updateDeptno').value=deptno;

}

/**

封装ajax

**/

function sendAjax(method,url,callback,param){

var xmlHttp=new XMLHttpRequest();

//向服务器发出请求

//规定请求的类型、URL 以及是否异步处理请求。

//method:请求的类型;GET 或 POST

//url:文件在服务器上的位置

//async:true(异步)或 false(同步)

xmlHttp.open(method,url,true);

//设置响应的回调 当后台的json返回后 自动调用xhr.onreadystatechange指定的函数

xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState==4 && xmlHttp.status==200){

//成功后调用第三个函数

callback(xmlHttp.responseText);

}

}

//post 在send里面带参数 get直接带 post一定要设置setRequestHeader

if(method=="POST"){

xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

xmlHttp.send(param);

}else{

xmlHttp.send();

}

}

//和action交互的方法 用于更新

function toUpdate1(){

document.getElementById('updateDiv').style.display='none'

var empno=$('empNoId').value;

var ename=$('updateEname').value;

var job=$('updateJob').value;

var mgr=$('updateMgr').value;

var hiredate=$('updateHiredate').value;

var sal=$('updateSal').value;

var comm=$('updateComm').value;

var deptno=$('updateDeptno').value;

//参数

var param="ename="+ename+"&job="+job+"&mgr="+mgr+"&hiredate="+hiredate+"&sal="+sal+"&comm="+comm+"&deptno="+deptno+"&empno="+empno

//调用ajax好action交互

sendAjax("POST",path+"/updateEmp",function(message){

if(message==1){

alert("操作成功");

toQuery(current);

}else{

alert("操作失败");

}

},param)

}

//和action交互的方法 用于新增

function toAdd(){

document.getElementById('addDiv').style.display='none'

var xmlHttp=new XMLHttpRequest();

var ename=$('a1').value;

var job=$('a2').value;

var mgr=$('a3').value;

var hiredate=$('a4').value;

var sal=$('a5').value;

var comm=$('a6').value;

var deptno=$('a7').value;

var param="ename="+ename+"&job="+job+"&mgr="+mgr+"&hiredate="+hiredate+"&sal="+sal+"&comm="+comm+"&deptno="+deptno;

sendAjax("POST",path+"/insertEmp",function(message){

if(message==1){

alert("操作成功");

toQuery(current);

}else{

alert("操作失败");

}

},param)

}

//和action交互的方法 用于删除

function toDelete(empno){

var param="empno="+empno;

sendAjax("POST",path+"/deleteEmp",function(message){

if(message==1){

alert("操作成功");

toQuery(current);

}else{

alert("操作失败");

}

},param)

}

//分页的一些参数

var current=1;

var sum=0;

var trail=0;

var last=0;

var next=0;

////和action交互的方法 用于查询

function toQuery(pagin){

var xmlHttp=new XMLHttpRequest();

var tb=$("tb");

var td=$("td");

var ename=$("ename").value;

xmlHttp.open("GET",path+"/queryPaginEmp?ename="+ename+"&pagin="+pagin,true);

xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState==4&&xmlHttp.status==200){

//获取action响应的内容

var json=xmlHttp.responseText;

//把它转成json对象

var jsonall=JSON.parse(json);

//给分页的一些参数赋值

current=jsonall.current;

sum=jsonall.sum;

trail=jsonall.trail;

last=jsonall.last;

next=jsonall.next;

$("p1").innerHTML=current;

$("p2").innerHTML=trail;

$("p3").innerHTML=sum;

var jsonObj=jsonall.list;

//无刷新在此查询的时候把整个tbody删除

tb.removeChild(td);

var tdRow=document.createElement("tbody");

tdRow.setAttribute("id","td");

//把tbody加到table里面去

tb.appendChild(tdRow);

for ( var i = 0; i < jsonObj.length; i++) {

var el = jsonObj[i];

//创建节点

var trRow=document.createElement("tr");

var tdRow1=document.createElement("td");

var tdRow2=document.createElement("td");

var tdRow3=document.createElement("td");

var tdRow4=document.createElement("td");

var tdRow5=document.createElement("td");

var tdRow6=document.createElement("td");

var tdRow7=document.createElement("td");

var tdRow8=document.createElement("td");

var tdRow9=document.createElement("td");

tdRow1.innerHTML=el.EMPNO;

tdRow2.innerHTML=el.ENAME;

tdRow3.innerText=el.JOB;

tdRow4.innerText=el.MGR;

tdRow5.innerHTML=el.HIREDATE;

tdRow6.innerHTML=el.SAL;

tdRow7.innerHTML=el.COMM;

tdRow8.innerHTML=el.DEPTNO;

tdRow9.innerHTML="<button onclick='toDelete("+el.EMPNO+")'>删除</button><button onclick=toUpdate("+el.EMPNO+",'"+el.ENAME+"','"+el.JOB+"',"+

el.MGR+",'"+el.HIREDATE+"',"+el.SAL+","+el.COMM+","+el.DEPTNO+")>更新</button>";

//把节点tdRow1加到trRow

trRow.appendChild(tdRow1);

trRow.appendChild(tdRow2);

trRow.appendChild(tdRow3);

trRow.appendChild(tdRow4);

trRow.appendChild(tdRow5);

trRow.appendChild(tdRow6);

trRow.appendChild(tdRow7);

trRow.appendChild(tdRow8);

trRow.appendChild(tdRow9);

tdRow.appendChild(trRow);

}

}

}

xmlHttp.send();

}

</script>

</head>

<body onload="toQuery(1)">

<!-- http://localhost:8080/simb/day20170609/emp.jsp -->

ename<input type="text" name="ename" id="ename"/>

<input type="button" value="查询" onclick="toQuery(current)"/>

<input type="button" value="新增" onclick="document.getElementById('addDiv').style.display='block'"/><br/>

<table id="tb">

<thead>

<tr>

<td>empno</td>

<td>ename</td>

<td>job</td>

<td>mgr</td>

<td>hiredate</td>

<td>sal</td>

<td>comm</td>

<td>deptno</td>

<td>操作</td>

</tr>

</thead >

<tbody id="td">

</tbody>

</table>

<input type="image" src="${pageContext.request.contextPath}/day20170609/image/18.gif" onclick="toQuery(1)"/>

<input type="image" src="${pageContext.request.contextPath}/day20170609/image/20.gif" onclick="toQuery(last)"/>

当前<span id="p1"></span>页 总<span id="p2"></span>页 总:<span id="p3"></span>

<input type="image" src="${pageContext.request.contextPath}/day20170609/image/16.gif" onclick="toQuery(next)"/>

<input type="image" src="${pageContext.request.contextPath}/day20170609/image/14.gif" onclick="toQuery(trail)"/>

<!-- 新增的div-->

<div id="addDiv" style="display:none;position: absolute;left: 65%;top: 14%;width: 300px;height:200px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">

ENAME:<input type='text' name='ename' id='a1'>

<br/>

JOB:<input type='text' name='job' id='a2'>

<br/>

MGR:<input type='text' name='mgr' id='a3'>

<br/>

HIREDATE:<input type='text' name='hiredate' id='a4'>

<br/>

SAL:<input type='text' name='sal' id='a5'>

<br/>

COMM:<input type='text' name='comm' id='a6'>

<br/>

DEPTNO:<input type='text' name='deptno' id='a7'>

<br/>

<input type='button' value="新增" onclick="toAdd()">

<input type='button' value="关闭" onclick="document.getElementById('addDiv').style.display='none'">

</div>

<!-- 修改的div-->

<div id="updateDiv" style="display:none;position: absolute;left: 65%;top: 14%;width: 300px;height:200px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">

<input type='hidden' name='empno' id='empNoId'>

ENAME: <input type='text' id="updateEname" name='ename'>

<br/>

JOB: <input type='text' id="updateJob" name='job'>

<br/>

MGR: <input type='text' id="updateMgr" name='mgr'>

<br/>

HIREDATE: <input type='text' id="updateHiredate" name='hiredate'>

<br/>

SAL: <input type='text' id="updateSal" name='sal'>

<br/>

COMM: <input type='text' id="updateComm" name='comm'>

<br/>

DEPTNO: <input type='text' id="updateDeptno" name='deptno'>

<br/>

<input type='button' value='修改' onclick="toUpdate1()">

<input type='button' value="关闭" onclick="document.getElementById('updateDiv').style.display='none'">

</div>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐