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。
创建applicationContext-dao.xml
applicationContext-dao.xml
在resources下面创建conf目录,并创建db.properties文件
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包。
备注:
Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。
在spring目录下创建applicationContext-service.xml文件
这里的包扫描器,扫描哪个包呢?
在这里创建一个包
这里也建一个包
impl是子包,子包也能访问到。
创建applicationContext-trans.xml
上面的表达式:pointcut="execution(*cn.e3mall.service..*.*(..))"。Service后面跟两个点才能扫描到子包。
Springmvc和spring的其他配置文件有一点不一样。就是,在springmvc的头部有一个:
xmlns:mvc=http://www.springframework.org/schema/mvc
建立包扫描所要扫描的包
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
/
根据商品id查询商品信息,返回json数据。
由于是单表查询可以使用逆向工程生成的代码。
先建interface:
参数:商品id
返回值:TbItem
业务逻辑:根据商品id查询商品信息。
/**
* 商品管理Service
*
*/
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(long id) {
TbItem tbItem = itemMapper.selectByPrimaryKey(id);
return tbItem;
}
}
/**
* 商品管理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错误。我们的工程里面Jackson被common依赖,
这两个名称要一直,就可以自动转换了。如果不一致,那么就要如下:
运行项目
访问:http://localhost:8080/item/860275
此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的。由于maven工程在默认情况下src/main/java目录下的mapper文件是不发布到target目录下的。
解决方法
在e3-manager-dao工程的pom文件中添加如下内容:
src/main/java
**/*.properties
**/*.xml
false
访问成功。
源码