本次总结一个出门级别的ssm整合案例(只介绍查询操作 具体其他操作可以自己自由实现)
注意事项:
1.本案例使用intellij idea开发
2.具体jar包不做介绍(本人导入了spring的全部包+mybatis的包以及数据库驱动包和pring-mybatis整合工具包)
3.本案例很大程度上参考了一些教学视频(如有侵权,请给我留言)
4.本案例只供学习使用.
具体开发流程:
程序结构图:
配置文件的编写.
2.1 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<!--配置spring监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置springmvc拦截器-->
<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:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.form</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>
</web-app>
2.2 applicationContext.xml(具体的bean是在具体编码后填写)
<?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: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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置通知-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="delete" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置切面-->
<aop:config>
<aop:pointcut id="piontcut" expression="execution(* com.engle.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="piontcut"/>
</aop:config>
<!--连接数据库配置文件-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties"/>
</bean>
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<!--配置session工厂-->
<bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean id="userDao" class="com.engle.dao.impl.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlsessionFactory"/>
</bean>
<bean id="userService" class="com.engle.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<!--配置事务管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--扫描注解-->
<context:component-scan base-package="com.engle" />
</beans>
2.3 database.properties(数据库配置文件)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/*yourdatabasename*
username=root
password=*yourpassword*
2.4 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>
<typeAlias type="com.engle.vo.User" alias="user"/>
</typeAliases>
<!--指定映射文件-->
<mappers>
<mapper resource="com/engle/vo/UserMapper.xml"/>
</mappers>
</configuration>
2.5 springmvc.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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描注解所在的包-->
<context:component-scan base-package="com.engle.controller"/>
</beans>
3.具体的编码工作
3.1 vo模块(POJOs)
package com.engle.vo;
/**
* Created by engle on 16-5-24.
*/
public class User {
private int id;
private String name;
private String password;
public User() {
}
public User(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
usermapper.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.engle.vo.UserMapper">
<!--采用* 表的属性必须和pojos属性名相同-->
<select id="selectAll" resultType="com.engle.vo.User">
SELECT * FROM user
</select>
</mapper>
3.2 dao模块(包括impl)
UserDao
/**
* Created by engle on 16-5-24.
*/
public interface UserDao {
public List<User> selectAll();
}
UserDaoImpl
/**
* Created by engle on 16-5-23.
*/
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
public List<User> selectAll() {
String statement = "com.engle.vo.UserMapper.selectAll";
return getSqlSession().selectList(statement);
}
}
3.3 service模块(包括impl)
UserService
public interface UserService {
public List<User> selectAll();
}
UserServiceImpl
/**
* Created by engle on 16-5-23.
*/
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public List<User> selectAll() {
return userDao.selectAll();
}
}
3.4 utils模块
MybatisUtils
/**
* Created by engle on 16-5-23.
*/
public class MybatisUtils {
/**
* 获取userservice对象
*/
public static UserService getUserService() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
return (UserService) context.getBean("userService");
}
}
3.5 controller模块
UserController
/**
* Created by engle on 16-5-23.
*/
@Controller
public class UserController {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/selectAll")
public String list(ModelMap map){
setUserService(MybatisUtils.getUserService());
map.addAttribute("list",userService.selectAll());
return "/show.jsp";
}
}
4. jsp页面的编写
show.jsp
<%@ page import="org.springframework.ui.ModelMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="/WEB-INF/tld/c.tld" %>
<html>
<head>
<title>show all user</title>
</head>
<body>
<table width="80%" align="center">
<tr>
<td>编号</td>
<td>姓名</td>
<td>密码</td>
</tr>
<c:forEach items="${list }" var="user">
<tr>
<td>${user.id }</td>
<td>${user.name }</td>
<td>${user.password }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
5.案例结果:
5.1 数据库查询结果:
5.2 网页显示结果
6.总结:
在这次的案例中 由于使用的idea工具遇到了很多的麻烦,虽然耗费了不少的时但是很多东西让我有了更深的理解.我觉得也是一件好事.