SSM(struts2-spring-mybatis)整合开发步骤
1.引入依赖jar
spring、mybatis、struts2、mybatis-spring、struts2-spring-plugin、mybatis|oracle、druid、fastjson、log4j、servlet-api、jstl等
2.SM整合
①创建数据表
[外链图片转存失败(img-vVmUvapO-1563077015317)(C:\Users\15620\Desktop\2019-07-14_112341.jpg)]
②创建实体类
public class User {
private String id;
private String name;
private Integer age;
private Date bir;
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", bir=" + bir +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBir() {
return bir;
}
public void setBir(Date bir) {
this.bir = bir;
}
public User() {
}
public User(String id, String name, Integer age, Date bir) {
this.id = id;
this.name = name;
this.age = age;
this.bir = bir;
}
}
③创建DAO接口
public interface UserDAO {
//展示所有
List<User> selectAll();
//添加用户
void insert(User user);
}
④书写mapper.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.XX.dao.UserDAO">
<select id="selectAll" resultType="User">
select id,name,age,bir from user
</select>
<insert id="insert">
insert into user values(#{id},#{name},#{age},#{bir})
</insert>
</mapper>
⑤创建service
public interface UserService {
//展示所有的用户
List<User> showAll();
//添加用户
void add(User user);
}
⑥创建serviceImpl实现service,声明DAO依赖
public class UserServiceImpl implements UserService{
//依赖
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
@Override
public List<User> showAll() {
List<User> users = userDAO.selectAll();
return users;
}
@Override
public void add(User user) {
user.setId(UUID.randomUUID().toString());
userDAO.insert(user);
}
}
⑦书写spring.xml配置文件
1).创建数据源对象(记忆:数据库配置信息),使用DruidDataSources
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
2).创建sqlsessionfactory(记忆:mybatis_config.xml的信息),使用SqlSessionFactory,注入数据源,mapperlocations,也可以起别名
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/XXX/mapper/UserDAOMapper.xml"/>
<property name="typeAliasesPackage" value="com.XXX.entity"/>
</bean>
<!--注意:
mapper文件的位置格式为“classpath:XX.XX.XX”
起别名时指定文件路径的value内格式为“XX.XX.XX”. -->
3).创建DAO对象,使用MapperScannerConfigurer,注入数据源,basePackage
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.baizhi.dao"/>
</bean>
<!--注意:指定dao文件路径时value内格式为“XX.XX.XX”-->
4).创建事务管理器(管理service层业务)使用DataSourceTransactionManager,注入数据源
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
5)tx:advice将事务管理器转化为环绕通知,tx:method配置细粒度
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*"/>
<tx:method name="showAll*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!--注意:事务可以指定多种属性,包括:propagation()用来控制传播属性、Isolation(用来控制隔离级别)、timeout(用来设置超时性)、rollback-for(用来设置什么异常回滚) 、norollback-for(用来设置什么异常不会滚) 、readonly(用来设置事务读写性)。一般不需要设置属性,使用默认值即可。对于查询方法建议设置:propagation="SUPPORTS"-->
6)管理service对象的创建
<bean id="userService" class="com.XX.service.UserServiceImpl">
<property name="userDAO" ref="userDAO"/>
</bean>
7)配置aop(即指定service方法中那些会进行事务管理)
<aop:config>
<aop:pointcut id="pc" expression="within(com.baizhi.service.*ServiceImpl)"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
<!--aop:pointcut定义切点,expression指定了具体的位置,expression中使用within或execution指定位置。within可以指定到具体的一个类,execution可以指定到具体的方法-->
3.ss整合
①配置web.xml包括:核心过滤器,contextparam,listener
<!-- 配置全局参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 配置核心过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
②配置spring.xml,管理action
<bean class="com.baizhi.action.UserAction" id="userAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
③配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" extends="struts-default" namespace="/user">
<action name="showAll" class="userAction" method="showAll">
<result>/showAll.jsp</result>
</action>
<action name="add" class="userAction" method="add">
<result type="redirectAction">showAll</result>
</action>
</package>
</struts>
<!--注意:由于action现在交给spring工厂创建管理,struts.xml中class不再是action的全限定名而是首字母小写-->
showAll
```