SSM重新学习总结
概述
SSM是Spring MVC、Spring、Mybatis三大框架的综合,SpringMVC负责Web层(具体表现为Controller),Spring负责整合与业务层(具体表现为Service,包括接口和实现),Mybatis负责数据访问层(具体表现为Dao),在实际使用中通常可与Maven配合使用
配置与使用
1、pom.xml中依赖导入
1 |
|
2、在web模块中配置web.xml
1 |
|
3、在web模块中配置spring-mvc.xml
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
4、在web模块中配置applicationContext.xml
1 |
|
5、在web模块中配置db.properties
1 | com.mysql.cj.jdbc.Driver = |
6、在web模块中配置log4j.properties
1 | #you cannot specify every priority with different file for log4j |
7、在web模块中配置spring-security.xml
1 |
|
7、编写其它代码
在domain模块编写实体类
可使用@DateTimeFormat(pattern="yyyy-MM-dd'T'HH:mm")进行日期的解析,当从html中获取的日期类型与Spring框架和默认格式不一样时可使用该注解进行解析
1
2
private Date departureTime;实体类中的成员变量的数量并不是必须和数据库中对应表的列数完全一样,例如:
在用户的实体类中,有变量 status可取值0(关闭)、1(开启),则可以使用String statusStr用来表示status对应的状态,在get方法中根据status进行判断返回对应的字符串,从而在前端取值时可直接使用statusStr获取对应的字符串,而不用再进行判断取值
1
2
3
4public String getStatusStr() {
StatusStr=(status==0)?"未开启":"开启";
return StatusStr;
}在用户的实体类中,可能一个用户有多种角色,所以,可能需要使用一个List< Role > roles代表,而该成员变量的值,如果需要的话可以在dao层中使用多表查询或其它方式进行获取赋值
在dao模块中编写IxxxDao接口,由于使用Mybatis可以不用写具体实现
涉及常用注解:@Repository("userDao"),其中userDao是命名,在其它地方使用时可直接使用userDao,若不命名,默认则是类名首字母变小写
1
2
private IUserDao userDao;关联查询中的一对一,例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/**
* 查询订单
* @return
* @throws Exception
*/
List<Orders> findAll() throws Exception;关联查询中的一对多,例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* 根据用户id查询出所有对应的角色
* @param userId
* @return
*/
List<Role> findByUserId(String userId);
在service模块编写IxxxService接口和xxxServiceImpl实现类,在实现类中使用注解
service层中常用注解:
- @Service("userService"):与dao层的@Repository作用类似;
- @Transactional::用户事务控制,对应的在applicationContext.xml中进行配置
若涉及到用户登录时的密码加密的可:
1
2
3
4
5
6
7
8private BCryptPasswordEncoder bCryptPasswordEncoder;
public void save(UserInfo user) throws Exception {
// 密码加密,每次加密结果不同
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
System.out.println(bCryptPasswordEncoder.encode("admin"));
userDao.save(user);
}
在web模块编写xxxController
- 常用注解:
- @Controller:与@Service类似
- @RequestMapping("/user"):地址匹配
- @Secured("ROLE_ADMIN"):用户权限控制
- 注意,Controller中如果涉及到反射获取方法的,如AOP日志配置中的获取方法,不可使用Model model变量,int需用Integer替代,否则会报错NoSuchMethod,具体原因暂时还不清楚,所以通常涉及到变量赋值时,最好还是使用ModelAndView的方式
- 常用注解:
将代码中涉及到的一些工具类在utils模块中进行编写
如使用maven中tomcat插件,需要先clean再install再tomcat:run