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

8 篇文章 0 订阅
5 篇文章 0 订阅

具体步奏

步骤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
  1. <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">  
  2.   <modelVersion>4.0.0</modelVersion>  
  3.   <groupId>springIntegrationMybatis</groupId>  
  4.   <artifactId>springIntegrationMybatis</artifactId>  
  5.   <version>0.0.1-SNAPSHOT</version>  
  6.   <packaging>war</packaging>  
  7.   <name/>  
  8.   <description/>  
  9.   <dependencies>  
  10.     <dependency>  
  11.       <groupId>org.apache.openejb</groupId>  
  12.       <artifactId>javaee-api</artifactId>  
  13.       <version>5.0-1</version>  
  14.       <scope>provided</scope>  
  15.     </dependency>  
  16.     <dependency>  
  17.       <groupId>javax.faces</groupId>  
  18.       <artifactId>jsf-api</artifactId>  
  19.       <version>1.2_04</version>  
  20.       <scope>provided</scope>  
  21.     </dependency>  
  22.     <dependency>  
  23.       <groupId>javax.servlet</groupId>  
  24.       <artifactId>jstl</artifactId>  
  25.       <version>1.2</version>  
  26.       <scope>provided</scope>  
  27.     </dependency>  
  28.     <dependency>  
  29.       <groupId>javax.servlet.jsp</groupId>  
  30.       <artifactId>jsp-api</artifactId>  
  31.       <version>2.1</version>  
  32.       <scope>provided</scope>  
  33.     </dependency>  
  34.     <dependency>  
  35.       <groupId>javax.faces</groupId>  
  36.       <artifactId>jsf-impl</artifactId>  
  37.       <version>1.2_04</version>  
  38.       <scope>provided</scope>  
  39.     </dependency>  
  40.       
  41.      <!-- 配置mybatis的依赖 -->  
  42.     <dependency>  
  43.       <groupId>org.mybatis</groupId>  
  44.       <artifactId>mybatis</artifactId>  
  45.       <version>3.2.8</version>  
  46.     </dependency>  
  47.     <!-- 配置本地的jar -->  
  48.     <dependency>  
  49.          <groupId>ojdbc</groupId>  
  50.           <artifactId>objdc1</artifactId>  
  51.          <version>3.2.8</version>  
  52.         <scope>system</scope>  
  53.         <systemPath>C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar</systemPath>  
  54.     </dependency>  
  55.     <!-- spring和springMvc的jar -->  
  56.     <dependency>  
  57.       <groupId>org.springframework</groupId>  
  58.       <artifactId>spring-core</artifactId>  
  59.       <version>4.3.8.RELEASE</version>  
  60.     </dependency>  
  61.     <dependency>  
  62.       <groupId>org.springframework</groupId>  
  63.       <artifactId>spring-webmvc</artifactId>  
  64.       <version>4.3.8.RELEASE</version>  
  65.     </dependency>  
  66.     <dependency>  
  67.       <groupId>org.springframework</groupId>  
  68.       <artifactId>spring-jdbc</artifactId>  
  69.       <version>4.3.8.RELEASE</version>  
  70.     </dependency>  
  71.     <!-- json的jar -->  
  72.     <dependency>  
  73.       <groupId>net.sf.json-lib</groupId>  
  74.       <artifactId>json-lib</artifactId>  
  75.       <version>2.3</version>  
  76.       <classifier>jdk15</classifier>  
  77.     </dependency>  
  78.     <!-- jackson的一系列jar -->  
  79.     <dependency>  
  80.       <groupId>com.fasterxml.jackson.core</groupId>  
  81.       <artifactId>jackson-core</artifactId>  
  82.       <version>2.6.0</version>  
  83.     </dependency>  
  84.     <dependency>  
  85.       <groupId>javax.validation</groupId>  
  86.       <artifactId>validation-api</artifactId>  
  87.       <version>1.0.0.GA</version>  
  88.     </dependency>  
  89.     <dependency>  
  90.       <groupId>com.fasterxml.jackson.core</groupId>  
  91.       <artifactId>jackson-annotations</artifactId>  
  92.       <version>2.6.0</version>  
  93.     </dependency>  
  94.     <dependency>  
  95.       <groupId>org.codehaus.jackson</groupId>  
  96.       <artifactId>jackson-mapper-asl</artifactId>  
  97.       <version>1.9.12</version>  
  98.     </dependency>  
  99.     <dependency>  
  100.       <groupId>net.sf.ezmorph</groupId>  
  101.       <artifactId>ezmorph</artifactId>  
  102.       <version>1.0.6</version>  
  103.     </dependency>  
  104.     <dependency>  
  105.           <groupId>com.fasterxml.jackson.core</groupId>  
  106.           <artifactId>jackson-databind</artifactId>          
  107.           <version>2.6.0</version>  
  108.     </dependency>    
  109.     <dependency>  
  110.       <groupId>org.codehaus.jackson</groupId>  
  111.       <artifactId>jackson-core-asl</artifactId>  
  112.       <version>1.9.12</version>  
  113.     </dependency>  
  114.     <!--  mybatis集成spring的核心jar -->  
  115.     <dependency>  
  116.       <groupId>org.mybatis</groupId>  
  117.       <artifactId>mybatis-spring</artifactId>  
  118.       <version>1.3.0</version>  
  119.     </dependency>  
  120.     <!-- dbcp的数据源jar -->  
  121.     <dependency>  
  122.       <groupId>commons-dbcp</groupId>  
  123.       <artifactId>commons-dbcp</artifactId>  
  124.       <version>1.3</version>  
  125.     </dependency>  
  126.       
  127.     <dependency>  
  128.       <groupId>org.aspectj</groupId>  
  129.       <artifactId>com.springsource.org.aspectj.weaver</artifactId>  
  130.       <version>1.6.8.RELEASE</version>  
  131.     </dependency>  
  132.     <!-- 打印日志 -->  
  133.     <dependency>  
  134.       <groupId>log4j</groupId>  
  135.       <artifactId>log4j</artifactId>  
  136.       <version>1.2.17</version>  
  137.     </dependency>  
  138.       
  139.   </dependencies>  
  140.   <build>  
  141.     <sourceDirectory>${basedir}/src</sourceDirectory>  
  142.     <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>  
  143.     <resources>  
  144.       <resource>  
  145.         <directory>${basedir}/src</directory>  
  146.         <excludes>  
  147.           <exclude>**/*.java</exclude>  
  148.         </excludes>  
  149.       </resource>  
  150.     </resources>  
  151.     <plugins>  
  152.       <plugin>  
  153.         <artifactId>maven-war-plugin</artifactId>  
  154.         <configuration>  
  155.           <webappDirectory>${basedir}/WebRoot</webappDirectory>  
  156.           <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>  
  157.         </configuration>  
  158.       </plugin>  
  159.       <plugin>  
  160.         <artifactId>maven-compiler-plugin</artifactId>  
  161.         <configuration>  
  162.           <source>1.5</source>  
  163.           <target>1.5</target>  
  164.         </configuration>  
  165.       </plugin>  
  166.     </plugins>  
  167.   </build>  
  168. </project>  

spring.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xmlns:context="http://www.springframework.org/schema/context"  
  7.     xmlns:tx="http://www.springframework.org/schema/tx"  
  8.     xmlns:aop="http://www.springframework.org/schema/aop"  
  9.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  10.       
  11.     xsi:schemaLocation="  
  12.     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  13.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd  
  14.     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd  
  15.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd  
  16.     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd  
  17.     ">  
  18.     <context:component-scan base-package="cn.et.day20170606">  
  19.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  
  20.     </context:component-scan>  
  21.     <!-- 加载资源文件 -->  
  22.     <context:property-placeholder location="classpath:jdbc.properties"/>  
  23.     <!-- 定义 数据源 通过el表达式把值设置进去  加载资源文件 -->  
  24.     <bean id="datasoure" class="org.apache.commons.dbcp.BasicDataSource">  
  25.         <property name="url" value="${url}"></property>  
  26.         <property name="driverClassName" value="${driverClassName}"></property>  
  27.         <property name="username" value="${userAccount}"></property>  
  28.         <property name="password" value="${password}"></property>  
  29.         <property name="validationQuery" value="SELECT sysdate FROM DUAL"/>    
  30.     </bean>  
  31.         <!-- 数据库的操作类 -->  
  32.     <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  33.         <property name="dataSource" ref="datasoure"></property>  
  34.         <property name="configLocation" value="classpath:mybatis_config.xml"></property>  
  35.     </bean>  
  36.     <!-- 配置扫描 扫描接口映射的注解和xml文件-->  
  37.     <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
[html]  view plain  copy
  1. <span style="white-space:pre">  </span>    <!-- 这么注入才不会覆盖加载资源文件 -->  
  2.         <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>  
  3.         <property name="basePackage" value="cn.et.day20170606.dao.mapper"></property>  
  4.     </bean>  
  5.      <!-- 声明事物管理器    数据库的事物控制类 用来控制事物 -->    
  6.     <bean id="trancsaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
  7.         <!--必须要加载这个属性 通过这个源把数据库的事物交给他处理 -->    
  8.         <property name="dataSource" ref="datasoure"></property>    
  9.     </bean>    
  10.     <!-- 声明事物通知 -->    
  11.     <tx:advice id="tran" transaction-manager="trancsaction">    
  12.         <tx:attributes>    
  13.         <!-- 告诉他拦截这个方法 -->    
  14.           <tx:method name="insert*" />    
  15.           <tx:method name="update*" propagation="REQUIRED"/>  
  16.           <tx:method name="delete*" propagation="REQUIRED"/>  
  17.           <!-- *代表了除了 上面配置的方法都不使用事务 -->  
  18.           <tx:method name="*" read-only="true"/>  
  19.         </tx:attributes>    
  20.     </tx:advice>   
  21.     <!-- 声明的事物通知方法 -->    
  22.     <aop:config>    
  23.         <!-- 配置一个切入点 -->    
  24.         <aop:pointcut expression="execution(* cn.et.day20170606.service.*Service.*(..))" id="money"/>    
  25.         <!-- 把通知和切入点引进来 -->    
  26.         <aop:advisor advice-ref="tran" pointcut-ref="money"/>    
  27.     </aop:config>  
  28. </beans>  

springmvc.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans  
  4.     xmlns="http://www.springframework.org/schema/beans"  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xmlns:p="http://www.springframework.org/schema/p"  
  7.     xmlns:context="http://www.springframework.org/schema/context"  
  8.     xmlns:tx="http://www.springframework.org/schema/tx"  
  9.     xmlns:aop="http://www.springframework.org/schema/aop"  
  10.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  11.       
  12.     xsi:schemaLocation="  
  13.     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  14.     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd  
  15.     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd  
  16.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd  
  17.     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd  
  18.     ">  
  19.     <!-- 配置扫描 -->  
  20.     <context:component-scan base-package="cn.et.day20170606">  
  21.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>  
  22.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>  
  23.     </context:component-scan>  
  24.      <!-- 配置json消息转换器-->  
  25.    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
  26.         <property name="supportedMediaTypes">  
  27.             <list>  
  28.                         <!-- 
  29.                          设置响应的支持的响应类型  
  30.                             -->  
  31.                             <value>text/html</value>  
  32.                             <value>text/html;charset=utf-8</value>  
  33.                             <value>application/json;charset=utf8</value>  
  34.             </list>  
  35.         </property>  
  36.    </bean>  
  37.     <!-- 交给tomcat处理 才可以访问静态资源 -->  
  38.     <mvc:default-servlet-handler/>  
  39.       
  40.     <!-- 配置视图解析器   
  41.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsps/" p:suffix=".jsp">  
  42.     </bean>  
  43.     -->  
  44.    <mvc:annotation-driven/>  
  45. </beans>  

mybatis.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.     <!-- Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),  
  5.     则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age  
  6.     ,数据库中的age字段没有值,Mybatis返回的map中只映射了 name和sex字段,而age字段则没有包含 -->  
  7.       <settings>  
  8.           <setting name="callSettersOnNulls" value="true"/>  
  9.      </settings>  
  10. </configuration>  


Controller

[java]  view plain  copy
  1. package cn.et.day20170606.controller;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.OutputStream;  
  5. import java.util.List;  
  6.   
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.stereotype.Controller;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10. import org.springframework.web.bind.annotation.ResponseBody;  
  11.   
  12. import cn.et.day20170606.entity.EmpEntity;  
  13. import cn.et.day20170606.service.EmpJaxaService;  
  14. import cn.et.day20170606.utils.PagingEntity;  
  15.   
  16. /** 
  17.  *  
  18.  * @author Administrator 
  19.  *http://localhost:8080/springmvc/day0606/queryEmp 
  20.  */  
  21. @Controller  
  22. @RequestMapping(value="/day0609")  
  23. public class EmpJaxaAction {  
  24.     @Autowired  
  25.     private EmpJaxaService empService;  
  26.     /** 
  27.      *查询数据库的分页数据方法 
  28.      */  
  29.     @RequestMapping(value="/queryPaginEmp")  
  30.     @ResponseBody  
  31.     public  PagingEntity queryPagingEmp(Integer pagin,String ename){  
  32.         return empService.queryPaginEmp(ename, pagin);  
  33.     }  
  34.       
  35.     /** 
  36.      *查询数据库的数据方法 
  37.      */  
  38.     @RequestMapping(value="/queryEmp")  
  39.     @ResponseBody  
  40.     public  List queryEmp(String ename){  
  41.         return empService.queryEmp(ename);  
  42.     }  
  43.     /** 
  44.      *新增数据库的数据方法 
  45.      *成功返回1 失败返回0 
  46.      * @throws IOException  
  47.      */  
  48.     @ResponseBody  
  49.     @RequestMapping(value="/insertEmp")  
  50.     public void insertEmp(String ename,  
  51.             String job,  
  52.             String mgr,  
  53.             String hiredate,  
  54.             String sal,  
  55.             String comm,  
  56.             String deptno,OutputStream os) throws IOException{  
  57.         EmpEntity emp=new EmpEntity();  
  58.         emp.setComm(comm);  
  59.         emp.setEname(ename);  
  60.         emp.setHiredate(hiredate);  
  61.         emp.setDeptno(deptno);  
  62.         emp.setJob(job);  
  63.         emp.setMgr(mgr);  
  64.         emp.setSal(sal);  
  65.         try{  
  66.             empService.insertEmp(emp);  
  67.             os.write("1".getBytes());  
  68.         }catch (Exception e) {  
  69.             os.write("0".getBytes());  
  70.         }  
  71.           
  72.     }  
  73.     /** 
  74.      *更新数据库的数据方法 
  75.      * @throws IOException  
  76.      */  
  77.     @ResponseBody  
  78.     @RequestMapping(value="/updateEmp")  
  79.     public void updateEmp(String ename,String empno,  
  80.             String job,  
  81.             String mgr,  
  82.             String hiredate,  
  83.             String sal,  
  84.             String comm,  
  85.             String deptno,OutputStream os) throws IOException{  
  86.         EmpEntity emp=new EmpEntity();  
  87.         emp.setComm(comm);  
  88.         emp.setEname(ename);  
  89.         emp.setHiredate(hiredate);  
  90.         emp.setDeptno(deptno);  
  91.         emp.setJob(job);  
  92.         emp.setMgr(mgr);  
  93.         emp.setSal(sal);  
  94.         emp.setDeptno(deptno);  
  95.         emp.setEmpno(empno);  
  96.         try{  
  97.             empService.updateEmp(emp);  
  98.             os.write("1".getBytes());  
  99.         }catch (Exception e) {  
  100.             os.write("0".getBytes());  
  101.         }  
  102.           
  103.     }  
  104.     /** 
  105.      * 删除数据库数据的方法 
  106.      * @throws IOException  
  107.      */  
  108.     @ResponseBody  
  109.     @RequestMapping(value="/deleteEmp")  
  110.     public void deleteEmp(String empno,OutputStream os) throws IOException{  
  111.         try{  
  112.             empService.deleteEmp(empno);  
  113.             os.write("1".getBytes());  
  114.         }catch (Exception e) {  
  115.             os.write("0".getBytes());  
  116.         }  
  117.           
  118.     }  
  119. }  

