JAVA 三个框架结合运用思路_SSM框架的整合与使用——实现简单的转账系统

一、整合思路

SSM框架即SpringMVC + Spring + MyBati框架集,是一种轻量级的Web开源框架。它们各自在JAVA三层架构中负责的模块如下图所示:

953cbb77f225800e0bd04ceabe760089.png

其中,SpringMVC与Spring之间本就存在包含关系,所以它们之间并不需要整合,只需要在web.xml中配置使用即可。而SpringMVC并不和MyBatis直接交互,因此它们之间也不需要进行配置。只有Spring和MyBatis二者之间,我们需要用Spring来将MyBatis整合进来。

因此,我们只需要对web.xml和Spring的配置文件进行一些额外的配置即可。

下面,我们通过实现一个简单的转账系统,来展示SSM框架的整合和使用。

二、SSM框架整合

首先新建一个JavaWeb项目,导入SpringMVC、Spring、MyBatis三个框架的jar包和它们之间整合所需要的jar包。

19db3cf483a9768fda003eada006fe7b.png

在src目录下创建controller、dao、service、pojo四个包,分别用来存放控制层、持久层、业务层、普通java类的代码。

eedc1d1bf610797f4e6cac95616a25f3.png

配置web.xml,使项目加载SpringMVC和Spring。

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 SSM

4

5 index.html

6 index.htm

7 index.jsp

8 default.html

9 default.htm

10 default.jsp

11

12

13

14 SpringMVC

15 org.springframework.web.servlet.DispatcherServlet

16 1

17

18

19

20 SpringMVC

21 /

22

23

24

25 org.springframework.web.context.ContextLoaderListener

26

27

28

29 contextConfigLocation

30 classpath:applicationContext.xml

31

32

33

34 characterEncodingFilter

35 org.springframework.web.filter.CharacterEncodingFilter

36

37 encoding

38 UTF-8

39

40

41

42 characterEncodingFilter

