ssm整合案例(超级详细)

前言:

spring+springmvc+mybatis,称为ssm。ssm可以说是后端程序员必备技能,应该也是目前用得最多的,所以无论如何都要掌握!下面一起来看整合案例。下载源码。
开发环境:
1、开发工具:eclipse 4.7.3
2、maven 3.5.2
3、jdk 1.9
4、tomcat 8.5
5、mysql 5.7.21


欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将文章搬到公众号,以后和公众号文章将同步更新,且上的付费文章在公众号上将免费。


一、项目环境搭建:

1、创建项目:
打开eclipse,file --> new --> maven project --> maven archetype webapp,然后填写好artifactId,点finish即可。若是创建maven项目失败,请参考eclipse创建maven项目失败解决方法
2、创建项目目录结构:
创建好项目以后,按照下图创建项目结构:

图片发自App

注意:项目刚创建出来可能只有src/main/java,自己创建其他的时候是 new source folder,而不是package。
3、添加依赖:
接下来就是添加依赖,本案例需要如下依赖:


    4.0.0
    com.zhu
    ssm
    war
    0.0.1-SNAPSHOT
    ssm Maven Webapp
    http://maven.apache.org
    
        
            junit
            junit
            4.12
            test
        


        
        
            org.springframework
            spring-core
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-beans
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-context
            4.3.14.RELEASE
        


        
        
            org.springframework
            spring-jdbc
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-tx
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-web
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-webmvc
            4.3.14.RELEASE
        

        
        
            org.springframework
            spring-test
            4.3.14.RELEASE
            test
        

        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        

        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.8.7
        

        
        
            commons-collections
            commons-collections
            3.2
        

        
        
            org.mybatis
            mybatis
            3.4.2
        

        
        
            org.mybatis
            mybatis-spring
            1.3.1
        

        
        
            mysql
            mysql-connector-java
            5.1.37
        

        
        
            com.mchange
            c3p0
            0.9.5.2
        


>>  
    
        ssm
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                3.6.1
            
        
    

4、完成各项配置:
添加好依赖之后,就来完成jdbc数据源、mybatis和spring 的配置:

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=#
jdbc.password=#

mybatis-config.xml




    
    
        
        

        
        

        
        
    

    
    


src/main/resource/spring下有如下三个配置文件,分别配置dao层,service层,controller层:
spring-dao.xml

    
    
        
    
    
    
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    

    
    
        
        
        
        
        
        
        
    

    
    
        
        
    


spring-service.xml


    
        
    
    
    
    
    
        
    
    
    
    
    

spring-web.xml



    
    
    
    


注意:spring-web.xml中还可以配置视图解析器、文件上传器、静态资源的处理等,因为本案例未涉及这些内容,所以没有配置。
5、对web.xml进行配置
需要在web.xml中进行如下配置,让web容器能够加载到spring的配置文件:




  Archetype Created Web Application
  
        spring-dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring/spring-.xml
        
    
    
        spring-dispatcher
        /
    

至此,就完成了环境的搭建了,接下来就可以进行代码的编写了!

二、分层编写代码:

1、entity层:
User.java

public class User {
    private Integer userId;
    private String userName;
    private Integer age;
    private Card card;//一个人一张身份证,1对1
    private List mobilePhone;//土豪,多个手机,1对多
}

Card.java

public class Card {
    private Integer cardId;
    private String cardNum;//身份证号
    private String address;//地址
}

MobilePhone.java

public class MobilePhone {
    private Integer mobilePhoneId;
    private String brand;//品牌
    private double price;//价格
    private User user;//主人
}

注意:以上实体类均省略了set和get方法。
2、数据库设计:
借助数据库客户端工具navicat进行数据库以及表的创建。

图片发自App

tb_mobile_phone中以user_id作为外键关联tu_user,tb_user中以card_id作为外键关联tb_card。

3、dao层:
UserDao.java