Service

[java]  view plain  copy
  1. package cn.et.day20170606.service.impl;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.stereotype.Service;  
  8.   
  9. import cn.et.day20170606.dao.EmpJaxaDao;  
  10. import cn.et.day20170606.entity.EmpEntity;  
  11. import cn.et.day20170606.service.EmpJaxaService;  
  12. import cn.et.day20170606.utils.Calculate;  
  13. import cn.et.day20170606.utils.PagingEntity;  
  14.   
  15.   
  16. @Service  
  17. public class EmpJaxaServiceImpl implements EmpJaxaService {  
  18.     @Autowired  
  19.     private EmpJaxaDao empDao;  
  20.     /** 
  21.      *调用查询数据库的数据方法 
  22.      */  
  23.     public List<Map<String,Object>> queryEmp(String ename){  
  24.         return empDao.queryEmp("%"+ename+"%");  
  25.     }  
  26.     /** 
  27.      *调用新增数据库的数据方法 
  28.      */  
  29.     public void insertEmp(EmpEntity emp){  
  30.         empDao.insertEmp(emp);  
  31.     }  
  32.     /** 
  33.      *调用更新数据库的数据方法 
  34.      */  
  35.     public void updateEmp(EmpEntity emp){  
  36.         empDao.updateEmp(emp);  
  37.     }  
  38.     /** 
  39.      * 调用删除数据库数据的方法 
  40.      */  
  41.     public void deleteEmp(String empno){  
  42.         empDao.deleteEmp(empno);  
  43.     }  
  44.     /** 
  45.      *查询数据库的分页数据方法 
  46.      */  
  47.     public PagingEntity queryPaginEmp(String ename,Integer current) {  
  48.         if(ename==null){  
  49.             ename="";  
  50.         }  
  51.         int sum=empDao.queryTotalEmp(ename);  
  52.         PagingEntity p=Calculate.calculate(current, 5, sum);  
  53.         List list=empDao.queryPaginEmp(ename,p.getStart(),p.getEnd());  
  54.         p.setList(list);  
  55.         return p;  
  56.     }  
  57.   
  58. }  

