一、框架整合
1.1 思路
其实思路和我们之前整合的方式一样,这里当作复习。
1.1.1 dao 层
- 整合
mybatis
和spring
,需要用到的依赖:mybatis
的jar
,mysql
驱动,数据库连接池druid
,mybatis
和spring
的整合包,spring
。 - 配置文件:
1、mybatis
的配置文件SqlMapConfig.xml
2、spring
的配置文件:applicationContext-dao.xml
数据源、数据库连接池、SqlSessionFactory
(整合包中)、mappper
文件扫描器(整合包)
1.1.2 Service层
- 使用的
jar
:spring
的jar
- 配置文件:
添加到springmvc
容器applicationContext-service.xml
,其中需要配置扫描器(扫描带@Service
注解的类)
事务(applicationContext-transaction.xml
),一个事务管理器,配置切面aop
、通知tx
。
1.1.3 表现层
- 相关依赖包
需要springmvc
和spring
的包。 - 配置文件:
springmvc.xml
配置适配器、映射器、视图解析器。配置注解驱动(替代适配器和映射器)。配置一个视图解析器。配置包扫描器,扫描Controller
注解。
1.1.4 web.xml
在web.xml
中配置springmvc
的前端控制器,spring
的监听器字符编码等。
注意:不管是那一层的配置文件,都应该放在web
层下面。即工程taotao-manager-web
中的src/main/resources
中。
1.2 整合
1.2.1 dao层
taotao-manager-web/src/main/resources/mybatis/SqlMapConfig.xml
taotao-manager-web/src/main/resources/spring/applicationContext-dao.xml
taotao-manager-web/src/main/resources/propertis/db.propertis
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3305/taotao?characterEncoding=utf-8
jdbc.username=root
jdbc.password=walp1314
说明:相关表和数据这里就不给出了,网上可以找到。
1.2.2 service层
其中applicationContext-service.xml
事务applicationContext-transaction.xml
1.2.3 表现层
其中springmvc.xml
而web.xml
taotao-manager
contextConfigLocation
classpath:spring/applicationContext-*.xml
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
org.springframework.web.context.ContextLoaderListener
taotao-manager
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc.xml
1
taotao-manager
/
index.jsp
说明:到此,相关的整合工作就完成了。
二、测试
2.1 逆向工程生成相关代码
新建一个工程mybatis-generator
generatorConfig.xml
GeneratorSqlmap.java
package com.taotao.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorSqlmap {
public void generator() throws Exception {
List warnings = new ArrayList();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
说明:将生成的mapper
拷贝到taotao-manager-dao
,将生成的pojo
拷贝到taotao-manager-pojo
。
2.2 测试
2.2.1 需求
根据商品id
查询商品信息,返回json
数据。
2.2.2 dao层
查询的表tb_item
,。可以直接使用逆向工程生成的代码。这里我们直接利用逆向工程生成的代码。
2.2.3 service层
接收一个商品id
,调用mapper
查询商品信息,返回商品的pojo
。
ItemServiceImpl.java
package com.taotao.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.taotao.mapper.TbItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemExample;
import com.taotao.pojo.TbItemExample.Criteria;
import com.taotao.service.ItemService;
/**
* 商品查询service
* @author yj
*/
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(Long itemId) throws Exception {
//TbItem item = itemMapper.selectByPrimaryKey(itemId);
TbItemExample example = new TbItemExample();
//创建查询条件
Criteria criteria = example.createCriteria();
criteria.andIdEqualTo(itemId);
List list = itemMapper.selectByExample(example);
//判断list中是否为空
TbItem item = null;
if(list != null && list.size() > 0){
item = list.get(0);
}
return item;
}
}
2.2.4 Controller层
接收一个商品id
,调用service
返回一个商品的pojo
,直接响应pojo
。要返回json
数据需要使用@ResponseBody
。
注意:使用@ResponseBody
时一定要加上jsckson
的包。而uri
地址是/item/{itemId}
。
ItemController.java
package com.taotao.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.pojo.TbItem;
import com.taotao.service.ItemService;
/**
* 商品查询
* @author yj
*/
@Controller
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping("/item/{itemId}")
@ResponseBody
private TbItem getItemById(@PathVariable Long itemId) throws Exception{
TbItem item = itemService.getItemById(itemId);
return item;
}
}
2.2.5 测试
此时启动工程,使用地址http://localhost:8080/item/635906
访问会出现异常org.apache.ibatis.binding.BindingException
。这表示找不到相关的mapper
文件,我们在工程的classes
目录中发现没有mapper
文件。这是因为maven
工程的src/main/java
包中会忽略非java
文件。也就是mapper
包中的xml
文件被忽略了。此时我们需要修改taotao-manager-dao
中的pom
文件,添加如下内容:
src/main/java
**/*.properties
**/*.xml
false
这表示会将此包中的xml
等文件也复制(默认只复制src/main/resources
中的文件)。此时classes
目录中就会有mapper
文件。测试结果为: