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代理的方式来看法,到时我们做的事情就更少了,所以先介绍这种方法会更见便于理解。
版权声明:本文为博主原创文章,未经博主允许不得转载。