spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL

目录结构:

contents structure [-]

SpringMVC是什么

MVC的全称是Model View Controller,通过实现MVC框架可以很好的数据、视图、业务逻辑进行分离。Spring MVC也是一种MVC框架,它是SpringFrameWork的后续产品,同样需要Spring的Jar包才能运行起来。

SpringMVC工作原理

SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的就是DispatcherServlet,DispathcerServlet负责将每一个request转发到相应的Controller,Controller处理后再返回模型(Model)和视图(View)。在使用注解的SpringMVC中,处理器Controller是基于@Controller和@RequestMapping进行注解的。

54ab7cfb299bbd95a56bfbc0f3c6c588.png

@Controller和@RequestMapping注解

@Controller注解类型

声明一个控制器类,DispatcherServlet会通过扫描机制找到该类,如下是一个@Controller的例子。

packagecom.example.controller;importorg.springframework.stereotype.Controller;

@Controllerpublic classProductController {

}

为了保证DispatcherServlet能够扫描到该Controller,需要在DispatcherServlet中配置注解驱动和上下文扫描包。

上下文扫描包:

……

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

……

注解驱动包:

……

xmlns:mvc=http://www.springframework.org/schema/mvc

……

然后应用和元素:

......

......

@RequestMapping注解类型

该注解类型在控制器类的内部定义每一个动作相应的处理方法,一个采用@RequestMapping注释的方法将成为一个请求处理方法,并由调度程序在接收到对应的URL请求时调用,下面是一个RequestMapping注解方法的控制器类。

@Controllerpublic classProductController {

@RequestMapping(value="/productInput")publicString inputProduct(){//do something here

return "ProductForm";

}

}

使用requestMapping注解的value属性将URL映射到方法,在上面的例子中通过 http://localhost:8080/SpringMVC/productInput访问inputProduct方法。RquestMapping除了有value属性外,还有许多属性,比如method、consumes、header、path等等。例如当HTPP POST或PUT方法时才调用test()方法。

@RequestMapping(value="/order_process", method={RequestMethod.POST, RequestMethod.PUT})publicString test(){//do something here

return "viewpage";

}

如果method属性只有一个HTTP方法值,则无需{},直接为method=RequestMethod.POST,如果未指定method属性,则请求处理方法可以处理任意HTTP方法。此外RequestMapping注释类型也可以用来注释一个控制器类。

importorg.springframework.stereotype.Controller;

...

@Controller

@RequestMapping(value="/customer")public classCustomerController{

@RequestMapping(value="/delete", method={RequestMethod.POST, RequestMethod.PUT})publicString deleteCustomer(){//do something here

return“viewpage”;

}

}

在这种情况下,所有的方法都将映射为相对于类级别的请求,如例子中的deleteCustomer方法,由于控制器类映射使用"/customer",而deleteCustomer方法映射为"/delete",则需要通过 http://localhost:8081/SpringMVC/customer/delete 访问。

基于注解的SpringMVC+MySQL

项目目录结构:

c6343154c3890c12b202ce55e58cbab7.png

login.jsp类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

login

8

9

10

11

12

13

14

login.jsp

第二步:

web.xml类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

2

3 mydb2

4

5 welcome.html

6

7

8

9

10 spring

11 org.springframework.web.servlet.DispatcherServlet

12

13

14 spring

15 *.do

16

17

18

19

20 EncodingName

21 org.springframework.web.filter.CharacterEncodingFilter

22

23 encoding

24 utf-8

25

26

27

28 EncodingName

