配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<filter>
<filter-name>utf</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>utf</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 加载spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置这个selevlet来加载sprinmvc的配置文件 -->
<filter>
<filter-name>hidden</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hidden</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过这个参数去找配置文件 不加这个参数默认在 /WEB-INF/找spservlet-name-servlet.xml这个文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/springmvc.xml</param-value>
</init-param>
<!-- 启动tomcat的时候就加载 -->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /拦截所有以.action -->
<url-pattern>*.action</url-pattern>
<!-- /拦截所有servlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
jdbc.properties
url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
driverClassName=oracle.jdbc.OracleDriver
userAccount=scott
password=tiger
log4j.properties
log4j.rootLogger=debug, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=C\://logs/notify-subscription.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%c] %m%n
spring.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: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">
<!-- 这么注入才不会覆盖加载资源文件 -->
<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>
mybatis_config.xml(用map才有这个问题 用entity没有这个问题)
<?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>
springmvc.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: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>
pom.xml
<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>
jsp
<%@ 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 οnclick='toDelete("+el.EMPNO+")'>删除</button><button οnclick=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 οnlοad="toQuery(1)">
<!-- http://localhost:8080/simb/day20170609/emp.jsp -->
ename<input type="text" name="ename" id="ename"/>
<input type="button" value="查询" οnclick="toQuery(current)"/>
<input type="button" value="新增" οnclick="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" οnclick="toQuery(1)"/>
<input type="image" src="${pageContext.request.contextPath}/day20170609/image/20.gif" οnclick="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" οnclick="toQuery(next)"/>
<input type="image" src="${pageContext.request.contextPath}/day20170609/image/14.gif" οnclick="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="新增" οnclick="toAdd()">
<input type='button' value="关闭" οnclick="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='修改' οnclick="toUpdate1()">
<input type='button' value="关闭" οnclick="document.getElementById('updateDiv').style.display='none'">
</div>
</body>
</html>
其他的java代码和前面一样