美文网首页
SSM整合方式一

SSM整合方式一

作者: 神豪VS勇士赢 | 来源:发表于2018-08-11 23:16 被阅读17次

    整合步骤
    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>

    相关文章

      网友评论

          本文标题:SSM整合方式一

          本文链接:https://www.haomeiwen.com/subject/qtejbftx.html