29 /*30 31

32

web.xml

spring-servlet.xml类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

2

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

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

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

6 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd

7 http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

8 http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsd">

9

10

11

12

13

14

15

16

17

18

19 classpath:db-config.properties

20

21

22

23

24

25

26

27 ${db.dirverClass}

28

29

30 ${db.url}

31

32

33 ${db.username}

34

35

36 ${db.password}

37

38

39

40

44

45

46

47

48

52

53

54

55

56

57

58

59 org.springframework.web.servlet.view.InternalResourceView

60

61

62

63 /view/

64

65

66

67 .jsp

68

69

70

spring-servlet.xml

db-config.properties类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

db.url=jdbc:mysql:///test?characterEncoding=utf8&useSSL=true&serverTimezone=GMT

db.username=root

db.password=root

db.dirverClass=com.mysql.cj.jdbc.Driver

db-config.properties

这里的Driver和版本有关系,笔者的Connection/j 是6.0.5的。

UserVO.java类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.spring.model;2

3 public classUserVO {4 private intid;5 privateString name;6 privateString pwd;7

8 public intgetId() {9 returnid;10 }11 public void setId(intid) {12 this.id =id;13 }14 publicString getName() {15 returnname;16 }17 public voidsetName(String name) {18 this.name =name;19 }20 publicString getPwd() {21 returnpwd;22 }23 public voidsetPwd(String pwd) {24 this.pwd =pwd;25 }26 }

UserVO.java

UserDao.java类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.spring.db;2

3 importjava.sql.ResultSet;4 importjava.sql.SQLException;5 importjava.util.List;6

7 importorg.springframework.jdbc.core.JdbcTemplate;8 importorg.springframework.jdbc.core.RowMapper;9

10 importcom.spring.model.UserVO;11

12 public classUserDao {13 privateJdbcTemplate jdbcTemplate;14

15 publicJdbcTemplate getJdbcTemplate() {16 returnjdbcTemplate;17 }18

19 public voidsetJdbcTemplate(JdbcTemplate jdbcTemplate) {20 this.jdbcTemplate =jdbcTemplate;21 }22 @SuppressWarnings({ "unchecked", "rawtypes"})23 public Listfind(){24 String sql="select * from userbo";//这里也可以添加查询限制条件

25 return jdbcTemplate.query(sql, newRowMapper(){26

27 public Object mapRow(ResultSet rs, int num) throwsSQLException {28 UserVO uservo=newUserVO();29 uservo.setId(rs.getInt("USERID"));30 uservo.setName(rs.getString("USERNAME"));31 uservo.setPwd(rs.getString("USERPSW"));32 returnuservo;33 }34 });35 }36 }

UserDao.java

这儿的jdbcTemplate不能用注解@Autowired来指定,因为在spring-servlet.xml文件中已经指定了扫描包为"com.spring",而jdbcTemplate的包为“org.springframework.jdbc.core.JdbcTemplate”,所以会扫描不到JdbcTemplate的。在spring-servlet.xml已经通过bean的方式,将数据源注入JDBC模板。

LoginController.java类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.spring.controller;2

3 importjava.util.HashMap;4 importjava.util.List;5 importjava.util.Map;6

7 importorg.springframework.beans.factory.annotation.Autowired;8 importorg.springframework.stereotype.Controller;9 importorg.springframework.web.bind.annotation.RequestMapping;10 importorg.springframework.web.servlet.ModelAndView;11 importcom.spring.db.UserDao;12 importcom.spring.model.UserVO;13

14 @Controller15 public classLoginController {16

17 @Autowired18 privateUserDao userDao;19 @SuppressWarnings("unchecked")20

21 @RequestMapping(value="/select.do")22 publicModelAndView selectAll(){23

24 @SuppressWarnings("rawtypes")25 Map model=newHashMap();26

27 List userVO=userDao.find();28

29 model.put("uservo", userVO);30

31 return new ModelAndView("userInfo",model);32 }33 }

LoginController.java

@Autowired根据字面意思可以很快理解,就是自动配置。有@Autowired注解的变量,会按照扫描路径进行查找文件并且自动配置信息。如果把userDao的注解@Autowired注解注释掉,也可以通过bean来实现相同的效果,首先在LoginController类里把userDao进行setter,如:

public voidsetUserDao(UserDao userDao) {this.userDao =userDao;

}

然后再在spring-servlet.xml里面添加如下bean信息:

userInfo.jsp类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2

3

4 @SuppressWarnings("unchecked")5 /*

6 *这儿是合法的,根据com.spring.db.controller.LoginController中handleRequest的返回数据类型进行设置的。7 */

8 List str= (List)request.getAttribute("uservo");9 %>

10

11

12

13

result

14

15

16

17

18

19

编号

20

姓名

21

年龄

22

23

24 for(UserVO user:str){25 %>

26

27

28

29

30

31

32 }33 %>

34

35

36

userInfo.jsp

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值