SSM进阶(七)SSM整合

                               SSM整合

对于SSM得框架整合有两种方式:

两种方法之前都有涉及,只不过那时候没有整合;

     一种就是使用sql绝对定位的方式去插叙数据库;

     第二种就是使用mapper代理的方式去开发;

本篇博文,介绍的时第一中只要Sql的绝对代理的方式来开发。

这种方式的特点就是,在自动生成的时候不生成Dao层以及Example类,这种开发方式大致分为八部,下面我们就来一一介绍(本文以添加用户为例):

 

 

1.   创建项目,导入依赖

相信读过之前你文章的博友,以及对于这种操作很熟悉了,所以这儿就不做过多的介绍;

用到的依赖有:Mysql,mybatis,spring,dbcp,log4j,插件,jsp,jstl,文件上传,json

注:插件可去我的资源上去下载,免费。

2.   点击生成pojo实体类,以及mapper映射文件;

接下类我们就从底层开始,一层层向上写程序:

3.   编写Dao层及其实现

代码如下:

接口:

publicinterface UserDao{

    public void addUser(user user1);

    public List<user> selectAll();
}

实现:

之前说过的使用绝对定位的方式,Dao的实现类要去继承SqlSessionDaoSupport这个类,因为这样我们才能拿到器内部的sqlSession对象;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    @Override
    public void addUser(user user1) {
        this.getSqlSession().insert("com.qf.mapper.userMapper.insert",user1);
    }
   }

 

4.   编写服务层及其实现

在这里我们解释一个问题:

就是我们在做服务层的开发来说,规范一点还应该开发一个dto层用来接受前端页面提交上来的数据,当然你也可以不用直接去用生成的实体类,但是这样时容易出错的,所以在这里小编用的就是前一种方法

所以我们应该前去开发dto层,由由于没有前端页面,所以我们这里只是将pojo层的变量考过来为其添加方法;

但时这种做法的优势就是,当前端页面传递过来的数据和后端的实体类不一致的时候,我们可以将dto的变量做的和页面上一致,然后再通过将dto当中的数据提取出来,封装到我们的poji类里面。这样便于我们去操作传递数据。

 

Dto层的开发

public class UserDto {

    private Long id;
    private String username;
    private String password;
    private Long sid;

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
    public Long getSid() { return sid;}
    public void setSid(Long sid) { this.sid = sid; }
}
 
 

UserSevice接口:

 

public interface UserService {

    public  void addUser(UserDto dto);

 }

实现:

 

服务层时依赖Dao持久层的所以要在服务层注入持久层的对象,所以在这里提供了对象作为属性的setter方法;

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    @Override
    public void addUser(UserDto dto) {
        user user1=new user();
        BeanUtils.copyProperties(dto,user1);
        userDao.addUser(user1);
    }
  }

5.   控制层开发

对于控制层,我们采用注解的方式类开发,在之前的Springmvc的博文当中注解的方式开发以及详细的介绍过了,所以在这里我直接来看代码:

@Controller
此注解表示这是一个控制类;
public class UserController {

    @Qualifier("UserService")
    @Autowired
这两条注解表示的就是给userService这个接口注入实体对象,前者是按名称匹配,后者时自动类型匹配
    private UserService userService;

    @RequestMapping("/addUser.do")
这个注解就表示这是一个控制器。也即是只要时addUser.do的请求都会被拦截到这儿处理
    public ModelAndView addUser(HttpServletRequest request){
        ModelAndView modelAndView=new ModelAndView();
        UserDto dto=new UserDto();

        dto.setSid(Long.parseLong(request.getParameter("sid")));
        dto.setUsername(request.getParameter("username"));
        dto.setPassword(request.getParameter("passeord"));

        modelAndView.setViewName("/index.jsp");
        return modelAndView;

    }
}

同样ModelAndView的用法再之前以及提及,在这里就不赘述,详情参照

具体也就是setViewName()以及addObject(key,value)两个方法。

https://blog.csdn.net/qq_42112846/article/details/80889714

6.   核心配值文件

我们主要的配置就是;

1)整合持久层

数据源,

sqlSessionFactory工厂(关联数据源,注册实体),

创建UserDao对象(注入SqlSessionFactory工厂),

 

2)整合服务层

 

创建目标类对象,(注入UserDao)

 

创建事务管理类对象,用到的就是DataSourceTransactionManager这个类

       (关联数据源)

声明事务管理切面(也即是确定那些方法需要公共能力那些不需要)

 

AOP编程 声明切入点 将切入点这之前的事务关联形成切面

 

3)整合表现层

 

主要就是前端控制器的配置

处理器映射器,适配器的配置,这两步可以使用自动注册的方式来完成

自动注册的优势可以参照annotation-driven一文

视图解析器的配置

最后就是都controller层开启注解扫描

 

下来我们来看具体的代码:

<!--数据源的配置-->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url" value="jdbc:mysql://localhost:3306/user?characterEncoding=utf-8"></property>
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
</bean>
<!--sqlSessionFactory工厂对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--关联数据源-->
    <property name="dataSource" ref="dataSource"></property>
<!--注册实体-->
    <property name="mapperLocations" value="classpath:com/qf/mapper/*Mapper.xml"></property>
</bean>
<!--创建UserDao对象-->
<bean id="UserDao" class="com.qf.dao.UserDaoImpl">

 

<!--注入sqlSessionFactory工厂以便得到Sqlsession对象-->
    <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<!--创建目标类对象-->
<bean id="UserService" class="com.qf.service.UserServiceImpl">
 
<!--注入userDao对象-->
    <property name="userDao" ref="UserDao"></property>
</bean>
<!--创建事务管理类对象-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 
<!--关联数据源-->
    <property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 6,定义事务通知切面 -->
<tx:advice id="myadvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED"/>
        <tx:method name="del*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="find*" read-only="true"/>
    </tx:attributes>
</tx:advice>
<!—AOP编程 -->
<aop:config>
 
<!—定义切入点 -->
  <aop:pointcut id="mypoint" expression="execution(* com.qf.service.*.*(..))">  
</aop:pointcut>
 
<!—关联形成切面 -->
    <aop:advisor advice-ref="myadvice" pointcut-ref="mypoint"></aop:advisor>
</aop:config>

<!—自动注册处理器映射器以及适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
 
<!—配饰视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
<!—最后就是都controller开启注解扫描 -->
<context:component-scan base-package="com.www.controller"></context:component-scan>

 

以上就是核心配文件的配置,对于前端控制器的配置,再web,xml当中,大家可以去Sqpringmvc的那篇文章当中去看有详细的介绍。

以上就是整个的开发以及配置。

之后要做的就是测试大家可以开发一个含有Dto当中四个字段数据提交的页面然后建好库去测试。

 

 

 

以上就是就是对于sql绝对定位的这种方式进行SSM的整合,下篇博文将会介绍MAPPER代理的方式来看法,到时我们做的事情就更少了,所以先介绍这种方法会更见便于理解。

 版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值