43 /*

44

45

在WEB-INF中创建SpringMVC配置文件SpringMVC-servlet.xml(也可以将配置文件放到其他位置,但需要在web.xml中指明配置文件的路径)和jsp文件夹,jsp文件夹用来存放jsp页面。

b3f32bb8a7f1935959acebb86fcd50b5.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xmlns:context="http://www.springframework.org/schema/context"

5 xsi:schemaLocation="6 http://www.springframework.org/schema/beans7 http://www.springframework.org/schema/beans/spring-beans.xsd8 http://www.springframework.org/schema/context9 http://www.springframework.org/schema/context/spring-context.xsd">

10

11

12

13

14

15

16

17

在src目录下创建Spring的配置文件applicationContext.xml(文件路径在web.xml中指定),配置Spring并加载MyBatis。

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xmlns:context="http://www.springframework.org/schema/context"

5 xmlns:tx="http://www.springframework.org/schema/tx"

6 xsi:schemaLocation="http://www.springframework.org/schema/beans7 https://www.springframework.org/schema/beans/spring-beans.xsd8 http://www.springframework.org/schema/context9 http://www.springframework.org/schema/context/spring-context.xsd10 http://www.springframework.org/schema/tx11 http://www.springframework.org/schema/tx/spring-tx.xsd">

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

在dao包里创建MyBatis的配置文件mybatis-config.xml(文件路径在Spring配置文件中指定),指明MyBatis映射文件的路径。

1 <?xml version="1.0" encoding="UTF-8"?>

2 "http://mybatis.org/dtd/mybatis-3-config.dtd">

5

6

7

8

9

在dao包中创建MyBatis的映射文件UserMapper.xml,用来后面实现转账系统时使用。

到了这里,SSM框架环境就已经搭建完成了,可以开始编写代码来实现转账系统了。整合后总的目录结构如下所示:

fee8db8d057b9ca9cf0295bb5cf99f3e.png

三、转账系统实现

我们要实现的转账系统很简单,该系统具体的操作流程就是“注册——登录——转账”,用户注册后,默认有100元的余额,然后就可以登陆系统,给指定的用户转账。虽然系统简单,但包含了SSM框架中最基础的部分。

1、实现持久层

经过分析,我们要实现这样的转账系统,首先需要一个记录用户信息的表,因此我们在数据库中,创建一个user库和一个user表,表定义如下:

1 CREATE TABLE `user` (2 `id` int(11) NOT NULLAUTO_INCREMENT,3 `username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,4 `password` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,5 `sum` int(11) NOT NULL DEFAULT 100,6 PRIMARY KEY(`id`) USING BTREE7 ) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

并插入几条初始数据。

41437a36cba820fb4d3d5ff37fb1fc8f.png

在pojo包中,创建一个跟user表字段对应的类User.java,便于我们传递数据。

1 packagepojo;2

3 public classUser {4

5 private intid;6

7 privateString username;8

9 privateString password;10

11 private intsum;12

13 public intgetId() {14 returnid;15 }16

17 public void setId(intid) {18 this.id =id;19 }20

21 publicString getUsername() {22 returnusername;23 }24

25 public voidsetUsername(String username) {26 this.username =username;27 }28

29 publicString getPassword() {30 returnpassword;31 }32

33 public voidsetPassword(String password) {34 this.password =password;35 }36

37 public intgetSum() {38 returnsum;39 }40

41 public void setSum(intsum) {42 this.sum =sum;43 }44

45 @Override46 publicString toString() {47 return "User [id=" + id + ", username=" + username + ", password=" + password + ", sum=" + sum + "]";48 }49

50 }

在前面创建的MyBatis映射文件UserMapper.xml中,写好需要的SQL语句。

1 <?xml version="1.0" encoding="UTF-8"?>

2 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7 select * from user where username = #{username} and password = #{password}8

9

10 select * from user where username = #{username}11

12

13 insert into user (username,password) values (#{username},#{password})14

15

16 update user set sum = #{sum} where username = #{username}17

18

在dao包中创建UserDao.java接口,编写MyBatis映射接口。

1 packagedao;2

3 importorg.apache.ibatis.annotations.Mapper;4

5 importpojo.User;6

7 @Mapper8 public interfaceUserDao {9

10 publicUser selectUserByNameAndPass(User user);11

12 public intaddUser(User user);13

14 publicUser selectUserByName(User user);15

16 public intupdateSumByName(User user);17 }

到这里持久层就编写完成了,此时的目录结构如下:

f9656da5c8501737d6afc5abe92e3b03.png

2、实现业务层

经过分析,该系统需要实现的业务有三个,分别是“登录”、“注册”和“转账”。我们可以在service包下创建UserService.java类,用三个方法来实现这些业务。代码如下:

1 packageservice;2

3 importjavax.servlet.http.HttpSession;4

5 importorg.springframework.beans.factory.annotation.Autowired;6 importorg.springframework.stereotype.Service;7 importorg.springframework.transaction.annotation.Transactional;8

9 importdao.UserDao;10 importpojo.User;11

12 @Service13 public classUserService {14

15 @Autowired16 privateUserDao userDao;17

18 @Autowired19 privateHttpSession httpSession;20

21 public booleanlogin(User user) {22 //验证账号密码

23 user =userDao.selectUserByNameAndPass(user);24 if (user == null) {25 return false;26 }27 //设置Session

28 httpSession.invalidate();29 httpSession.setAttribute("username", user.getUsername());30 return true;31 }32

33 public booleanregister(User user) {34 //检查用户名是否重复

35 if (userDao.selectUserByName(user) != null) {36 return false;37 }38 userDao.addUser(user);39 return true;40 }41

42 @Transactional43 public booleantransfer(User user_in) {44 //检查是否自己向自己转账

45 if (((String) httpSession.getAttribute("username")).equals(user_in.getUsername())) {46 return false;47 }48 //检查转账金额是否为正数

49 int transferSum =user_in.getSum();50 if (transferSum <= 0) {51 return false;52 }53 //检查转账目标用户是否存在

54 user_in =userDao.selectUserByName(user_in);55 if (user_in == null) {56 return false;57 }58 //检查用户是否有足够的余额进行转账

59 User user_out = newUser();60 user_out.setUsername((String) httpSession.getAttribute("username"));61 user_out =userDao.selectUserByName(user_out);62 int remainSum = user_out.getSum() -transferSum;63 if ( remainSum < 0) {64 return false;65 }66 //开始转账

67 user_out.setSum(remainSum);68 userDao.updateSumByName(user_out);69 user_in.setSum(user_in.getSum() +transferSum);70 userDao.updateSumByName(user_in);71 return true;72 }73 }

三、实现控制层

跟业务层一样,控制层也需要三个控制器来调用业务层。我们在controller包中创建UserController.java类,同样需要编写三个方法,代码如下:

1 packagecontroller;2

3 importorg.springframework.beans.factory.annotation.Autowired;4 importorg.springframework.stereotype.Controller;5 importorg.springframework.web.bind.annotation.RequestMapping;6

7 importpojo.User;8 importservice.UserService;9

10 @Controller11 public classUserController {12

13 @Autowired14 privateUserService userService;15

16 @RequestMapping("/login")17 publicString login(User user) {18 if(!userService.login(user)) {19 return "LoginError";20 }21 return "Transfer";22 }23

24 @RequestMapping("/register")25 publicString register(User user) {26 if(userService.register(user)) {27 return "RegisterSuccess";28 }29 return "RegisterError";30 }31

32 @RequestMapping("/transfer")33 publicString transfer(User user) {34 if(userService.transfer(user)) {35 return "TransferSuccess";36 }37 return "TransferError";38 }39 }

4、实现视图层

根据控制层中的定义,我们总共需要编写七个jsp页面,分别如下:

登录注册页面login.jsp:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

登录

8

9

10

11

12

13 用户名:

14

15

16

17 密码:

18

19

20

21

22

23

24

25

26

登录失败页面LoginError.jsp:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

登录失败

8

9

10 用户名或密码错误!11

12

登录成功后的转账页面Transfer.jsp:

1

2 pageEncoding="UTF-8"%>

3

4

5

6

7

转账

8

9

10

11

12

13 欢迎你!${user.username}

14

15

16 用户名:

17

18

19

20 金额:

21

22

23

24

25

26

27

28

29

30

注册失败页面RegisterError.jsp:

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6 pageEncoding="UTF-8"%>

7

8

注册失败

9

10

11 注册失败!12

13


版权声明:本文为weixin_34579167原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。