博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM项目整合——02整合action,service,dao三层架构
阅读量:3961 次
发布时间:2019-05-24

本文共 4570 字,大约阅读时间需要 15 分钟。

上一讲我们已经讲了SpringMVC(即action这一层)的配置,这一讲我们把Mybatis(dao层)与Spring(service层)给他全部讲完。

SSM项目整合——02整合action,service,dao三层架构

一.Mybatis配置与测试

这里关于如何使用逆向工程我们不作演示,可以参见,获得mapper与model已经上穿到了网盘:

链接:https://pan.baidu.com/s/1yTLsvaCLfq65qwF7bFXm-g 提取码:aymz

他们对应的表放在这里:

sql表:

链接:https://pan.baidu.com/s/141vXclKZEnDTGJk_KeC6FQ
提取码:4oka

上面文件都弄好了以后我们开始配置Mybatis,前面我们讲Mybatis的时候需要全局配置文件SqlMapConfig.xml,然后每一个mapper接口我们都需要一个xml文件(这个在传的文件里面已经有了),如果关于Mybatis的知识忘记了请参见来复习忘记的知识。

1.mabatis.xml
这里我们把SqlMapConfig.xml改名为mabatis.xml,其内如下:

2.测试

现在我们配置与Items相关的方法来测试一下:
ItemsMapper添加下面方法。

List
findItemsByName(String name);

ItemsMapper.xml文件下面配置下面内容:

接下来我们开始测试(请为Items加上toString方法):

public void test(){
InputStream inputStream = test.class.getClassLoader().getResourceAsStream("config/mybatis.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(inputStream); SqlSession sqlSession = factory.openSession(); ItemsMapper mapper = sqlSession.getMapper(ItemsMapper.class); List
items = mapper.findItemsByName("背包"); for (Items item : items) {
System.out.println(item); } }

在这里插入图片描述

在这里插入图片描述

二.Spring配置与测试

如果对于Spring的知识忘记了可以参见:

现在我们已经配置Mybatis,不过他还是处于一种独立的状态,即他的各个实现部分都是有Mybatis一个独自完成,并没有达到我们所说的整合的意思。

1.SqlSessionFactory扔给Spring来管理

我们现将Mybatis.xml的如下内容删除:

接下来我们需要配置applicationContext.xml(在讲Spring的时候我们叫beans.xml);

但是这样还是不够的,为了让项目启动时自动的加载该的配置文件以便于我们把对象都创建好,我们需要在web.xml里面加上配置:

contextConfigLocation
classpath:config/applicationContext.xml
org.springframework.web.context.ContextLoaderListener

2.测试

接下来我们创建如下内容:

在这里插入图片描述
IItemService的内容如下:

public interface IItemService {
public List
findItemsByName(String name); public Items findByID(Integer id); public void save0rUpdate ( Items items) ; public void deleteByID(Integer id);}

ItemServiceImpl的内容如下:

public class ItemServiceImpl implements IItemService{
@Autowired ItemsMapper itemsMapper; @Override public List
findItemsByName(String name) {
return itemsMapper.findItemsByName(name); } @Override public Items findByID(Integer id) {
return itemsMapper.selectByPrimaryKey(id); } @Override public void save0rUpdate(Items items) {
if(items.getId()==null){
itemsMapper.insert(items); }else{
itemsMapper.updateByPrimaryKey(items); } } @Override public void deleteByID(Integer id) {
itemsMapper.deleteByPrimaryKey(id); }}

不过在前面的配置里面我们没有加上注解因此我们需要在applicationContext.xml文件里面加上:


接下来就是本节最终的测试环节(action,service,dao)放在一起用:

首先我们创建一个ItemsController:

@Controller@RequestMapping("items")public class ItemsController {
@Autowired private IItemService itemService; @RequestMapping("list") public String list(){
List
items = itemService.findItemsByName("背包"); for (Items item : items) {
System.out.println(item); } return "items/list"; }}

添加@Service:

在这里插入图片描述
访问http://localhost:8080/items/list.do,得到:
在这里插入图片描述
上面这个是由于没有配置jsp文件的缘由。
在这里插入图片描述

如果你报错###Cause:org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES),可能是由于properties里面的配置相关不对,或者是存在中文乱码,如果是前者请自行搜索解决方案,后者可以参见

我们在讲Spring注解的时候的时候也讲到了对于三层架构的整合(只是模拟的),当时需要用到的是@Repository@Service@Controller,并且讲了他们的原理,今天在这里我们再来讲一遍他具体的流程:

由于我们在applicationContext.xml文件里面配置了下面这段:
在这里插入图片描述
因此启动服务器后读取web.xml文件进而读取springmvcapplicationContetx.xml
文件,这个时候根据上面这一段会自动创建我们的mapper接口的代理实现类。并由Spring容器来进行管理。
在这里插入图片描述
Spring讲刚才的mapper的代理实现对象注入到itemsMapper里面。同时生成的ItemServiceImpl对象交由Spring对象管理,接下来注入到下面
在这里插入图片描述
接下来我们在访问http://localhost:8080/items/list.do时,就可以正常执行我们的list()方法了。

转载地址:http://hxlzi.baihongyu.com/

你可能感兴趣的文章
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
bat备份数据库
查看>>
linux数据库导出结果集且比对 && grep -v ---无法过滤的问题
查看>>
shell函数与自带变量
查看>>
linux下shell获取不到PID
查看>>
sort详解
查看>>