SSM环境搭建过程
mybatis,spring,SpringMVC三大框架整合(idea工具)
1、引入依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.17.1-GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<!--文件上传依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
<!--绑定资源目录-->
</pluginManagement>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
数据库建立
数据库:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`empid` int(11) NOT NULL AUTO_INCREMENT,
`empName` varchar(50) DEFAULT NULL,
`partment` varchar(50) DEFAULT NULL,
`picture` varchar(50) DEFAULT NULL,
`state` varchar(50) DEFAULT NULL,
PRIMARY KEY (`empid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES ('1', '张三', '1', 'logo.jpg', '离职');
INSERT INTO `employee` VALUES ('2', '李四', '2', 'bieshu.png', '离职');
INSERT INTO `employee` VALUES ('6', '王五', '2', 'zs.png', '在职');
INSERT INTO `employee` VALUES ('10', 'cc', '1', 'cc.jpg', '在职');
INSERT INTO `employee` VALUES ('11', '', '1', '308f94e3-8aa7-4c44-889a-e206e7f48550_c#.txt', '在职');
2、 配置文件目录
3、建立配置文件
3.1 建立jdbc.properties
jdbc.dr=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test?autoReconnect=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root(自己数据库账户)
jdbc.password=自己数据库密码
3.2 新建mybatis.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.xxx.entity"/>
</typeAliases>
<!--注册映射文件 自己指定自己的dao层映射文件-->
<mappers>
<package name="com.xxx.**.dao"/>
</mappers>
</configuration>
3.3 新建spring-ds.xml
<!--注入db.properties-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.dr}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
3.4新建spring-mvc.xml
<!--注册组件扫描器,扫描@Controller-->
<context:component-scan base-package="com.aynu.**.controller"/>
<!--MVC注解驱动-->
<mvc:annotation-driven/>
<!--配置登录拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.hrm.filter.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!--文件解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="4096" />
</bean>
3.5 spring-mybatis.xml,spring整合mybatis
<!--生成sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!--生成dao接口的动态代理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.aynu.**.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
3.6 把service注入到spring,新建spring-service.xml
<!--注册组件扫描器,扫描@Service-->
<context:component-scan base-package="com.aynu.**.service"/>
3.7 注册事务管理器,新建spring-tx.xml
<!--注册平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="modify*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--AOP切面配置-->
<aop:config>
<aop:pointcut id="myPC" expression="execution(* *..service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPC"/>
</aop:config>
4、web.xml配置
<!--注册中央调度器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!--编码过滤器-->
<filter>
<filter-name>encodinFilter</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>encodinFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--登录验证过滤器-->
<!--<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.hrm.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.do</url-pattern>
</filter-mapping>-->
5、过滤器(拦截器过滤器任选其一,我首选过滤器)
目的和作用:
防止用户越过登陆验证,直接输入地址进行操作。要想使用该网站,必须拦截登陆请求
/*
* 采用过滤器拦截越域用户
* 方法:通过获取session域中是否存在对象
* */
public class MyLoginFilter implements Filter {
//此处应该放掉登陆界面和登陆的处理器
private String[] need_uri = {"/index.jsp","/loginForm.jsp","/login.do"};
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//index.jsp,loginForm.jsp,login.do放掉这三个
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//获取每次的请求路径
String strURI = request.getRequestURI();
//循环查看请求地址是否包含上三个
boolean flag = false;
for (String str : need_uri
) {
//如果包含,即已经登陆;防止空指针异常
if (strURI.contains(str)) {
//放行
flag = true;
filterChain.doFilter(request, response);
break;
}
}
if (!flag) {
//不包含 拦截
User login_user = (User) request.getSession().getAttribute("loginUser");
if (login_user != null) {
filterChain.doFilter(request, response);
} else {
request.setAttribute("login_error", "你还未登陆请登陆");
//请求转发
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
}
}
6.拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
if (requestURI.endsWith("/login.do")){
return true;
}
User login_user = (User) request.getSession().getAttribute("login_user");
if (login_user != null){
return true;
}else {
request.setAttribute("login_error","您还未登录,请登录后访问!");
request.getRequestDispatcher("/index.jsp").forward(request,response);
return false;
}
}
}
7、用户登陆和注销操作
@RequestMapping("/login.do")
public String login(User user, HttpSession session, Model model){
//System.out.println(user);
User login_user = userService.findUserByLoginnameAndPassword(user);
//System.out.println(login_user);
if (login_user != null){
session.setAttribute("login_user",login_user);
return "/jsp/main.jsp";
}else {
model.addAttribute("login_error","用户名或密码不正确,请重新输入!");
return "/index.jsp";
}
}
@RequestMapping("/logout.do")
public String logout(HttpSession session,Model model){
session.removeAttribute("login_user");
model.addAttribute("login_error","退出成功,请重新登录!");
return "/index.jsp";
}
8、代码层建立
三层架构环境搭建:
entity实体类:
实体类:
@Data
public class Employee {
private Integer empid;
private String empName;
private Integer partment;
private String picture;
private String state;
}
dao包:
dao接口:
public interface EmployeeDao {
List<Employee> selectAllEmployees();
}
dao.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.xja.ssm.dao.EmployeeDao">
<select id="selectAllEmployees" resultType="Employee">
select * from employee
</select>
</mapper>
service层:
service
public interface EmployeeService {
List<Employee> findAllEmployees();
}
serviceImpl:
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Resource
private EmployeeDao employeeDao;
@Override
public List<Employee> findAllEmployees() {
return employeeDao.selectAllEmployees();
}
}
controller层:
@Controller
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@RequestMapping("/findAllEmp.do")
public String findAllEmp(Model model){
List<Employee> employeeList = employeeService.findAllEmployees();
model.addAttribute("emps",employeeList);
for(Employee emp:employeeList) {
System.out.println(emp);
}
return "index.jsp";
}
}
index.jsp:
<a href="/findAllEmp.do">查看所有的员工</a><br>
${emps}