实战day01(六)----ssm框架整合

一、数据库

1、在mysql数据库中创建数据库e3mall

2、将创建数据库的脚本导入到e3mall中。

脚本

互联网项目尽可能实现单表查询。单表很容易做缓存。

二、逆向工程

逆向工程

使用mybatis官方提供的mybatis-generator生成pojo、mapper接口及映射文件。

将mapper接口及映射文件放到e3-manager-dao工程中。cn.e3mall.pojo放到e3-manager-pojo工程中;cn.e3mall.mapper放到e3-manager-dao工程中。

三、整合思路

1、Dao层:

Mybatis的配置文件:SqlMapConfig.xml

不需要配置任何内容,需要有文件头。文件必须存在。

applicationContext-dao.xml:

mybatis整合spring,通过由spring创建数据库连接池,spring管理SqlSessionFactory、mapper代理对象。配一个扫描包。需要mybatis和spring的整合包。

2、Service层:

applicationContext-service.xml:

所有的service实现类都放到spring容器中管理。并由spring管理事务。

3、表现层:

Springmvc框架,由springmvc管理controller。

Springmvc的三大组件。

E3-manager-dao、e3-manager-interface、e3-manager-pojo、e3-manager-service将来都会打成jar包放在web-inf的lib目录下。所以,我们的配置文件放在e3-manager-web的src/main/resources下。建两个包mybatis和spring。

实战day01(六)----ssm框架整合_第1张图片

四、dao整合

4.1 创建SqlMapConfig.xml

实战day01(六)----ssm框架整合_第2张图片






4.2 Spring整合mybatis

创建applicationContext-dao.xml

实战day01(六)----ssm框架整合_第3张图片

applicationContext-dao.xml




	
	
	
	
	
		
		
		
		
		
		
	
	
	
		
		
		
		
	
	
	
		
	

在resources下面创建conf目录,并创建db.properties文件

实战day01(六)----ssm框架整合_第4张图片

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/e3mall?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

在applicationContext-dao.xml中有一个包扫描的配置。它扫描的是哪个包呢?

如下图,在e3-manager-dao工程中有cn.e3mall.mapper包。这个工程会打成jar包,放在web工程的lib库里,那么其路径也是classpath。所以,扫描的是dao工程下的mapper包。

实战day01(六)----ssm框架整合_第5张图片

备注:

Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。

五、service整合

5.1 管理Service

在spring目录下创建applicationContext-service.xml文件

实战day01(六)----ssm框架整合_第6张图片


	
	

这里的包扫描器,扫描哪个包呢?

在这里创建一个包

实战day01(六)----ssm框架整合_第7张图片

这里也建一个包

实战day01(六)----ssm框架整合_第8张图片

impl是子包,子包也能访问到。

5.2 事务管理

创建applicationContext-trans.xml

实战day01(六)----ssm框架整合_第9张图片


	
	
		
		
	
	
	
		
			
			
			
			
			
			
			
			
			
			
		
	
	
	
		
	

上面的表达式:pointcut="execution(*cn.e3mall.service..*.*(..))"。Service后面跟两个点才能扫描到子包。

六、web层整合

6.1 创建springmvc.xml

实战day01(六)----ssm框架整合_第10张图片



	
	
	
		
		
	

Springmvc和spring的其他配置文件有一点不一样。就是,在springmvc的头部有一个:

xmlns:mvc=http://www.springframework.org/schema/mvc

建立包扫描所要扫描的包

实战day01(六)----ssm框架整合_第11张图片

6.2 web.xml



	e3-manager
	
		index.jsp
	

	
	
		contextConfigLocation
		classpath:spring/applicationContext-*.xml
	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		CharacterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			utf-8
		
	
	
		CharacterEncodingFilter
		/*
	

	
	
		e3-manager
		org.springframework.web.servlet.DispatcherServlet
		
		
			contextConfigLocation
			classpath:spring/springmvc.xml
		
		1
	
	
		e3-manager
		/
	

七、整合测试

7.1 需求

根据商品id查询商品信息,返回json数据。

7.2 Dao层

由于是单表查询可以使用逆向工程生成的代码。

7.3 Service层

先建interface:

实战day01(六)----ssm框架整合_第12张图片

参数:商品id

返回值:TbItem

业务逻辑:根据商品id查询商品信息。

实战day01(六)----ssm框架整合_第13张图片
/**
 * 商品管理Service
 *
 */
@Service
public class ItemServiceImpl implements ItemService {

	@Autowired
	private TbItemMapper itemMapper;

	@Override
	public TbItem getItemById(long id) {
		TbItem tbItem = itemMapper.selectByPrimaryKey(id);
		return tbItem;
	}
}

7.4 controller

实战day01(六)----ssm框架整合_第14张图片

/**
 * 商品管理controller
 *
 */
@Controller
public class ItemController {

	@Autowired
	private ItemService itemService;

	@RequestMapping("/item/{itemId}")
	@ResponseBody
	private TbItem getItemById(@PathVariable Long itemId) {
		TbItem tbItem = itemService.getItemById(itemId);
		return tbItem;
	}
}

@ResponseBody用于获取json。它所注释的方法要返回一个pojo,它会自动的pojo转成json。前提是jackson包加进来了。如果没有Jackson就会报406错误。我们的工程里面Jacksoncommon依赖,

实战day01(六)----ssm框架整合_第15张图片

这两个名称要一直,就可以自动转换了。如果不一致,那么就要如下:

实战day01(六)----ssm框架整合_第16张图片

运行项目

访问:http://localhost:8080/item/860275

7.5 解决mapper绑定异常

实战day01(六)----ssm框架整合_第17张图片

此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的。由于maven工程在默认情况下src/main/java目录下的mapper文件是不发布到target目录下的。

解决方法

在e3-manager-dao工程的pom文件中添加如下内容:



	
		
			src/main/java
			
				**/*.properties
				**/*.xml
			
			false
		
	

访问成功。

源码

你可能感兴趣的:(实战项目)