Repository

[java]  view plain  copy
  1. package cn.et.day20170606.dao.impl;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.stereotype.Repository;  
  9.   
  10. import cn.et.day20170606.dao.EmpJaxaDao;  
  11. import cn.et.day20170606.dao.mapper.EmpMybatiesMapper;  
  12. import cn.et.day20170606.entity.EmpEntity;  
  13.   
  14. @Repository  
  15. public class EmpJaxaDaoImpl implements EmpJaxaDao{  
  16.     @Autowired  
  17.     private EmpMybatiesMapper empMybatiesMapper;  
  18.     /** 
  19.      *查询数据库的数据方法 
  20.      * @throws IOException  
  21.      * @throws IOException  
  22.      */  
  23.     public List<Map<String,Object>> queryEmp(String ename){  
  24.         return empMybatiesMapper.queryEmp(ename);  
  25.     }  
  26.     /** 
  27.      *新增数据库的数据方法 
  28.      * @throws IOException  
  29.      */  
  30.     public void insertEmp(EmpEntity emp){  
  31.         empMybatiesMapper.insertEmp(emp);  
  32.     }  
  33.     /** 
  34.      *更新数据库的数据方法 
  35.      * @throws IOException  
  36.      */  
  37.     public void updateEmp(EmpEntity emp){  
  38.         empMybatiesMapper.updateEmp(emp);  
  39.     }  
  40.     /** 
  41.      * 删除数据库数据的方法 
  42.      * @throws IOException  
  43.      * @throws IOException  
  44.      */  
  45.     public void deleteEmp(String empno){  
  46.         empMybatiesMapper.deleteEmp(empno);  
  47.     }  
  48.     /** 
  49.      *查询数据库的分页数据方法 
  50.      *注意结束位置再前面   开始位置再后面 
  51.      * @throws IOException  
  52.      */  
  53.     public List<Map<String,Object>> queryPaginEmp(String ename, int start,  
  54.             int end){  
  55.         return empMybatiesMapper.queryPaginEmp(ename, end, start);  
  56.     }  
  57.     /** 
  58.      *查询数据库的总数方法 
  59.      * @throws IOException  
  60.      */  
  61.     public int queryTotalEmp(String ename){  
  62.         return empMybatiesMapper.queryTotalEmp(ename);  
  63.     }  
  64. }  


