开发环境搭建
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ssm-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- springMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- spring aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!-- mybatis与spring整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 数据库连接池 和驱动-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- jstl junit servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring单元测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.7.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- 引入Mybatis分页插件 -->
<!-- 引入5.0版本在测试的时候会报错 4.2版本也会报错
4.2版本总是出现String无法转换为某个对象的错误
-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.5</version>
</dependency>
</dependencies>
<build>
<finalName>ssm-demo</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
数据库
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
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>
<!-- 别名设置 -->
<typeAliases>
<package name="com.ssm.model" />
</typeAliases>
<!-- mybatis分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
</plugins>
</configuration>
创建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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--注解扫描包-->
<context:component-scan base-package="com.ssm" />
<!--加载jdbc-->
<context:property-placeholder location="classpath:config.properties" />
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${c3p0.jdbcUrl}"></property>
<property name="driverClass" value="${c3p0.driverClass}"></property>
<property name="user" value="${c3p0.user}"></property>
<property name="password" value="${c3p0.password}"></property>
</bean>
<!--配置和mybatis整合-->
<!--创建sqlsessionfactory工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:sqlConfig.xml"></property>
<property name="mapperLocations">
<list>
<value>classpath*:mapper/*.xml</value>
</list>
</property>
</bean>
<!-- 配置mybatis的代理接口开发 * 接口类名和映射文件必须同名 * 接口类和映射文件必须在同一个目
录下 * 接口的映射文件的namespace名称必须是接口的全限定名
* 接口的方法名必须和映射的statement的id一致 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描所有dao接口的实现,加入到ioc容器中 -->
<property name="basePackage" value="com.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!--事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务增强事务如何切入-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
<tx:method name="get*" read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
<!--配置拦截service-->
<aop:config>
<aop:pointcut id="txPoint" expression="execution(* com.ssm.service..*(..))"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"></aop:advisor>
</aop:config>
</beans>
创建spring-mvc.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/context/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<context:property-placeholder/>
<!--配置自动扫描包 -->
<context:component-scan base-package="com.ssm"/>
<!--1: mvc:annotation-driven默认创建了 RequestMappingHandlerMapping和 RequestMappingHandlerAdapter对象
提供对JSon数据格式的支持-->
<mvc:annotation-driven/>
<!-- 2.配置静态资源访问 -->
<mvc:default-servlet-handler />
<!-- 配置sprigmvc视图解析器:解析逻辑试图
后台返回逻辑试图:index
视图解析器解析出真正物理视图:前缀+逻辑试图+后缀====/WEB-INF/page/index.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"></property>
<property name="prefix" value="/WEB-INF/page/"></property>
</bean>
</beans>
创建log4j.properties
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.encoding=UTF-8
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.appender.rollingfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.rollingfile.encoding=UTF-8
log4j.appender.rollingfile.DatePattern='.'yyyyMMdd
log4j.appender.rollingfile.File=logs/manager.log
log4j.appender.rollingfile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingfile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.rootLogger=INFO,console
log4j.logger.com.redare=DEBUG,console
log4j.additivity.com.redare=false
db.properties
##数据库连接配置
c3p0.jdbcUrl=jdbc\:mysql\://127.0.0.1/test?useUnicode\=true&characterEncoding\=utf-8
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.user=root
c3p0.password=root
c3p0.acquireIncrement=3
c3p0.initialPoolSize=5
c3p0.minPoolSize=5
c3p0.maxPoolSize=20
c3p0.maxIdleTime=120
创建实体类
public class Users {
private int id;
private String name;
private int age;
}
Dao层
package com.ssm.mapper;
import com.ssm.model.Users;
import org.springframework.stereotype.Repository;
import java.util.List;
public interface UsersMapper {
public void saveUser(Users users);
public boolean updateUser(Users users);
public boolean deleteUser(int id);
public Users findUsers(int id);
public List findAllUsers();
}
service层
package com.ssm.service.impl;
import com.ssm.mapper.UsersMapper;
import com.ssm.model.Users;
import com.ssm.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersMapper mapper;
public void saveUsers(Users users) {
mapper.saveUser(users);
}
public boolean deleteUsers(int id) {
return mapper.deleteUser(id);
}
public boolean updateUsers(Users users) {
return mapper.updateUser(users);
}
public Users seleteUsers(int id) {
return mapper.findUsers(id);
}
public List selectAll() {
return mapper.findAllUsers();
}
}
UserMapper
<?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">
<!--
namespace:必须与对应的接口全类名一致 UserMapper.java
id :必须与对应接口的某个对应的方法名一致即必须要和UserMapper.java接口中的方法同名。
-->
<mapper namespace="com.ssm.mapper.UsersMapper">
<!--增加-->
<insert id="saveUser" parameterType="Users">
INSERT INTO users(name,age) VALUES (#{name},#{age})
</insert>
<!--删除-->
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id=#{id}
</delete>
<!--修改-->
<update id="updateUser" parameterType="Users">
UPDATE users SET name=#{name},age=#{age} WHERE id=#{id}
</update>
<!--根据ID查询-->
<select id="findUsers" parameterType="int" resultType="Users">
SELECT * from users WHERE id=#{id}
</select>
<!--查询所有-->
<select id="findAllUsers" resultType="Users">
SELECT * FROM users
</select>
</mapper>
controller
package com.ssm.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ssm.model.Users;
import com.ssm.service.UsersService;
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.RequestParam;
import java.util.List;
@Controller
@RequestMapping("/users/")
public class UsersController {
@Autowired
private UsersService usersService;
@RequestMapping("info")
public String toAddUsers(){
return "addUsers";
}
@RequestMapping("addUsers")
public String addUsers(Model model, Users users){
if (users!=null){
usersService.saveUsers(users);
}
return "redirect:/users/userInfo";
}
@RequestMapping("updateUsers")
public String updateUsers(Model model,Users users){
if (usersService.updateUsers(users)){
users=usersService.seleteUsers(users.getId());
model.addAttribute("users",users);
return "redirect:/users/userInfo";
}
return "error";
}
@RequestMapping("deleteUsers")
public String deleteUsers(Model model,int id){
model.addAttribute("users",usersService.deleteUsers(id));
return "redirect:/users/userInfo";
}
@RequestMapping("getUser")
public String getUser(Model model,int id){
model.addAttribute("users",usersService.seleteUsers(id));
return "editUsers";
}
@RequestMapping("getAll")
public String getAllUsers(Model model){
List users=usersService.selectAll();
model.addAttribute("users",users);
return "addUsers";
}
@RequestMapping("userInfo")
public String getUsers(@RequestParam(value = "pn",defaultValue = "1") int pn,
Model model){
PageHelper.startPage(pn,5);
List users=usersService.selectAll();
PageInfo page=new PageInfo(users,5);
model.addAttribute("pageInfo",page);
return "usersInfo";
}
}