springmvc spring4.3.7 mybatis3.4.2 集成介绍
1.pom引入依赖
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ccrc</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>4.3.7.RELEASE</spring.version>
<hibernate.version>5.2.5.Final</hibernate.version>
<lang.version>2.6</lang.version>
<guava.version>20.0</guava.version>
<curator.version>2.10.0</curator.version>
<druid.version>1.0.26</druid.version>
<mysql.version>5.1.40</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</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-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.ccrc</groupId>
<artifactId>commons-lang5</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2.引入配置文件 applicationContext.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:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-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/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:annotation-config />
<context:component-scan base-package="com.ccrc">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:property-placeholder location="classpath:dbconfig.properties" />
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${druid.url}" />
<property name="username" value="${druid.username}" />
<property name="password" value="${druid.password}" />
<property name="driverClassName" value="${druid.driverClassName}" />
<property name="filters" value="${druid.filters}" />
<property name="maxActive" value="${druid.maxActive}" />
<property name="initialSize" value="${druid.initialSize}" />
<property name="maxWait" value="${druid.maxWait}" />
<property name="minIdle" value="${druid.minIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
<property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${druid.validationQuery}" />
<property name="testWhileIdle" value="${druid.testWhileIdle}" />
<property name="testOnBorrow" value="${druid.testOnBorrow}" />
<property name="testOnReturn" value="${druid.testOnReturn}" />
<property name="maxOpenPreparedStatements" value="${druid.maxOpenPreparedStatements}" />
<property name="removeAbandoned" value="${druid.removeAbandoned}" />
<property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
<property name="logAbandoned" value="${druid.logAbandoned}" />
</bean >
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/ccrc/dao/*Mapper.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ccrc.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
</beans>
引入数据库配置 dbconfig.properties
druid.url= jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
druid.driverClassName= com.mysql.jdbc.Driver
druid.username= root
druid.password= root
druid.filters= stat,log4j,wall
druid.maxActive= 10
druid.initialSize= 1
druid.maxWait= 60000
druid.minIdle= 10
druid.maxIdle= 15
druid.timeBetweenEvictionRunsMillis= 60000
druid.minEvictableIdleTimeMillis= 300000
druid.validationQuery= SELECT 'x'
druid.testWhileIdle= true
druid.testOnBorrow= false
druid.testOnReturn= false
druid.maxOpenPreparedStatements= 20
druid.removeAbandoned= true
druid.removeAbandonedTimeout= 1800
druid.logAbandoned= true
hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql = true
hibernate.format_sql = false
引入spring mvc配置文件 springmvc-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: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-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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="com.ccrc.controller"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.ccrc.lang.DateConverter" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3.数据库表为
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| userId | bigint(20) | NO | PRI | NULL | auto_increment |
| address | varchar(255) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
| gender | int(11) | YES | | NULL | |
| userName | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4.UserTabController类
package com.ccrc.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ccrc.lang.Data;
import com.ccrc.lang.Pager;
import com.ccrc.model.UserTab;
import com.ccrc.service.IUserTabService;
/**
* 用户管理,用管理用户信息 控制器
* @author Jalen
* @time 2017-03-30 10:39
*
*/
@Controller
@RequestMapping("/userTab")
public class UserTabController extends BaseController {
@Autowired
private IUserTabService userTabService;
@RequestMapping("/list")
public String userTabList(Model model) {
//TODO
return "userTab/userTab_list";
}
@RequestMapping("/ajaxPage")
@ResponseBody
public Pager getPageUserTab(int rows, int page) {
Pager pager = new Pager(rows, page);
userTabService.getPageUserTab(pager);
return pager;
}
@RequestMapping("/ajaxAdd")
@ResponseBody
public Data ajaxAddUserTab(UserTab userTab) {
userTabService.addUserTab(userTab);
return Data.success("添加信息成功!");
}
@RequestMapping("/ajaxModify")
@ResponseBody
public Data ajaxModifyUserTab(UserTab userTab) {
userTabService.modifyUserTab(userTab);
return Data.success("修改信息成功!");
}
@RequestMapping("/ajaxRemove")
@ResponseBody
public Data ajaxRemoveUserTab(Long userId) {
userTabService.removeUserTab(userId);
return Data.success("删除信息成功!");
}
@RequestMapping("/ajaxGet")
@ResponseBody
public Data ajaxGetUserTabByUserId(Long userId) {
return Data.success(userTabService.getUserTabByUserId(userId));
}
@RequestMapping("/ajaxFind")
@ResponseBody
public Data ajaxFindUserTabByUserId(Long userId) {
return Data.success(userTabService.getUserTabByUserId(userId));
}
@RequestMapping("/ajaxGetUserTabByAgeUserName")
@ResponseBody
public Data ajaxGetUserTabByAgeUserName(Integer age, String userName) {
return Data.success(userTabService.getUserTabByAgeUserName(age, userName));
}
@RequestMapping("/ajaxFindUserTabByGenderUserName")
@ResponseBody
public Data ajaxFindUserTabByGenderUserName(Integer gender, String userName) {
return Data.success(userTabService.findUserTabByGenderUserName(gender, userName));
}
}
5.接口IUserTabService
/**
*
*/
package com.ccrc.service;
import java.util.Date;
import java.util.List;
import com.ccrc.lang.Pager;
import com.ccrc.model.UserTab;
/**
* 用户管理,用管理用户信息 Service接口定义
* @author Jalen
* @time 2017年03月30日 10:39
*
*/
public interface IUserTabService {
UserTab getUserTabByUserId(Long userId);
void getPageUserTab(Pager pager);
void addUserTab(UserTab userTab);
void modifyUserTab(UserTab userTab);
void removeUserTab(Long userId);
UserTab findUserTabByUserId(Long userId);
List<UserTab> getUserTabByAgeUserName(Integer age, String userName);
List<UserTab> findUserTabByGenderUserName(Integer gender, String userName);
}
6.接口实现 UserTabService
/**
*
*/
package com.ccrc.service;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ccrc.lang.Pager;
import com.ccrc.dao.UserTabMapper;
import com.ccrc.model.UserTab;
/**
* 用户管理,用管理用户信息 Service实现
* @author Jalen
* @time 2017年03月30日 10:39
*
*/
@Service
@Transactional(readOnly = true)
public class UserTabService implements IUserTabService {
@Autowired
private UserTabMapper userTabMapper;
@Override
public UserTab getUserTabByUserId(Long userId) {
return userTabMapper.selectByPrimaryKey(userId);
}
@Override
public void getPageUserTab(Pager pager) {
List<UserTab> rets = userTabMapper.selectPage(pager.getCurPage(), pager.getPageSize());
pager.setRows(rets);
pager.setTotal(userTabMapper.selectTotal());
}
@Transactional
@Override
public void addUserTab(UserTab userTab) {
userTabMapper.insert(userTab);
}
@Transactional
@Override
public void modifyUserTab(UserTab userTab) {
userTabMapper.updateByPrimaryKey(userTab);
}
@Transactional
@Override
public void removeUserTab(Long userId) {
userTabMapper.deleteByPrimaryKey(userId);
}
@Override
public UserTab findUserTabByUserId(Long userId) {
return userTabMapper.findByPrimaryKey(userId);
}
@Override
public List<UserTab> getUserTabByAgeUserName(Integer age, String userName) {
return userTabMapper.selectByAgeUserName(age, userName);
}
@Override
public List<UserTab> findUserTabByGenderUserName(Integer gender, String userName) {
return userTabMapper.findByGenderUserName(gender, userName);
}
}
7.UserTabMapper类
package com.ccrc.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ccrc.model.UserTab;
/**
* 此类为[代码工厂]自动生成,继承了BaseDao类,已经拥有基本的增删改成操作
* <其他请自行扩展>
* @time 2017-03-30 10:39
* @CodeFactoryGenerated
*/
public interface UserTabMapper {
UserTab selectByPrimaryKey(Long userId);
List<UserTab> selectPage(@Param("curPage") Integer curPage, @Param("pageSize") Integer pageSize);
Long selectTotal();
int insert(UserTab userTab);
int updateByPrimaryKey(UserTab userTab);
int deleteByPrimaryKey(Long userId);
UserTab findByPrimaryKey(Long userId);
List<UserTab> selectByAgeUserName(@Param("age") Integer age, @Param("userName") String userName);
List<UserTab> findByGenderUserName(@Param("gender") Integer gender, @Param("userName") String userName);
}
8.UserTabMapper.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.ccrc.dao.UserTabMapper">
<resultMap id="BaseResultMap" type="com.ccrc.model.UserTab">
<id column="userId" jdbcType="BIGINT" property="userId" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="age" jdbcType="INTEGER" property="age" />
<result column="birthday" jdbcType="TIMESTAMP" property="birthday" />
<result column="gender" jdbcType="INTEGER" property="gender" />
<result column="userName" jdbcType="VARCHAR" property="userName" />
</resultMap>
<sql id="Base_Column_List">
userId, address, age, birthday, gender, userName
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_tab
where userId = #{userId,jdbcType=BIGINT}
</select>
<select id="selectPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from user_tab
where 1=1
<if test="curPage!=null and pageSize!=null">
limit #{curPage},#{pageSize}
</if>
</select>
<select id="selectTotal" resultType="java.lang.Long">
select count(userId)
from user_tab
</select>
<insert id="insert" parameterType="com.ccrc.model.UserTab">
insert into user_tab (
address, age, birthday, gender, userName
)
values (
#{address,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{birthday,jdbcType=TIMESTAMP}, #{gender,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}
)
</insert>
<update id="updateByPrimaryKey" parameterType="com.ccrc.model.UserTab">
update user_tab
set
address = #{address,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER},
birthday = #{birthday,jdbcType=TIMESTAMP},
gender = #{gender,jdbcType=INTEGER},
userName = #{userName,jdbcType=VARCHAR}
where userId = #{userId,jdbcType=BIGINT}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from user_tab where userId = #{userId,jdbcType=BIGINT}
</delete>
<select id="findByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_tab
where userId = #{userId,jdbcType=BIGINT}
</select>
<select id="selectByAgeUserName" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_tab
where age = #{age,jdbcType=INTEGER
and userName = #{userName,jdbcType=VARCHAR}
</select>
<select id="findByGenderUserName" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_tab
where gender = #{gender,jdbcType=INTEGER
and userName = #{userName,jdbcType=VARCHAR}
</select>
</mapper>
9. UserTab 实体类
package com.ccrc.model;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ccrc.lang.DateStyle;
/**
* 用户管理,用管理用户信息 实体对象
* @author Jalen
* @time 2017年03月13日 10:28
*
*/
@SuppressWarnings("serial")
public class UserTab extends EntitySerde {
/** userId */
private Long userId;
/** address */
private String address;
/** age */
private Integer age;
/** birthday */
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateStyle.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
private Date birthday;
/** gender */
private Integer gender;
/** 用户名称 */
private String userName;
/**
* 获取 userId 的值
* @return Long
*/
public Long getUserId() {
return userId;
}
/**
* 设置 userId 的值
* @param Long userId
*/
public UserTab setUserId(Long userId) {
this.userId = userId;
return this;
}
/**
* 获取 address 的值
* @return String
*/
public String getAddress() {
return address;
}
/**
* 设置 address 的值
* @param String address
*/
public UserTab setAddress(String address) {
this.address = address;
return this;
}
/**
* 获取 age 的值
* @return Integer
*/
public Integer getAge() {
return age;
}
/**
* 设置 age 的值
* @param Integer age
*/
public UserTab setAge(Integer age) {
this.age = age;
return this;
}
/**
* 获取 birthday 的值
* @return Date
*/
public Date getBirthday() {
return birthday;
}
/**
* 设置 birthday 的值
* @param Date birthday
*/
public UserTab setBirthday(Date birthday) {
this.birthday = birthday;
return this;
}
/**
* 获取 gender 的值
* @return Integer
*/
public Integer getGender() {
return gender;
}
/**
* 设置 gender 的值
* @param Integer gender
*/
public UserTab setGender(Integer gender) {
this.gender = gender;
return this;
}
/**
* 获取 用户名称 的值
* @return String
*/
public String getUserName() {
return userName;
}
/**
* 设置 用户名称 的值
* @param String userName
*/
public UserTab setUserName(String userName) {
this.userName = userName;
return this;
}
}
10.工程结构
11.页面没有贴出来,都在工程里面,上码云地址下载
12.部署tomcat 效果
马云地址: https://git.oschina.net/peaktiger/test
里面有两个项目 一个是ssm集成项目test, 一个是test要依赖到的项目 commons-lang5
数据库脚本我没发,发了一个表结构,搭建根据表结构自己去创建表,用的mysql数据库
希望能够帮到有需要的人。有什么问题可以交流,有什么不好的地方欢迎大家给我提意见,谢谢。