整合步骤
1,根据需求做设计(数据库设计)
2,搭建环境( POM引入包)
3,创建Mybatis映射文件和实体类
4,手动开发DAO接口和实现类或自动生成mapper-dao接口
5,创建Service接口和实现类
6,编写SpringMVC的action
7,Spring整合Mybatis配置(+服务层)
8,Spring整合SpringMVC配置(+web.xml)
开发流程:
三大框架整合SSM
第一步:根据需求做设计
概要设计(需求写文档,产品经理)
详细设计(接口设计)
数据库设计文档
CREATE TABLE t_user_info
(
u_id
bigint(20) NOT NULL AUTO_INCREMENT,
u_name
varchar(255) NOT NULL,
u_pass
varchar(255) DEFAULT NULL,
PRIMARY KEY (u_id
)
) ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=utf8;
第二步:搭建环境,导入依赖
线下环境(项目,JDK,web容器,分布式缓存,数据库)
线上环境(整个链路)
一定要注意线上以及线下的环境的统一
mysql,mybatis,插件,dbcp,log4j,spring(包含SpringMVC),jackson,文件上传,jsp,jstl
注意:
特别要注意 resources 插件配置 这个不配置 会遇到 资源文件找不到的错误 (这是个坑)
第三步:创建 Mybatis的映射文件和实体类
注意:
不生成DAO,不生成Example,手动模式写。
第四步:开发持久层(DAO接口和实现类)
自定义开发需要extends SqlSessionDaoSupport
org.mybatis.spring.support.SqlSessionDaoSupport
this.getSqlSession()…(注入: sqlSessionFactory)
org.mybatis.spring.SqlSessionFactoryBean
public interface UserInfoDao{
void addUserInfo(UserInfo userInfo);
void deleteUserInfoById(Long aLong);
void UpdateUserInfo(UserInfo userInfo);
UserInfo queryUserInfoById(Long aLong);
List<UserInfo> queryUserInfoByPage(Integer index, Integer size);
List<UserInfo> queryAllUserInfo();
}
public class UserInfoDaoImpl extends SqlSessionDaoSupport implements UserInfoDao {
@Override
public void addUserInfo(UserInfo userInfo) {
getSqlSession().insert("com.zyh.mapper.UserInfoMapper.insert",userInfo);
}
@Override
public void deleteUserInfoById(Long aLong) {
getSqlSession().delete("com.zyh.mapper.UserInfoMapper.deleteByPrimaryKey",aLong);
}
@Override
public void UpdateUserInfo(UserInfo userInfo) {
getSqlSession().update("com.zyh.mapper.UserInfoMapper.updateByPrimaryKeySelective",userInfo);
}
@Override
public UserInfo queryUserInfoById(Long aLong) {
return getSqlSession().selectOne("com.zyh.mapper.UserInfoMapper.selectByPrimaryKey",aLong);
}
@Override
public List<UserInfo> queryUserInfoByPage(Integer index, Integer size) {
Map<String,Integer> stringIntegerMap=new HashMap<>();
stringIntegerMap.put("index", index);
stringIntegerMap.put("size",size);
return getSqlSession().selectList("com.zyh.mapper.UserInfoMapper.selectByPage",stringIntegerMap);
}
@Override
public List<UserInfo> queryAllUserInfo() {
return getSqlSession().selectList("com.zyh.mapper.UserInfoMapper.selectAll");
}
}
第五步:开发服务层(接口+实现类)
public interface UserInfoService{
void addUserInfo(UserInfo userInfo);
void deleteUserInfoById(Long aLong);
void UpdateUserInfo(UserInfo userInfo);
UserInfo queryUserInfoById(Long aLong);
List<UserInfo> queryUserInfoByPage(Integer index,Integer size);
List<UserInfo> queryAllUserInfo();
}
public class UserInfoServiceImpl implements UserInfoService {
private UserInfoDao userInfoDao;
public void setUserInfoDao(UserInfoDao userInfoDao) {
this.userInfoDao = userInfoDao;
}
@Override
public void addUserInfo(UserInfo userInfo) {
userInfoDao.addUserInfo(userInfo);
}
@Override
public void deleteUserInfoById(Long aLong) {
userInfoDao.deleteUserInfoById(aLong);
}
@Override
public void UpdateUserInfo(UserInfo userInfo) {
userInfoDao.UpdateUserInfo(userInfo);
}
@Override
public UserInfo queryUserInfoById(Long aLong) {
return userInfoDao.queryUserInfoById(aLong);
}
@Override
public List<UserInfo> queryUserInfoByPage(Integer index, Integer size) {
return userInfoDao.queryUserInfoByPage(index,size);
}
@Override
public List<UserInfo> queryAllUserInfo() {
return userInfoDao.queryAllUserInfo();
}
}
这里注意查询部分 我们可以创建DTO 做一个实体类与 界面实体的传输实体 DTO
第六步:开发表现层
使用注解方式
@Controller
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
@RequestMapping("/list.do")
public String listUserInfos(Model model){
List<UserInfo> userInfos = userInfoService.queryUserInfoByPage(0, 5);
model.addAttribute("userInfos",userInfos);
return "/userInfos.jsp";
}
}
第七步:整合持久层配置
数据源:org.apache.commons.dbcp.BasicDataSource
Mybatis操作数据库事务,使用Spring 的JDBC事务控制类。
org.springframework.jdbc.datasource.DataSourceTransactionManager
<!--配置dbcp数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/testmybatis01?characterEncoding=utf-8"></property>
<property name="username" value="root"></property>
<property name="password" value="zyh"></property>
<property name="maxActive" value="30"></property>
<property name="maxWait" value="3000"></property>
</bean>
<!-- 2,创建SqlSessionFactory ,由Spring提供 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 思考mybatis的核心配置部分:数据源,注册实体 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 注册实体,模糊匹配多个mapper映射文件-->
<property name="mapperLocations" value="classpath:com/zyh/mapper/*Mapper.xml"></property>
</bean>
<bean id="userInfoDao" class="com.zyh.dao.impl.UserInfoDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="userInfoService" class="com.zyh.service.impl.UserInfoServiceImpl">
<property name="userInfoDao" ref="userInfoDao"></property>
</bean>
<!--5 事物管理通知类-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 6,定义事务通知切面,让事务应用到具体的方法 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--希望哪些方法需要应用到事务 -->
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="Update*" propagation="REQUIRED"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 7,AOP编程:让切入点和通知关联形成切面 -->
<aop:config>
<aop:pointcut id="myPoint" expression="execution( * com.zyh.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPoint"></aop:advisor>
</aop:config>
<!-- 整合表现层配置 -->
<!-- 8,注解的处理器映射器和适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 9视图解析器:逻辑视图-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<!-- 10扫描 Controller-->
<context:component-scan base-package="com.zyh.controller"></context:component-scan>
第八步 :配置中央控制器 以及 过滤器 web.xml
<filter>
<filter-name>myfilter</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>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
网友评论