实现一个spring mvc结合Mybatis的简单示例,前端的界面主要是JSP,包含了少量的js和jQuery等内容,css渲染则使用了bootstrap。当然,整体来说还是很简单的一个demo。
这个项目,主要是实现了对于数据库中User表的增删改查功能,放在界面也就是登录、注册、修改个人信息和删除用户。
关于spring MVC的内容,可以参照我的前几篇博客,主要都是简单的示例。关于mybatis,可以去看http://download.csdn.net/detail/tan1912224958/8535731 这个资料,里面讲解得非常详细,很适合初学者学习。
嗯,下面spring MVC和mybatis整合示例的各个部分。
PS:博主使用的环境为eclipse for Java web developers,创建的是Dynamic Web Project。使用的所有包参照链接:【http://download.csdn.net/detail/qq_28379809/9923026。】
可能少了一个SQL连接的jar包,如果运行失败的话,参照下面的免费下载链接:http://download.csdn.net/detail/orzma/4828533
一、配置文件,一共是四个,两个是spring mvc的,两个是Mybatis的,这里没有关联。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- 解决中文乱码问题 -->
<filter>
<filter-name>CharacterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
springmvc-servlet.xml,这个主要是dispatcher.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
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" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
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-3.0.xsd "
default-autowire="byName">
<mvc:annotation-driven />
<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="net.use" />
<!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 -->
<beans:bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- 这个类用于Spring MVC视图解析 -->
<beans:bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/pages/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
User.xml,这个xml文件其实是关于sql操作的配置文件,里面定义了几个对于数据库操作的方法。
<?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.yihaomen.mybatis.models.UserMapper"> -->
<mapper namespace="net.use.inter.IUserOperation">
<!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致。
以#{name}的形式引用Student参数的name属性,MyBatis将使用反射读取Student参数的此
属性。#{name}中name大小写敏感。引用其他 的gender等属性与此一致。seGeneratedKeys设置 为"true"表明
要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入 到Student的id属性-->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,age,address,pwd) values(#{name},#{age},#{address},#{pwd})
</insert>
<!-- 为了返回list 类型而定义的returnMap -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="address" property="address" />
<result column="pwd" property="pwd" />
</resultMap>
<!-- 多参数传入参照博客:http://www.cnblogs.com/mingyue1818/p/3714162.html -->
<select id="selectUsers" resultMap="resultListUser">
select * from user where name =#{arg0} and pwd =#{arg1}
</select>
<!-- delete user from the database -->
<delete id="deleteUser">
delete from user where name =#{arg0} and pwd =#{arg1}
</delete>
<!-- first find the id of the user,and then change it -->
<update id="updateUser" parameterType="User" >
update user set name=#{name},age=#{age},address=#{address},pwd=#{pwd} where id=#{id}
</update>
<select id="findUserByID" parameterType="int" resultType="User">
select * from `user` where id = #{id}
</select>
</mapper>
Configuration.xml,这个是mybatis的实际配置文件,配置数据库的类型、访问、用户密码,以及mapper等。这里的mapper就是指上面的user.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>
<typeAliases>
<typeAlias alias="User" type="net.use.info.User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root"/>
<property name="password" value="19961006"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="net/use/mapper/User.xml"/>
</mappers>
</configuration>
二、Java部分
UserController.java,spring MVC的控制器,也就是浏览器请求提交后的实际执行者,根据上面的配置文件,所有的浏览器请求都会被提交到这个Controller中,然后根据不同的URL由不同的方法执行。
其中,这些方法主要包含了两大类,一种是跳转界面的,也就是打开某个界面,第二种就是处理请求的,会调用mybatis的mapper里定义的方法来执行SQL操作,从数据库取出或更新某些内容。
package net.use.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import net.use.form.UserForm;
import net.use.info.User;
import net.use.mapper.SessionFactory;
@Controller
public class UserController {
@RequestMapping("")
public String index(Model model) {
return "login";//
}
@RequestMapping("toLogin")
public String toLo(Model model) {
return "login";//
}
@RequestMapping("toRegister")
public String toRe() {
return "register";
}
@RequestMapping("toUpdate")
public String toUp() {
return "update";
}
@RequestMapping("toDelete")
public String toDe() {
return "delete";
}
/*
@RequestMapping(value="/detail")
public String detail(@ModelAttribute("form") UserForm userForm,Model model) {
SessionFactory sessionFactory = new SessionFactory();
User user = sessionFactory.getUser(userForm.getName(),userForm.getPwd());
model.addAttribute("user",user);
return "detail