SpringMVC+MyBatis整合(注解方式)

1.新建一个web项目其中src/main/java用于存放java代码,src/main/resource用于存放配置文件。

2.导入工程所需jar包,如图

3.新建如图所示包结构及文件(可根据自己项目,自行创建,本文只是一个例子)

            

4.init.properties中内容为:

datasource.type=mysql
datasource.driverClassName=com.mysql.jdbc.Driver

datasource.url=jdbc\:mysql\://127.0.0.1\:3306/twitter?useUnicode\=true&characterEncoding\=UTF-8
datasource.username=root
datasource.password=root

datasource.maxActive=10
datasource.maxIdle=2
datasource.maxWait=120
datasource.whenExhaustedAction=1
datasource.validationQuery=select 1 from dual
datasource.testOnBorrow=true
datasource.testOnReturn=false

c3p0.acquireIncrement=3
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=900
c3p0.minPoolSize=2
c3p0.maxPoolSize=50
c3p0.maxStatements=100
c3p0.numHelperThreads=10
c3p0.maxIdleTime=600
 log4j.properties中内容为:

log4j.rootLogger=INFO, stdout  

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 
log4j.logger.java.sql.ResultSet = INFO  
  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
5.配置数据库连接及事务管理器(dbconfig.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- 引入init.properties中属性 -->
	<bean id="placeholderConfig"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:init.properties</value>
		</property>
	</bean>
	<!-- 配置数据源,连接池使用c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close" >
		<property name="driverClass">
			<value>${datasource.driverClassName}</value>
		</property>
		<property name="jdbcUrl">
			<value>${datasource.url}</value>
		</property>
		<property name="user">
			<value>${datasource.username}</value>
		</property>
		<property name="password">
			<value>${datasource.password}</value>
		</property>
		<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
		<property name="acquireIncrement">
			<value>${c3p0.acquireIncrement}</value>
		</property>
		<!-- 初始化时获取连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
		<property name="initialPoolSize">
			<value>${c3p0.initialPoolSize}</value>
		</property>
		<!-- 连接池中保留的最小连接数 -->
		<property name="minPoolSize">
			<value>${c3p0.minPoolSize}</value>
		</property>
		<!-- -连接池中保留的最大连接数。Default: 15 -->
		<property name="maxPoolSize">
			<value>${c3p0.maxPoolSize}</value>
		</property>
		<!-- 连接最大空闲时间,单位为秒。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime">
			<value>${c3p0.maxIdleTime}</value>
		</property>
		<!-- 检查所有连接池中的空闲连接的时间间隔,单位是秒。Default: 0 -->
		<property name="idleConnectionTestPeriod">
			<value>${c3p0.idleConnectionTestPeriod}</value>
		</property>
		<!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。 -->
		<property name="maxStatements">
			<value>${c3p0.maxStatements}</value>
		</property>
		<!-- -c3p0支持的线程数,c3p0是异步操作的,通过多线程实现多个操作同时被执行。Default: 3- -->
		<property name="numHelperThreads">
			<value>${c3p0.numHelperThreads}</value>
		</property>
	</bean>
	
	<!-- 配置mybatis固定的写法 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"/>  
        <property name="configLocation">
        	<value>classpath:config/mybatis-sqlmap.xml</value>
        </property>
    </bean>  
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>  
    </bean>  
    

	<!-- 配置事务管理器bean -->
	<!-- TransactionManager -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean>
	
	<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
	</bean>
		
	<!-- 事务控制代理抽象定义 -->
	<bean id="transactionProxy"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
		abstract="true">
		<!-- 为事务代理bean注入一个事物管理器 -->
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<!-- 定义事务传播属性 -->
		<property name="transactionAttributes">
			<props>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="release*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="find*">PROPAGATION_REQUIRED</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>

</beans>
6.springmvc核心配置,在WEB-INF目录下建立如图所示结构:

  

其中twitter-servlet.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:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
	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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
	default-autowire="byName" default-lazy-init="false">

	<!-- 默认注解映射的支持 -->
	<mvc:annotation-driven/>
	
	<!-- 自动扫描的包 -->
	<context:component-scan base-package="com.lee.twitter.*"></context:component-scan>
	
	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"/>
		<property name="suffix" value=".jsp"/>
		<property name="order" value="0" ></property>
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	</bean>
	
	<!-- 全局异常处理配置 -->
	<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">       
         <property name="exceptionMappings">       
             <props>       
                 <prop key="java.lang.Exception">errors/error</prop>       
                 <prop key="java.lang.Throwable">errors/err</prop>       
             </props>       
         </property>       
         <property name="statusCodes">       
             <props>       
                 <prop key="errors/error">500</prop>       
                 <prop key="errors/404">404</prop>       
             </props>       
         </property>       
         <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->       
         <property name="warnLogCategory" value="INFO"></property>       
         <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->       
         <property name="defaultErrorView" value="errors/error"></property>       
         <!-- 默认HTTP状态码 -->       
         <property name="defaultStatusCode" value="500"></property>       
     </bean>       
     <!-- 全局异常配置 end -->  
</beans>
web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	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">
	
	<!-- 加载配置文件 -->
	<context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>classpath*:config/*.xml</param-value>
	</context-param>
	
	<!-- 加载日志配置文件 -->
	<context-param>  
        <param-name>log4jConfigLocation</param-name>  
       <param-value>classpath*:log4j.properties</param-value>  
	</context-param>
  
    <!-- 启动监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理 ,必须写在DispatcherServlet前面,否则会被spring拦截 -->
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>*.css</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>*.gif</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>*.jpg</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>*.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
	    <servlet-name>default</servlet-name>
	    <url-pattern>*.png</url-pattern>
	</servlet-mapping>
	
	<!-- 配置Spring核心控制器 -->
	<servlet>
		<servlet-name>twitter</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/mvcxml/twitter-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>twitter</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- 统一工程编码过滤器 -->
	<filter>
    	<filter-name>encodingFilter</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>encodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
7.sqlmap的配置,如图

 

User.java代码如下:

package com.lee.twitter.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{

	private static final long serialVersionUID = 8128692597339854520L;

	private Integer userId;
	private String userName;
	private String password;
	private String phone;
	private String email;
	private byte gender;
	private Date registerDate;
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public byte getGender() {
		return gender;
	}
	public void setGender(byte gender) {
		this.gender = gender;
	}
	public Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date registerDate) {
		this.registerDate = registerDate;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName
				+ ", password=" + password + ", phone=" + phone + ", email="
				+ email + ", gender=" + gender + ", registerDate="
				+ registerDate + "]";
	}
	
}
User.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="User">
    <resultMap type="com.lee.twitter.domain.User" id="userResultMap">
    	<result property="userId" column="userId"/>
    	<result property="userName" column="userName"/>
    	<result property="password" column="password"/>
    	<result property="phone" column="phone"/>
    	<result property="email" column="email"/>
    	<result property="gender" column="gender"/>
    	<result property="registerDate" column="registerDate"/>
    </resultMap>
    
	<insert id="addUser" parameterType="com.lee.twitter.domain.User">
		INSERT INTO tb_user(`userName`,`password`,`phone`,`email`,`gender`,`registerDate`) 
		VALUES(#{userName},#{password},#{phone},#{email},#{gender},#{registerDate})
	</insert>
	
	<select id="findUserById" resultMap="userResultMap" parameterType="java.lang.Integer">
		SELECT userId,userName,PASSWORD,phone,email,gender,registerDate
		FROM tb_user WHERE userId = #{userId}
	</select>

</mapper>
mybatis-sqlmap.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>
	<mappers>
		<mapper resource="com/lee/twitter/domain/sqlmap/User.xml"/>
	</mappers>
</configuration>
8.其他各层代码如下:


 (1)dao层代码:

         UserDao.java:

package com.lee.twitter.dao;

import com.lee.twitter.domain.User;

public interface UserDao {

	public int addUser(User user);
	
	public User findUserById(Integer userId);
}
       UserDaoImpl.java:

package com.lee.twitter.dao.impl;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.lee.twitter.dao.UserDao;
import com.lee.twitter.domain.User;

@Repository
public class UserDaoImpl implements UserDao{

	@Autowired
	private SqlSessionTemplate sqlSession;
	
	public int addUser(User user) {
		return sqlSession.insert("User.addUser", user);
	}

	public User findUserById(Integer userId) {
		return (User)sqlSession.selectOne("User.findUserById", userId);
	}

}
(2)service层代码:
       UserService.java:
package com.lee.twitter.service;

import com.lee.twitter.domain.User;

public interface UserService {
	
	public int addUser(User user);
	
	public User findUserById(Integer userId);
}
      UserServiceImpl.java:
package com.lee.twitter.service.impl;

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

import com.lee.twitter.dao.UserDao;
import com.lee.twitter.domain.User;
import com.lee.twitter.service.UserService;

@Service
public class UserServiceImpl implements UserService{
	
	@Autowired
	private UserDao userDao;

	public int addUser(User user) {
		return userDao.addUser(user);
	}

	public User findUserById(Integer userId) {
		return userDao.findUserById(userId);
	}

}
(3)web层代码:
       UserController.java:

package com.lee.twitter.web.user;

import java.util.Date;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.lee.twitter.domain.User;
import com.lee.twitter.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
	
	private final Log logger = LogFactory.getLog(UserController.class);

	@Autowired
	private UserService userService;
	
	@RequestMapping("/index")
	public String index(){
		
		return "user/index";
	}
	
	@RequestMapping("/getUserInfo")
	public String getUserInfo(Integer userId,Map<String,Object> map){
		
		logger.info("获取用户信息请求参数userId="+userId);
		User user = userService.findUserById(userId);
		map.put("userInfo", user);
		return "user/show";
	}
	
	@RequestMapping("/addInfo")
	public String addInfo(User user,Map<String,Object> map){
		user.setRegisterDate(new Date());
		logger.info("添加用户信息请求参数:"+user);
		int result = userService.addUser(user);
		map.put("addRes", result);
		return "user/index";
	}
}
(3)展示层代码:
     

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
  	${addRes }
    <a href="${pageContext.request.contextPath }/user/getUserInfo?userId=1">获取用户信息</a>
  </body>
</html>

show.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'show.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    

  </head>
  
  <body>
   	 用户名:${userInfo.userName }
   	 <form action="${pageContext.request.contextPath }/user/addInfo" method="POST">
   	 	用户名:<input type="text" name="userName"/><br/>
   	 	密码:<input type="text" name="password"/><br/>
   	 	电话:<input type="text" name="phone"/><br/>
   	 	email:<input type="text" name="email"/><br/>
   	 	<input type="submit" value="提交"/>    
   	 	<input type="reset" value="重置">
   	 </form>
  </body>
</html>
9.数据库设计如下(mysql):

/*
SQLyog Ultimate v9.63 
MySQL - 5.0.22-community-nt : Database - twitter
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`twitter` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `twitter`;

/*Table structure for table `tb_user` */

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (
  `userId` bigint(32) NOT NULL auto_increment,
  `userName` varchar(16) collate utf8_bin default NULL,
  `password` varchar(64) collate utf8_bin default NULL,
  `phone` bigint(11) default NULL,
  `email` varchar(32) collate utf8_bin default NULL,
  `gender` smallint(6) default NULL,
  `registerDate` datetime default NULL,
  PRIMARY KEY  (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `tb_user` */

insert  into `tb_user`(`userId`,`userName`,`password`,`phone`,`email`,`gender`,`registerDate`) values (1,'admin','admin',15230633320,'zee@gamil.com',1,'2014-04-30 14:50:47'),(2,'张三','123456',15233225566,'hello@sina.ok',0,'2014-04-30 16:26:06'),(3,'网球啊','aaaaaa',18611227788,'wangqiu@qq.com',0,'2014-04-30 16:30:43');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
10 .项目部署在tomcat下,访问路径为 http://127.0.0.1:8080/Twitter/user/index

点击后会看到如下页面:


点击 获取用户信息,结果如下:



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值