Spring MVC+JDBC 学习笔记
发布日期:2021-05-07 05:54:39 浏览次数:17 分类:精选文章

本文共 11322 字,大约阅读时间需要 37 分钟。

注解/xml配置

新建工程springmvcdemo即相应的包:

在这里插入图片描述
并将输出路径改为Tomcat的webapps下:
在这里插入图片描述
部署完毕后运行Tomcat,浏览器页面显示“Hello world!”,说明Tomcat工作正常。
在pom.xml中添加mysql、SpringMVC相关等依赖:

4.0.0
com.bit
SpringMVC2
1.0-SNAPSHOT
war
SpringMVC2 Maven Webapp
http://www.example.com
UTF-8
1.7
1.7
junit
junit
4.11
test
mysql
mysql-connector-java
5.1.38
org.springframework
spring-context
5.1.5.RELEASE
org.springframework
spring-core
5.1.5.RELEASE
org.springframework
spring-aop
5.1.5.RELEASE
org.springframework
spring-beans
5.1.5.RELEASE
org.springframework
spring-tx
5.1.5.RELEASE
org.springframework
spring-webmvc
5.1.5.RELEASE
org.springframework
spring-web
5.1.5.RELEASE
javax.servlet
javax.servlet-api
3.0.1
provided
javax.servlet
jstl
1.2
javax.el
javax.el-api
3.0.0
SpringMVC
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2

    首先,写tools包下的DbManager类,该类用来连接数据库:其属性需要username、password、driver、url:

package com.bit.tools;import java.sql.*;//public class DbManager {       public String username="root";    public String password="jdpy1229jiajia";    public String driver="com.mysql.jdbc.Driver";    public String url="jdbc:mysql://localhost:3306/ming";public Connection connection=null;public Statement statement=null;public ResultSet resultSet=null;//无参构造public DbManager(){   }//获取数据库连接public Connection getConnection(){       try {           Class.forName(driver);    } catch (ClassNotFoundException e) {           e.printStackTrace();    }    System.out.println("加载数据库成功");    try {           connection=DriverManager.getConnection(url,username,password);        System.out.println("数据库连接成功");    } catch (SQLException e) {           e.printStackTrace();    }return connection;}//执行全查query all of form user    public ResultSet executeQueryForUser(String sql)    {           connection=this.getConnection();        try {               statement=connection.createStatement();            resultSet=statement.executeQuery(sql);        return resultSet;        } catch (SQLException e) {               e.printStackTrace();        }    return null;}    //关闭连接        public void closeConnection() throws SQLException {               if(resultSet!=null) {                   try {                       resultSet.close();                } catch (SQLException e) {                       e.printStackTrace();                }            }            if(statement!=null)                statement.close();            if(connection!=null)                connection.close();        }    }

    在 resources 下新建 SpringMVC 的配置文件springmvcservlet.xml:

    通过 <context:component-scan base-package=<“com.bit.controller”/> 可以扫描到控制器:

在webapp下新建jsps文件夹,其中新建showuser,jsp:

<%--  Created by IntelliJ IDEA.  User: Lenovo  Date: 2019/8/9  Time: 20:23  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %><%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>>    Title
UserId UserName UserAddr
${ user.userId} ${ user.userName} ${ user.userAddr}

    接下来,在web.xml中配置前端控制器:

Archetype Created Web Application
myspringmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvcservlet.xml
myspringmvc
/

接下来,写Controller,通过@Controller注解的方式:

import com.bit.po.User;import com.bit.service.UserServiceImpl;import com.bit.service.UserServive;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import java.util.List;@Controllerpublic class UserController {//自行维护UserController类与UserService类之间的关系private UserServive userServive=new UserServiceImpl();    //映射@RequestMapping(value="/queryUser")//接收请求,响应并跳转    public ModelAndView queryUser() throws Exception {        List
userList= userServive.queryUserService();ModelAndView modelAndView=new ModelAndView();//通过key与value进行转向modelAndView.addObject("userListKey",userList);//通过视图解析器来解析modelAndView.setViewName("showuser");return modelAndView;}}

在service包中需要一个UserService接口:

package com.bit.service;import com.bit.po.User;import java.util.List;public interface UserServive{   public List
queryUserService() throws Exception;}

在po包中新建User类,该类的属性需要与数据库中的表对应:

package com.bit.po;public class User {       private int userId;    private String userName;    private String userAddr;    //默认的无参构造    public User(){   }    @Override    public String toString() {           return "User{" +                "userId=" + userId +                ", userName='" + userName + '\'' +                ", userAddr='" + userAddr + '\'' +                '}';    }    public int getUserId() {           return userId;    }    public void setUserId(int userId) {           this.userId = userId;    }    public String getUserName() {           return userName;    }    public void setUserName(String userName) {           this.userName = userName;    }    public String getUserAddr() {           return userAddr;    }    public void setUserAddr(String userAddr) {           this.userAddr = userAddr;    }}

在service包中写实现类UserServiceImpl:

package com.bit.service;import com.bit.dao.UserDao;import com.bit.po.User;import java.util.List;public class UserServiceImpl implements UserServive{   private UserDao userDao=new UserDao();    //Service层需要调用dao    @Override    public List
queryUserService() throws Exception { return userDao.queryUserDao(); }}

service层需要调用dao,dao需要访问数据库。在dao包中写UserDao类:

package com.bit.dao;import com.bit.po.User;import com.bit.tools.DbManager;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;//dao层需要访问数据库public class UserDao {       public List
queryUserDao() { List
userList=null; try{ String str="select * from user"; ResultSet resultSet=new DbManager().executeQueryForUser(str); userList=new ArrayList
(); while (resultSet.next()) { User user=new User(); user.setUserId(resultSet.getInt("userid")); user.setUserName(resultSet.getString("username")); user.setUserAddr(resultSet.getString("useraddr")); userList.add(user);} return userList;} catch (Exception ex) { ex.printStackTrace();} return userList; }}

运行Tomcat,浏览器显示结果为:

在这里插入图片描述
    上述代码存在问题:在controller类和service类中都用到了new关键字,应该让Spring容器去创建类、管理类与类之间的关系。拷贝一份UserController2.,并在resources中新建springmvcbeans.xml:
    在web.xml中修改使Spring能扫描到新增加的xml:

classpath:springmvc*.xml

并在springmvcbeans.xml中配置适配器和处理器:

     那么UserContraller2类需要实现Controller接口:

    接下来,在springmvcbeans.xml中声明servive、dao、po等层的bean,需要servive包下的UserServiveImpl类提供getter、setter方法,而不再是在该类中自行new UserDao类,修改UserDao类:

package com.bit.service;import com.bit.dao.UserDao;import com.bit.po.User;import java.util.List;public class UserServiceImpl implements UserServive {       private UserDao userDao;    public UserDao getUserDao() {           return userDao;    }    public void setUserDao(UserDao userDao) {           this.userDao = userDao;    }    @Override    public List
queryUserService() throws Exception { return userDao.queryUserDao(); }}

    同理,UserController2类中不需要new UserServiveImpl,只需要提供setter、getter方法:

修改UserController2类:

package com.bit.controller;import com.bit.po.User;import com.bit.service.UserServiceImpl;import com.bit.service.UserServive;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.List;public class UserController2 implements Controller {       private UserServive userServive;    public UserServive getUserServive() {           return userServive;    }    public void setUserServive(UserServive userServive) {           this.userServive = userServive;    }    public ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception {           List
userList=userServive.queryUserService(); ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("userListKey",userList); modelAndView.setViewName("showuser"); return modelAndView; }}

     那么这时UserController2类中拥有了UserServive属性,可以通过调用setter方法:

    在springmvcbeans.xml中声明servive、dao、po等层的bean,

>

通过XML配置的方式,运行Tomcat,浏览器显示结果为:

在这里插入图片描述

在springmvcservlet.xml中添加:

(!!!!!直接扫描整个com.bit包才行。否则会报500错误。)

    这样Spring就可以扫描到service包,对service包中的UserServiveImpl类使用@Service注解,即可。而接下来需要让Controller找到这个Service,只需在UserController类中加上@Autowired注解。
在这里插入图片描述
     接下来,给dao包下的UserDao类添加@Component注解:
在这里插入图片描述
    UserServiveImpl类调用了UserDao,因此需要在UserDao属性前加@Autowired注解,这时就不再需要UserDao属性的getter、setter方法了: 在这里插入图片描述
配置与注解是不可以混用的。
推荐使用注解。

上一篇:每日总结[2]20191002 MVC/SpringMVC XML配置
下一篇:每日总结[1] 20191001 初识Spring//Beans/控制反转/依赖注入/Date转换

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月21日 03时24分53秒