mybatis的注解接口

[java]  view plain  copy
  1. package cn.et.day20170606.dao.mapper;  
  2.   
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import org.apache.ibatis.annotations.Delete;  
  7. import org.apache.ibatis.annotations.Insert;  
  8. import org.apache.ibatis.annotations.Param;  
  9. import org.apache.ibatis.annotations.Select;  
  10. import org.apache.ibatis.annotations.Update;  
  11.   
  12. import cn.et.day20170606.entity.EmpEntity;  
  13.   
  14.   
  15. public interface EmpMybatiesMapper {  
[java]  view plain  copy
  1. <span style="white-space:pre">  1 max(列)+1  只允许单线程   不建议在开发坏境中用  开发测试可以用  
  2.      2 序列  只允许单数据库的情况  next 开发坏境  
  3.      3 uuid 分布式应用程序   (select sys_guid from dual)</span>  
  4.     /** 
  5.      *查询数据库的数据方法 
  6.      */  
  7.     @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}||'%'")  
  8.     public List<Map<String,Object>> queryEmp(@Param(value="ename")String ename);  
  9.     /** 
  10.      *查询数据库的分页数据方法 
  11.      */  
  12.     @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}")  
  13.     public List<Map<String,Object>> queryPaginEmp(@Param(value="ename")String ename,@Param(value="start")int start,@Param(value="end")int end);  
  14.     /** 
  15.      *查询数据库的总数方法 
  16.      */  
  17.     @Select("select count(rowid) as CT from emp where nvl(ename,' ') like '%'||#{ename}||'%'")  
  18.     public int queryTotalEmp(@Param(value="ename")String ename);  
  19.     /** 
  20.      *新增数据库的数据方法 
  21.      */  
  22.     @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})")  
  23.     public void insertEmp(@Param(value="emp")EmpEntity emp);  
  24.     /** 
  25.      *更新数据库的数据方法 
  26.      */  
  27.     @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}")  
  28.     public void updateEmp(@Param(value="emp")EmpEntity emp);  
  29.     /** 
  30.      * 删除数据库数据的方法 
  31.      */  
  32.     @Delete(value="delete from emp where empno=#{empno}")  
  33.     public void deleteEmp(@Param(value = "empno") String empno);  
  34.       
  35. }  

entity

[java]  view plain  copy
  1. package cn.et.day20170606.entity;  
  2.   
  3. /** 
  4.  * 数据库的数据类 (一个对象就是数据库的一行) 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class EmpEntity {  
  9.         private String empno;  
  10.         private String ename;  
  11.         private String job;  
  12.         private String mgr;  
  13.         private String hiredate;  
  14.         private String sal;  
  15.         private String comm;  
  16.         private String deptno;  
  17.         public String getEmpno() {  
  18.             return empno;  
  19.         }  
  20.         public void setEmpno(String empno) {  
  21.             this.empno = empno;  
  22.         }  
  23.         public String getEname() {  
  24.             return ename;  
  25.         }  
  26.         public void setEname(String ename) {  
  27.             this.ename = ename;  
  28.         }  
  29.         public String getJob() {  
  30.             return job;  
  31.         }  
  32.         public void setJob(String job) {  
  33.             this.job = job;  
  34.         }  
  35.         public String getMgr() {  
  36.             return mgr;  
  37.         }  
  38.         public void setMgr(String mgr) {  
  39.             this.mgr = mgr;  
  40.         }  
  41.         public String getHiredate() {  
  42.             return hiredate;  
  43.         }  
  44.         public void setHiredate(String hiredate) {  
  45.             this.hiredate = hiredate;  
  46.         }  
  47.         public String getSal() {  
  48.             return sal;  
  49.         }  
  50.         public void setSal(String sal) {  
  51.             this.sal = sal;  
  52.         }  
  53.         public String getComm() {  
  54.             return comm;  
  55.         }  
  56.         public void setComm(String comm) {  
  57.             this.comm = comm;  
  58.         }  
  59.         public String getDeptno() {  
  60.             return deptno;  
  61.         }  
  62.         public void setDeptno(String deptno) {  
  63.             this.deptno = deptno;  
  64.         }  
  65.           
  66. }  


分页的工具类

[java]  view plain  copy
  1. package cn.et.day20170606.utils;  
  2.   
  3. import java.util.List;  
  4.   
  5.   
  6. /** 
  7.  * 分页的一些参数 
  8.  * @author  
  9.  * 
  10.  * 编写时间:2017-4-19 下午03:45:42 
  11.  */  
  12. public class PagingEntity {  
  13.     /** 
  14.      * 当前页数 
  15.      */  
  16.     private int current;  
  17.     /** 
  18.      * 一页显示的条数 
  19.      */  
  20.     private int quantity;  
  21.     /** 
  22.      * 数据库的总条数 
  23.      */  
  24.     private int sum;  
  25.     /** 
  26.      * 首页 
  27.      */  
  28.     private int first=1;  
  29.     /** 
  30.      * 尾页 
  31.      */  
  32.     private int trail;  
  33.     /** 
  34.      * 上一页 
  35.      */  
  36.     private int last;  
  37.     /** 
  38.      * 下一页 
  39.      */  
  40.     private int next;  
  41.     /** 
  42.      * 开始的位置 
  43.      */  
  44.     private int start;  
  45.     /** 
  46.      * 结束的位置 
  47.      */  
  48.     private int end;  
  49.     private List list;  
  50.     public int getCurrent() {  
  51.         return current;  
  52.     }  
  53.     public void setCurrent(int current) {  
  54.         this.current = current;  
  55.     }  
  56.     public int getQuantity() {  
  57.         return quantity;  
  58.     }  
  59.     public void setQuantity(int quantity) {  
  60.         this.quantity = quantity;  
  61.     }  
  62.     public int getSum() {  
  63.         return sum;  
  64.     }  
  65.     public void setSum(int sum) {  
  66.         this.sum = sum;  
  67.     }  
  68.     public int getLast() {  
  69.         return last;  
  70.     }  
  71.     public void setLast(int last) {  
  72.         this.last = last;  
  73.     }  
  74.     public int getNext() {  
  75.         return next;  
  76.     }  
  77.     public void setNext(int next) {  
  78.         this.next = next;  
  79.     }  
  80.     public int getStart() {  
  81.         return start;  
  82.     }  
  83.     public void setStart(int start) {  
  84.         this.start = start;  
  85.     }  
  86.     public int getEnd() {  
  87.         return end;  
  88.     }  
  89.     public void setEnd(int end) {  
  90.         this.end = end;  
  91.     }  
  92.       
  93.     public int getFirst() {  
  94.         return first;  
  95.     }  
  96.     public void setFirst(int first) {  
  97.         this.first = first;  
  98.     }  
  99.     public int getTrail() {  
  100.         return trail;  
  101.     }  
  102.     public void setTrail(int trail) {  
  103.         this.trail = trail;  
  104.     }  
  105.     public List getList() {  
  106.         return list;  
  107.     }  
  108.     public void setList(List list) {  
  109.         this.list = list;  
  110.     }  
  111.       
  112. }  

