第一步:pom中引入需要的jar包依赖
<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>com.xiaohui</groupId>
<artifactId>HelloWord</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>HelloWord Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- spring版本号 -->
<spring.version>3.2.4.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.4</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.9</log4j.version>
</properties>
<dependencies>
<!-- spring核心包 -->
<!-- springframe start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- springframe end -->
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 阿里巴巴数据源包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.2</version>
</dependency>
<!-- json数据 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.1</version>
</dependency>
</dependencies>
<build>
<finalName>HelloWord</finalName>
</build>
</project>
第二步:创建各层packge以及项目结构
第三步:相关配置文件:
web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring.xml;
classpath:conf/spring-mybatis.xml
</param-value>
</context-param>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>HelloWord.root</param-value>
</context-param>
<!-- ================spring mvc 适配器================ -->
<!-- 加载父容器 spring 容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载子容器 springmvc 容器 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- ================================================== -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
jdbc.properties:
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/tesddb?useUnicode=true&characterEncoding=utf-8
jdbc_username=root
jdbc_password=password
log4j.properties:
log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.Java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd">
<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- 扫描文件(自动将servicec层注入) -->
<context:component-scan base-package="com.xiaohui.service"/>
</beans>
spring-mvc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 通过注解方式装配需添加如下标签 -->
<context:annotation-config/>
<!-- 使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,
可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<!--json视图拦截器,读取到@ResponseBody的时候去配置它-->
<ref bean="mappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<!--json转化器,它可以将结果转化-->
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 扫描controller(controller层注入) 省略了Controller的bean逐个配置 -->
<context:component-scan base-package="com.xiaohui.controller"/>
<!-- 对模型视图添加前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- /**表示所有url包含子url -->
<mvc:mapping path="/**"/>
<bean class="com.xiaohui.intercepter.LoginIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 对静态资源文件的访问-->
<mvc:resources mapping="/common/**" location="/WEB-INF/common/" cache-period="31556926"/>
<mvc:resources mapping="/images/**" location="/WEB-INF/images/" cache-period="31556926"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" cache-period="31556926"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" cache-period="31556926"/>
</beans>
spring-mybatis.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close" >
<property name="driverClassName">
<value>${jdbc_driverClassName}</value>
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
<property name="username">
<value>${jdbc_username}</value>
</property>
<property name="password">
<value>${jdbc_password}</value>
</property>
<!-- 连接池最大使用连接数 -->
<property name="maxActive">
<value>20</value>
</property>
<!-- 初始化连接大小 -->
<property name="initialSize">
<value>1</value>
</property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait">
<value>60000</value>
</property>
<!-- 连接池最大空闲 -->
<property name="maxIdle">
<value>20</value>
</property>
<!-- 连接池最小空闲 -->
<property name="minIdle">
<value>3</value>
</property>
<!-- 自动清除无用连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout">
<value>180</value>
</property>
<!-- 连接属性 -->
<property name="connectionProperties">
<value>clientEncoding=UTF-8</value>
</property>
</bean>
<!-- mybatis文件配置,扫描所有mapper文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:conf/mybatis-config.xml"
p:mapperLocations="classpath:mapper/*.xml"/>
<!-- configLocation为mybatis属性 mapperLocations为所有mapper-->
<!-- spring与mybatis整合配置,扫描所有dao -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.xiaohui.dao"
p:sqlSessionFactoryBeanName="sqlSessionFactory"/>
<!-- 对数据源进行事务管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
</beans>
mybatis-config.xml:
<?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>
<settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- 命名空间 -->
<typeAliases>
<typeAlias alias="User" type="com.xiaohui.model.User"/>
</typeAliases>
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<!-- <property name="dialect" value="mysql"/>
<property name="offsetAsPageNum" value="false"/>
<property name="rowBoundsWithCount" value="false"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="supportMethodsArguments" value="false"/>
<property name="returnPageInfo" value="none"/> -->
</plugin>
</plugins>
<!-- 映射map -->
<mappers>
</mappers>
</configuration>
UserMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaohui.dao.UserDao">
<sql id="common_where_if">
<if test="id != '' and id != null">
id = #{id}
</if>
<if test="state != '' and state != null">
and state = #{state}
</if>
<if test="nickname != '' and nickname!=null " >
and nickname = #{nickname}
</if>
</sql>
<resultMap id="baseUserMap" type="User">
<id column="id" property="id" />
<result column="state" property="state" />
<result column="nickname" property="nickname" />
</resultMap>
<!-- 新增 -->
<insert id="insertUser" parameterType="User" keyProperty="id">
insert into user(id,state,nickname) values(#{id},#{state},#{nickname})
</insert>
<!-- 删除 -->
<delete id="deleteUser" parameterType="string">
delete from user where id = #{id}
</delete>
<!-- 查询 -->
<select id="selectById" parameterType="string" resultType="User">
select * from user where id = #{id}
</select>
<!-- 修改 -->
<update id="updateUser" parameterType="User" >
update User
<set>
<if test="nickname != null and nickname!='' ">nickname = #{nickname},</if>
<if test="state != null and state!='' ">state = #{state},</if>
</set>
where id = #{id}
</update>
<!-- 列表查询 -->
<select id="selectList" resultMap="baseUserMap">
select * from user
<where>
<include refid="common_where_if" />
</where>
</select>
<select id="selectCount" resultType="int">
select count(*) from user
<where>
<include refid="common_where_if" />
</where>
</select>
</mapper>
UserController.java
package com.xiaohui.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.xiaohui.model.User;
import com.xiaohui.service.UserService;
import com.xiaohui.utils.DataUtil;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
public UserService userService;
/**
* 新增
* @param user
* @return
* @throws Exception
*/
@RequestMapping(value="/save",method={RequestMethod.POST})
@ResponseBody
public JSONObject save(User user) throws Exception{
JSONObject resultJson = new JSONObject();
user.setId(System.currentTimeMillis()+"");
int result = userService.insertUser(user);
if(result>0){
resultJson = DataUtil.getSuccessResult();
resultJson.put("result", result);
}else {
resultJson = DataUtil.getErrorResult();
}
return resultJson;
}
/**
* 删除
* @param id
* @return
*/
@RequestMapping(value="/delete",method={RequestMethod.POST})
@ResponseBody
public JSONObject delete(String id){
JSONObject resultJson = new JSONObject();
int result = userService.deleteUser(id);
if(result>0){
resultJson = DataUtil.getSuccessResult();
}else {
resultJson = DataUtil.getErrorResult();
}
return resultJson;
}
/**
* 查询详情
* @param id
* @return
*/
@RequestMapping(value="/selectById/{id}",method={RequestMethod.GET})
@ResponseBody
public JSONObject selectById(@PathVariable("id") String id){
JSONObject resultJson = new JSONObject();
User user = userService.selectById(id);
if(user != null){
resultJson = DataUtil.getSuccessResult();
resultJson.put("result", user);
}else {
resultJson = DataUtil.getErrorResult();
}
return resultJson;
}
/**
* 修改
* @param user
* @return
* @throws Exception
*/
@RequestMapping(value="/update",method={RequestMethod.POST})
@ResponseBody
public JSONObject update(User user) throws Exception{
JSONObject resultJson = new JSONObject();
int result = userService.updateUser(user);
if(result>0){
resultJson = DataUtil.getSuccessResult();
resultJson.put("result", result);
}else {
resultJson = DataUtil.getErrorResult();
}
return resultJson;
}
/**
* 修改
* @param user
* @return
* @throws Exception
*/
@RequestMapping(value="/selectList",method={RequestMethod.POST})
@ResponseBody
public JSONObject getList(User user,int page,int rows) throws Exception{
JSONObject resultJson = new JSONObject();
JSONObject list = userService.selectList(user,page,rows);
resultJson = DataUtil.getSuccessResult();
resultJson.put("result", list);
return list;
}
}
com.xiaohui.dao.UserDao;
package com.xiaohui.dao;
import java.util.List;
import com.xiaohui.model.User;
public interface UserDao {
/**
* 新增
* @param user
* @return
*/
public int insertUser(User user);
/**
* 删除
* @param user
* @return
*/
public int deleteUser(String id);
/**
* 根据主键查询详情
* @param id
* @return
*/
public User selectById(String id);
/**
* 修改
* @param user
* @return
*/
public int updateUser(User user);
/**
* 查询列表
* @param user
* @return
*/
public List<User> selectList(User user);
/**
* 查询总数
* @param user
* @return
*/
public int selectCount(User user);
}
前台页面js参考(使用的JqEasyUI):
$('#tblist').datagrid({
url:'/HelloWord/user/selectList',
method: 'POST',
queryParams: { 'state': 3 },
pagination: true,
pageSize: 10,
pageList: [10, 20, 50, 100],
showFooter: true,
fitColumns:true,//宽度自适应
singleSelect:'true',
fit: true,
striped:true,
idField:'id',
columns:[[
{field:'ck',title:'ck',checkbox:true},
{field:'id',title:'编号',width:'20%'},
{field:'nickname',title:'昵称',width:'56%',collapsible:true},
{field:'state',title:'状态',width:'20%',align:'right'}
]],
onBeforeLoad: function (param) {
console.log(param);
},
toolbar: [{
text:'新增',
iconCls: 'icon-add',
handler: function(){
addUser();
}
},'-',{
text:'删除',
iconCls: 'icon-remove',
handler: function(){
var record = $('#tblist').datagrid("getSelected");
if(record == null){
$.messager.alert('结果','请先选择一个用户!','warning');
return;
}
var userId = record.id;
deleteUser(userId)
}
},'-',{
text:'修改',
iconCls: 'icon-save',
handler: function(){
updateUser();
}
}]
});
function addUser(){
$('#addDialog').dialog({
title: '新增用户',
width: 400,
height: 200,
closed: false,
cache: false,
modal: true,
buttons:[{
text:'保存',
handler:function(){
var nickname = $("#nickname").val();
var state = $("#state").val();
save(nickname,state);
}
},{
text:'取消',
handler:function(){
$('#addDialog').dialog("close",true);
}
}]
});
}
function save(nickname,state) {
$.ajax({
url: "/HelloWord/user/save",
type: "POST",
dataType: "json",
data: {"nickname": nickname,"state": state},
async: false,
success: function(data) {
$.messager.alert('结果','操作成功');
$('#addDialog').dialog("close",true);
$('#tblist').datagrid("reload");
},
error: function() {
$.messager.alert('结果','请求失败!','error');
}
});
}
function deleteUser(userId){
$.ajax({
url: "/HelloWord/user/delete",
type: "POST",
dataType: "json",
data: {"id": userId},
async: false,
success: function(data) {
$.messager.alert('结果','操作成功');
$('#tblist').datagrid("reload");
},
error: function() {
$.messager.alert('结果','请求失败!','error');
}
});
}
function update(user) {
$.ajax({
url: "/HelloWord/user/update",
type: "POST",
dataType: "json",
data: user,
async: false,
success: function(data) {
$('#addDialog').dialog("close",true);
$.messager.alert('结果','操作成功');
$('#tblist').datagrid("reload");
},
error: function() {
$.messager.alert('结果','请求失败!','error');
}
});
}
function updateUser(){
var record = $('#tblist').datagrid("getSelected");
if(record == null){
$.messager.alert('结果','请先选择一个用户!','warning');
return;
}
console.log(record);
$('#addDialog').dialog({
title: '用户修改',
width: 400,
height: 200,
closed: false,
cache: false,
modal: true,
onOpen:function(){
$.ajax({
url: "/HelloWord/user/selectById/"+record.id,
type: "GET",
dataType: "json",
async: false,
success: function(data) {
console.log(data);
$('#nickname').textbox('setValue',data.nickname);
$('#state').textbox('setValue',data.state);
},
error: function() {
$.messager.alert('结果','请求失败!','error');
}
});
},
buttons:[{
text:'保存',
handler:function(){
var nickname = $('#nickname').textbox('getValue');
var state = $('#state').textbox('getValue');
var user = {"nickname": nickname,"state": state,id:record.id};
update(user);
}
},{
text:'取消',
handler:function(){
$('#addDialog').dialog("close",true);
}
}]
});
}
$('#search').linkbutton({
iconCls: 'icon-search',
onClick:function(){
var nickname = $('#snickname').textbox('getValue');
var state = $('#sstate').textbox('getValue');
var id = $('#sid').textbox('getValue');
var param = {};
if(nickname!=""){
param.nickname = nickname;
}
if(state!=""){
param.state = state;
}
if(id!=""){
param.id = id;
}
$('#tblist').datagrid("reload",param);
}
});
三、运行效果 页面展示如下: