【回顾】 Spring MVC

使用@Controller注解项目中的Controller类

使用@RequestMapping可以注解类和方法,并且可以配置接收的请求类型到底是GET或是POST

使用@RequestParam可以注解Controller类中的处理请求的方法的参数,用于请求参数与方法的参数名称不匹配的问题

如果在Controller中还需要访问到其它的被Spring管理的组件,也就是需要声明其它组件,需要被注入值,则还会使用到@Resource注解

接收请求参数
在处理请求的方法中,添加与请求参数名称相同的方法参数即可。

如果请求参数过多,还可以在处理请求的方法中使用实体类的类型作为参数。

转发数据
在处理请求的方法中,添加ModelMap类型的参数,然后将需要转发的数据封装到该参数对象中即可,Spring MVC会实现后续的转发。

处理Session
在处理请求的方法中,添加HttpSession类型的参数,然后通过参数对象获取Session中的数据,或者向Session中封装数据。

重定向
将处理请求的方法的返回值设置为String类型,返回值使用redirect:路径即可。

案例 - 用户管理
1 设定目标
用户通过界面可以注册和登录,注册信息中包括:用户名(username)、密码(password)、手机号码(phone)、电子邮件(email),最终数据将存入到MySQL数据库中,整个项目应该体现MVC的设计理念。

2 开发-1:访问注册页面
a) 创建项目:09-SpringMVC-DAY02-UserManagement

b) 项目的常规操作:添加web.xml,依赖spring-webmvc,添加Tomcat Runtime,复制spring-mvc.xml,检查spring-mvc.xml中的注解扫描和ViewSolver的配置,在web.xml中配置DispatcherServlet

c) 创建register.jsp表示注册页面,在界面中添加1个表单,并在其中添加4个表示4个注册数据的输入框,还需要添加1个表示提交按钮,整个表单将通过POST方式提交,且提交到http://SERVER:PORT/PROJECT/handleRegister.do

d) 设计访问该界面的URL:http://SERVER:PORT/PROJECT/register.do

e) 创建cn.tedu.spring.controller.UserController类,使用@Controller对类进行注解,并添加方法:

@RequestMapping("/register.do")
public String showRegister() {
return “register”;
}
f) 测试:通过(d)设计的网址进行访问,应该可以看到设计的页面,但是提交后出错

2 开发-2:创建数据库与数据表
a) 创建数据库:tedu_ums(User Management System)

b) 使用数据库:use tedu_ums;

c) 创建数据表:t_user

CREATE TABLE t_user (
id INT AUTO_INCREMENT,
username VARCHAR(16) NOT NULL UNIQUE,
password VARCHAR(16) NOT NULL,
phone VARCHAR(16),
email VARCHAR(50),
PRIMARY KEY(id)
);
d) 检查:desc t_user;

2 开发-3:开发持久层
a) 添加依赖:

mysql mysql-connector-java 5.1.37 commons-dbcp commons-dbcp 1.4 b) 在src\main\resources创建数据库的配置文件db.properties:

url=jdbc:mysql://localhost:3306/tedu_ums
driver=com.mysql.jdbc.Driver
user=root
password=root
initSize=2
maxActive=10
c) 在spring-mvc.xml中配置util:properties读取以上配置文件:

<util:properties id=“dbConfig”
location=“classpath:db.properties” />
d) 在spring-mvc.xml中配置数据库连接池的节点:









e) 创建实体类:cn.tedu.spring.bean.User,声明与数据表中对应的5个属性,注意:请把id的类型设置为Integer类型

f) 创建持久层接口:cn.tedu.spring.dao.IUserDao,并设计抽象方法:

/**

  • 增加用户数据
  • @param user
  • @return 新增加的用户的id
    */
    Integer insert(User user);
    g) 创建持久层实现类:cn.tedu.spring.dao.UserDaoImpl,实现以上抽象方法,在类中还需要声明全局变量private BasicDataSource dataSource并使用@Resource注解,然后在重写的方法中:

// 1 声明必要的变量(例如Connection、PreparedStatement、SQL语句的字符串等等)和返回值
// 2 获取连接
// 3 预编译SQL
// 4 执行,如果可以获取返回值,则获取
// 5 处理结果,通常是因为执行的是select或insert,将得到ResultSet
// 6 释放资源
// 7 返回
2 开发-4:测试持久层
a) 添加junit依赖

b) 在src\test\main创建测试类TestUserDao,并添加测试“增加用户”的方法,并使用@Test进行注解:

@Test
public void testInsert() {
}
c) 完成测试方法,测试方法的编写方式与此前编写main方法相同,注意:请为UserDaoImpl补上注解@Repository(“userDao”)

2 开发-5:释放数据库相关资源
a) 为了便于关闭相关对象,并且减少代码量,推荐创建一个新的类,然后在这个类中添加方法用于释放资源,而不是在持久层的操作中编写相关代码。这个类可以创建为:cn.tedu.spring.DBUtils,然后创建相关的释放资源的方法,为了便于调用这些方法,推荐使用static进行修饰:

public class DBUtils {
public static void close(AutoCloseable… obj) {
for (int i = 0; i < obj.length; i++) {
if (obj[i] != null) {
try {
obj[i].close());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
b) 释放连接池资源,在BasicDataSource中有close()方法用于释放资源,则在spring-mvc.xml中配置它时,应该在节点添加destroy-method属性,值为close方法的名称,以使得当项目停止运行时,能及时释放连接池中的资源

2 开发-6:添加业务层
a) 创建业务层接口:cn.tedu.spring.service.IUserService,并添加抽象方法:

/**

  • 注册新用户
  • @param user 新用户的信息
  • @return 新用户的ID,如果注册失败,则返回-1
    */
    Integer register(User user);
    b) 创建业务层实现类:cn.tedu.spring.service.UserServiceImpl,实现以上接口,使用@Service(“userService”)对类进行注解,并添加IUserDao类型的属性,在这个属性上添加@Resource(name=“userDao”)以注入属性值,然后再重写抽象方法,在抽象方法中,直接调用IUserDao的对象的insert()方法即可!

2 开发-7:持久层-查询用户
a) 在持久层接口IUserDao接口中声明抽象方法:

/**

  • 根据用户名查询用户信息
  • @param 用户名
  • @return 查询到的用户数据,如果没有查询到匹配的记录,则返回null
    */
    User findUserByUsername(String username);
    b) 在UserDaoImpl中实现以上抽象方法

c) 单元测试

2 开发-8:业务层-完善注册业务
小结
1 当开发新的内容(没有相关经验)时,如果目标不明确,就做界面。

2 一次只解决一个问题!!!

3 在编写任何代码之前,应该先尽量多的设计好需要做的事情,然后再开始写代码,切记不要没想好就开始写!

4 数据的访问流程应该是:Controller -> Service -> Dao -> DB,如果此次访问的相关功能还没有开发,则开发的流程应该是反向的,即最先完成DB,即数据库中创建库、创建表等操作,然后再开发Dao,再开发Service,最后开发Controller!

5 当在MySQL中创建数据表时,最好先在文本文档中写好代码,然后粘贴到控制台

猜你喜欢

转载自blog.csdn.net/anhldd/article/details/84629667
今日推荐