给分页bean赋值

[java]  view plain  copy
  1. package cn.et.day20170606.utils;  
  2. /** 
  3.  * 用来计算分页的参数 
  4.  * @author 周芳园 
  5.  * 
  6.  * 编写时间:2017-4-19 下午04:01:33 
  7.  */  
  8. public class Calculate {  
  9.     /** 
  10.      * 设置他的参数 
  11.      * @param current 
  12.      * @param quantity 
  13.      * @param sum 
  14.      * @return 
  15.      */  
  16.     public static PagingEntity calculate(int current,int quantity,int sum){  
  17.         PagingEntity pa=new PagingEntity();  
  18.         pa.setCurrent(current);  
  19.         pa.setQuantity(quantity);  
  20.         pa.setSum(sum);  
  21.         int last=(current==1?1:current-1);  
  22.         int start=(current-1)*quantity+1;  
  23.         int end=current*quantity;  
  24.         int trail=(sum%quantity==0?sum/quantity:sum/quantity+1);  
  25.         int next=(current==trail?trail:current+1);  
  26.         pa.setLast(last);  
  27.         pa.setNext(next);  
  28.         pa.setStart(start);  
  29.         pa.setEnd(end);  
  30.         pa.setTrail(trail);  
  31.         return pa;  
  32.     }  
  33.     /** 
  34.      * 测试逻辑对不对 
  35.      */  
  36.     public static void main(String[] args) {  
  37.         Calculate ca=new Calculate();  
  38.         PagingEntity pa=ca.calculate(2516);  
  39.         System.out.print("当前页"+pa.getCurrent());  
  40.         System.out.print("总页"+pa.getTrail());  
  41.         System.out.println("上一页"+pa.getLast());  
  42.         System.out.println("开始位置"+pa.getStart());  
  43.         System.out.println("结束位置"+pa.getEnd());  
  44.     }  
  45. }  



jsp