/**
     * 带条件分页查询:
     *     可输入的条件:名字(模糊),cardId,age,
     * @param userCondition 把条件封装成一个user对象
     * @param rowIndex 表示从第几行开始取数据
     * @param pageSize 表示要返回多少行数据
     * @return 返回user列表
     */
    List queryUserList(@Param("userCondition") User userCondition, @Param("rowIndex") int rowIndex,
            @Param("pageSize") int pageSize);

UserDao.xml





    
          
          
          
          
            
            
            
          
          
            
            
            
          
    
    
    
    
    
 

dao层的带条件分页查询用到了mybatis的动态sql,对动态sql不熟悉的请参考:mybatis笔记整理
养成良好习惯,写完dao应该做个Junit测试:

图片发自App

BaseTest.java

/**
 * 初始化spring各项配置的
 * @author zhu
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml","classpath:spring/spring-service.xml"})
public class BaseTest {
    

}

注意:BaseTest.java是用来加载spring配置文件的。
UserDaoTest.java

public class UserDaoTest extends BaseTest {
    @Autowired
    private UserDao userDao;
    
    
    @Test
    public void testQueryUserList() {
        User userCondition = new User();
        /*Card c = new Card();
        c.setCardId(2);
        userCondition.setCard(c);*/
        //userCondition.setAge(22);
        userCondition.setUserName("菲");
        List ul = userDao.queryUserList(userCondition, 1, 99);
        for(User user : ul) {
            System.out.println(user.getUserName());
            /*List list = new ArrayList<>();
            list = user.getMobilePhone();
            for(MobilePhone mp : list) {
                System.out.println(mp.getBrand());
            }*/
        }
    }
    
}

userCondition设置了userName一个"菲"字,就是模糊查询名字中带"菲"字的用户。
先看数据库表中的数据:

图片发自App

数据表中名字带"菲"字的用户只有"刘亦菲",正常运行的话应该输出"刘亦菲"。
再看运行结果:

图片发自App

在控制台输出了"刘亦菲",符合预期,测试通过。

4、service层:
UserService.java

public interface UserService {
    
    
    /**
     * 带条件分页查询:
     *     可输入的条件:名字(模糊),cardId,age,
     * @param userCondition 把条件封装成一个user对象
     * @param rowIndex 表示从第几行开始取数据
     * @param pageSize 表示要返回多少行数据
     * @return 返回user列表
     /
    List queryUserList(@Param("userCondition") User userCondition, @Param("rowIndex") int rowIndex,
            @Param("pageSize") int pageSize);
    
    
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserDao userDao;

    
    @Override
    public List queryUserList(User userCondition, int rowIndex, int pageSize) {
        // TODO Auto-generated method stub
        return userDao.queryUserList(userCondition, rowIndex, pageSize);
    }

    
}

由于service层只是简单的调用了dao层,这里不再做Junit测试。

5、controller层:
UserController.java

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/listusers", method = RequestMethod.GET)
    @ResponseBody
    public Map listUsers() {
        Map modelMap = new HashMap<>();
        User userCondition = new User();
        List userList = userService.queryUserList(userCondition, 1, 99);
        modelMap.put("userList", userList);
        return modelMap;
    }

}

至此,已完成所有代码。接下来,在浏览器输入:
localhost:8080/ssm/user/listusers
在页面就可以看到访问结果了:

图片发自App

注意:
图片中有几个值为null,是因为查询UserDao.xml中写查询语句时并没有查这几个字段,自己加上就行了。

总结:

常见问题:
1、做测试的时候一定要在BaseTest中加载spring 配置文件,其他test在继承BaseTest。
2、一定不要忘记web.xml中的配置,且路径一定要写对,否则web容器加载不到spring 配置文件,访问controller时会报404错误。
3、由于tb_user中的card_id作为外键关联了tb_card,所以为user设置card时,cardId一定得是tb_card中存在的,否则会报错,user_id也是tb_mobile_phone的外键,同样的道理。

以上内容属于个人笔记整理,如果错误,欢迎大家批评指正!

你可能感兴趣的:(ssm整合案例(超级详细))