在互聯(lián)網(wǎng)行業(yè)的項(xiàng)目中盡可能減少表的關(guān)聯(lián)查詢,使用冗余解決表的關(guān)聯(lián)問題。有利于分庫分表
sku:最小庫存單位豪嗽。就是商品 id。就是商品最細(xì)力度的劃分豌骏。每個(gè) sku 都對(duì)應(yīng)一款商品(如:iphone6 16G 白色龟梦、iphone6 16G 黑色)。
mybatis的逆向工程肯适。根據(jù)數(shù)據(jù)庫表生成 java 代碼变秦。
SSM框架整合
1、Dao層
使用mybatis框架框舔,創(chuàng)建SqlMapConfig.xml蹦玫。
創(chuàng)建一個(gè)applicationContext-dao.xml
(1)配置數(shù)據(jù)源
(2)讓spring容易管理SqlSessionFactory,單例存在
(3)把mapper的代理對(duì)象放到spring容器中刘绣。使用掃描包的方式加載mapper的代理對(duì)象
2樱溉、Service層
(1)事務(wù)管理
(2)需要把service實(shí)現(xiàn)類對(duì)象放到spring容器中管理
3、表現(xiàn)層
(1)配置注解驅(qū)動(dòng)
(2)配置視圖解析器
(3)需要掃描controller
4纬凤、web.xml
(1)spring容器的配置
(2)springmvc前端控制器的配置
(3)Post亂碼過濾器
整合思路
需要把配置文件放到 taotao-manager-web 工程下福贞。因?yàn)榇斯こ虨?war 工程,其他的工程只是 jar 包停士。(配置文件是tomcat進(jìn)行讀取挖帘,而jar包中的配置文件tomcat讀取不到完丽,所以不能放在jar包中)
spring 與 springmvc 父子容器的關(guān)系
我們通常使用 spring 與 springmvc 時(shí),都是在 spring 容器中掃描 service拇舀、dao逻族,在 springvc 中掃描 controller,controller依賴service骄崩,但是springmvc本聲明沒有掃描service拿到service對(duì)象聘鳞,通過子父容器管理所以可以訪問父容器的service。
假設(shè)我們將controller的掃描放在spring容器而不是springmvc容器即spring中做全局掃描而springmvc中不做掃描要拂,這樣會(huì)出現(xiàn)404的錯(cuò)誤抠璃,controller必須要放在controller中。
還有一種情況脱惰,當(dāng)我們不考慮系統(tǒng)構(gòu)架的延展性搏嗡,我們可以不使用spring容器,將包的全局掃描放在springmvc中枪芒,即 <context:component-scan base-package="com.taotao" />
這樣也能實(shí)現(xiàn)容器對(duì)象管理彻况。
修改taotao-manager-mapper的pom文件
如果不添加此節(jié)點(diǎn)mybatis的mapper.xml文件都會(huì)被漏掉。
在taotao-manager-mapper的pom文件中添加如下內(nèi)容:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
使用maven的tomcat插件時(shí)Debug
解決方案:
下次啟動(dòng)Debug生效
分頁插件PageHelper
使用方法
1舅踪、引入pageHelper的jar包纽甘,在taotao-manager-mapper的pom文件中添加。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
2抽碌、需要在SqlMapConfig.xml文件中配置插件悍赢。
<!-- 配置分頁插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 設(shè)置數(shù)據(jù)庫類型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數(shù)據(jù)庫-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
3、在查詢的sql語句執(zhí)行之前货徙,添加一行代碼:
PageHelper.startPage(1, 10);
第一個(gè)參數(shù)是page左权,要顯示第幾頁。
第二個(gè)參數(shù)是rows痴颊,沒頁顯示的記錄數(shù)赏迟。
4、取查詢結(jié)果的總數(shù)量蠢棱。
創(chuàng)建一個(gè)PageInfo類的對(duì)象锌杀,從對(duì)象中取分頁信息。
public class TestPageHelper {
@Test
public void testPageHelper() {
//創(chuàng)建一個(gè)spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
//從spring容器中獲得Mapper的代理對(duì)象
TbItemMapper mapper = applicationContext.getBean(TbItemMapper.class);
//執(zhí)行查詢泻仙,并分頁
TbItemExample example = new TbItemExample();
//分頁處理
PageHelper.startPage(2, 10);
List<TbItem> list = mapper.selectByExample(example);
//取商品列表
for (TbItem tbItem : list) {
System.out.println(tbItem.getTitle());
}
//取分頁信息
PageInfo<TbItem> pageInfo = new PageInfo<>(list);
long total = pageInfo.getTotal();
System.out.println("共有商品:"+ total);
}
}
原版本對(duì)逆向工程生成的代碼支持不好糕再,不能對(duì)有查詢條件的查詢進(jìn)行分頁,會(huì)拋異常玉转。這個(gè)版本是修改版(黑馬版)突想。