[html]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  5.     <script type="text/javascript">  
  6.             var path="${pageContext.request.contextPath}/day0609";  
  7.             //根据id获取对象  
  8.             function $(id){  
  9.                 return document.getElementById(id);  
  10.             }  
  11.             //和div赋值  
  12.             function toUpdate(empno,ename,job,mgr,hiredate,sal,comm,deptno){  
  13.                 $('updateDiv').style.display='block';  
  14.                 $('empNoId').value=empno;  
  15.                 $('updateEname').value=(ename=='null'?'':ename);  
  16.                 $('updateJob').value=(job=='null'?'':job);  
  17.                 $('updateMgr').value=mgr;  
  18.                 $('updateHiredate').value=hiredate;  
  19.                 $('updateSal').value=sal;  
  20.                 $('updateComm').value=comm;  
  21.                 $('updateDeptno').value=deptno;  
  22.                   
  23.             }  
  24.             /**  
  25.                     封装ajax  
  26.              **/  
  27.              function sendAjax(method,url,callback,param){  
  28.                 var xmlHttp=new XMLHttpRequest();  
  29.                 //向服务器发出请求  
  30.                 //规定请求的类型、URL 以及是否异步处理请求。  
  31.                 //method:请求的类型;GET 或 POST  
  32.                 //url:文件在服务器上的位置  
  33.                 //async:true(异步)或 false(同步)  
  34.                 xmlHttp.open(method,url,true);  
  35.                 //设置响应的回调 当后台的json返回后 自动调用xhr.onreadystatechange指定的函数  
  36.                 xmlHttp.onreadystatechange=function(){   
  37.                    if(xmlHttp.readyState==4 && xmlHttp.status==200){  
  38.                         //成功后调用第三个函数  
  39.                      callback(xmlHttp.responseText);  
  40.                    }  
  41.                  }  
  42.                  //post 在send里面带参数 get直接带 post一定要设置setRequestHeader  
  43.                  if(method=="POST"){  
  44.                     xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
  45.                     xmlHttp.send(param);  
  46.                  }else{  
  47.                     xmlHttp.send();  
  48.                  }  
  49.                   
  50.              }  
  51.             //和action交互的方法 用于更新  
  52.             function toUpdate1(){  
  53.                 document.getElementById('updateDiv').style.display='none'  
  54.                   
  55.                   
  56.                 var empno=$('empNoId').value;  
  57.                 var ename=$('updateEname').value;  
  58.                 var job=$('updateJob').value;  
  59.                 var mgr=$('updateMgr').value;  
  60.                 var hiredate=$('updateHiredate').value;  
  61.                 var sal=$('updateSal').value;  
  62.                 var comm=$('updateComm').value;  
  63.                 var deptno=$('updateDeptno').value;  
  64.                 //参数  
  65.                 var param="ename="+ename+"&job="+job+"&mgr="+mgr+"&hiredate="+hiredate+"&sal="+sal+"&comm="+comm+"&deptno="+deptno+"&empno="+empno  
  66.                 //调用ajax好action交互  
  67.                 sendAjax("POST",path+"/updateEmp",function(message){  
  68.                     if(message==1){  
  69.                             alert("操作成功");  
  70.                             toQuery(current);  
  71.                     }else{  
  72.                         alert("操作失败");  
  73.                     }  
  74.                 },param)  
  75.             }  
  76.             //和action交互的方法 用于新增  
  77.             function toAdd(){  
  78.                 document.getElementById('addDiv').style.display='none'  
  79.                 var xmlHttp=new XMLHttpRequest();  
  80.                 var ename=$('a1').value;  
  81.                 var job=$('a2').value;  
  82.                 var mgr=$('a3').value;  
  83.                 var hiredate=$('a4').value;  
  84.                 var sal=$('a5').value;  
  85.                 var comm=$('a6').value;  
  86.                 var deptno=$('a7').value;  
  87.                 var param="ename="+ename+"&job="+job+"&mgr="+mgr+"&hiredate="+hiredate+"&sal="+sal+"&comm="+comm+"&deptno="+deptno;  
  88.                 sendAjax("POST",path+"/insertEmp",function(message){  
  89.                     if(message==1){  
  90.                             alert("操作成功");  
  91.                             toQuery(current);  
  92.                     }else{  
  93.                         alert("操作失败");  
  94.                     }  
  95.                 },param)              
  96.             }  
  97.             //和action交互的方法 用于删除  
  98.             function toDelete(empno){  
  99.                 var param="empno="+empno;  
  100.                 sendAjax("POST",path+"/deleteEmp",function(message){  
  101.                     if(message==1){  
  102.                             alert("操作成功");  
  103.                             toQuery(current);  
  104.                     }else{  
  105.                         alert("操作失败");  
  106.                     }  
  107.                 },param)      
  108.             }  
  109.             //分页的一些参数  
  110.             var current=1;  
  111.             var sum=0;  
  112.             var trail=0;  
  113.             var last=0;  
  114.             var next=0;  
  115.             和action交互的方法 用于查询  
  116.             function toQuery(pagin){  
  117.                 var xmlHttp=new XMLHttpRequest();  
  118.                 var tb=$("tb");  
  119.                 var td=$("td");  
  120.                 var ename=$("ename").value;  
  121.                 xmlHttp.open("GET",path+"/queryPaginEmp?ename="+ename+"&pagin="+pagin,true);  
  122.                 xmlHttp.onreadystatechange=function(){  
  123.                     if(xmlHttp.readyState==4&&xmlHttp.status==200){  
  124.                         //获取action响应的内容  
  125.                         var json=xmlHttp.responseText;  
  126.                         //把它转成json对象  
  127.                         var jsonall=JSON.parse(json);  
  128.                         //给分页的一些参数赋值  
  129.                         current=jsonall.current;  
  130.                         sum=jsonall.sum;  
  131.                         trail=jsonall.trail;  
  132.                         last=jsonall.last;  
  133.                         next=jsonall.next;  
  134.                         $("p1").innerHTML=current;  
  135.                         $("p2").innerHTML=trail;  
  136.                         $("p3").innerHTML=sum;  
  137.                         var jsonObj=jsonall.list;  
  138.                         //无刷新在此查询的时候把整个tbody删除  
  139.                         tb.removeChild(td);  
  140.                         var tdRow=document.createElement("tbody");  
  141.                         tdRow.setAttribute("id","td");  
  142.                         //把tbody加到table里面去  
  143.                         tb.appendChild(tdRow);  
  144.                         for ( var i = 0; i < jsonObj.length; i++) {  
  145.                             var el = jsonObj[i];  
  146.                             //创建节点  
  147.                             var trRow=document.createElement("tr");  
  148.                             var tdRow1=document.createElement("td");  
  149.                             var tdRow2=document.createElement("td");  
  150.                             var tdRow3=document.createElement("td");  
  151.                             var tdRow4=document.createElement("td");  
  152.                             var tdRow5=document.createElement("td");  
  153.                             var tdRow6=document.createElement("td");  
  154.                             var tdRow7=document.createElement("td");  
  155.                             var tdRow8=document.createElement("td");  
  156.                             var tdRow9=document.createElement("td");  
  157.                             tdRow1.innerHTML=el.EMPNO;  
  158.                             tdRow2.innerHTML=el.ENAME;  
  159.                             tdRow3.innerText=el.JOB;  
  160.                             tdRow4.innerText=el.MGR;  
  161.                             tdRow5.innerHTML=el.HIREDATE;  
  162.                             tdRow6.innerHTML=el.SAL;  
  163.                             tdRow7.innerHTML=el.COMM;  
  164.                             tdRow8.innerHTML=el.DEPTNO;  
  165.                             tdRow9.innerHTML="<button οnclick='toDelete("+el.EMPNO+")'>删除</button><button onclick=toUpdate("+el.EMPNO+",'"+el.ENAME+"','"+el.JOB+"',"+  
  166.                             el.MGR+",'"+el.HIREDATE+"',"+el.SAL+","+el.COMM+","+el.DEPTNO+")>更新</button>";  
  167.                             //把节点tdRow1加到trRow  
  168.                             trRow.appendChild(tdRow1);  
  169.                             trRow.appendChild(tdRow2);  
  170.                             trRow.appendChild(tdRow3);  
  171.                             trRow.appendChild(tdRow4);  
  172.                             trRow.appendChild(tdRow5);  
  173.                             trRow.appendChild(tdRow6);  
  174.                             trRow.appendChild(tdRow7);  
  175.                             trRow.appendChild(tdRow8);  
  176.                             trRow.appendChild(tdRow9);  
  177.                             tdRow.appendChild(trRow);  
  178.                         }  
  179.                     }  
  180.                 }  
  181.                 xmlHttp.send();  
  182.             }  
  183.         </script>  
  184.     </head>  
  185. <body onload="toQuery(1)">  
  186.     <!-- http://localhost:8080/simb/day20170609/emp.jsp -->  
  187.         ename<input type="text" name="ename" id="ename"/>  
  188.         <input type="button" value="查询" onclick="toQuery(current)"/>  
  189.         <input type="button" value="新增" onclick="document.getElementById('addDiv').style.display='block'"/><br/>  
  190.           
  191.         <table id="tb">  
  192.             <thead>  
  193.                 <tr>  
  194.                     <td>empno</td>  
  195.                     <td>ename</td>  
  196.                     <td>job</td>  
  197.                     <td>mgr</td>  
  198.                     <td>hiredate</td>  
  199.                     <td>sal</td>  
  200.                     <td>comm</td>  
  201.                     <td>deptno</td>  
  202.                      <td>操作</td>  
  203.                 </tr>  
  204.             </thead >  
  205.             <tbody id="td">  
  206.                   
  207.             </tbody>  
  208.         </table>  
  209.             <input type="image" src="${pageContext.request.contextPath}/day20170609/image/18.gif" onclick="toQuery(1)"/>  
  210.             <input type="image" src="${pageContext.request.contextPath}/day20170609/image/20.gif" onclick="toQuery(last)"/>  
  211.               当前<span id="p1"></span>页  总<span id="p2"></span>页  总:<span id="p3"></span>  
  212.             <input type="image" src="${pageContext.request.contextPath}/day20170609/image/16.gif" onclick="toQuery(next)"/>  
  213.             <input type="image" src="${pageContext.request.contextPath}/day20170609/image/14.gif" onclick="toQuery(trail)"/>  
  214.         <!-- 新增的div-->  
  215.         <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;">  
  216.                 ENAME:<input type='text' name='ename' id='a1'>  
  217.                 <br/>  
  218.                 JOB:<input type='text' name='job' id='a2'>  
  219.                 <br/>  
  220.                 MGR:<input type='text' name='mgr' id='a3'>  
  221.                 <br/>  
  222.                 HIREDATE:<input type='text' name='hiredate' id='a4'>  
  223.                 <br/>  
  224.                 SAL:<input type='text' name='sal' id='a5'>  
  225.                 <br/>  
  226.                 COMM:<input type='text' name='comm' id='a6'>  
  227.                 <br/>  
  228.                 DEPTNO:<input type='text' name='deptno' id='a7'>  
  229.                 <br/>  
  230.                 <input type='button' value="新增"  onclick="toAdd()">  
  231.                 <input type='button' value="关闭" onclick="document.getElementById('addDiv').style.display='none'">  
  232.         </div>  
  233.           
  234.         <!-- 修改的div-->  
  235.         <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;">  
  236.                 <input type='hidden' name='empno' id='empNoId'>  
  237.                 ENAME: <input type='text' id="updateEname"  name='ename'>  
  238.                 <br/>  
  239.                 JOB: <input type='text' id="updateJob"  name='job'>  
  240.                 <br/>  
  241.                 MGR: <input type='text' id="updateMgr"  name='mgr'>  
  242.                 <br/>  
  243.                 HIREDATE: <input type='text' id="updateHiredate"  name='hiredate'>  
  244.                 <br/>  
  245.                 SAL: <input type='text' id="updateSal"  name='sal'>  
  246.                 <br/>  
  247.                 COMM: <input type='text' id="updateComm"  name='comm'>  
  248.                 <br/>  
  249.                 DEPTNO: <input type='text' id="updateDeptno"  name='deptno'>  
  250.                 <br/>  
  251.                 <input type='button' value='修改' onclick="toUpdate1()">  
  252.                 <input type='button' value="关闭" onclick="document.getElementById('updateDiv').style.display='none'">  
  253.         </div>  
  254. </body>  
  255. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值