Spring MVC + JDBC 实现数据库操作
来源:互联网 发布:logo软件中文版下载 编辑:程序博客网 时间:2024/06/01 07:21
这段时间研究了下Spring,确实很强大,对于数据库的操作也学习了一下,以JDBC为切入点,先把SpringJDBC的基本调用搞懂了,然后想编写个Demo来操作JDBC调用mysql数据库。本来想用Android作为界面实现,但是既然用了Spring,就顺便学一下SpringMVC,于是就有了下面这个小Demo。由于只支持了Mysql,就没有在考虑策略模式来支持多数据库,直接上来就是mysql的耦合连接。
先是用Maven new一个webapp出来,然后配置工程的Java build path为1.8,这样工程里就会自动出现我们需要的src/main/java文件夹。
整个工程的文件结构如下图:
工程建完以后配置pom:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xiakaihui.springmvc</groupId> <artifactId>TextBox</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>TextBox Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.9.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0-b07</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.9.RELEASE</version> </dependency> </dependencies> <build> <finalName>TextBox</finalName> </build></project>
先把Student这个最基本数据类建好:
Student.java
package com.xiakaihui.springmvc;public class Student { private Integer age; private String name; private Integer id; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }}
这样配置就可以了。spring-mvc会把spring里基本我们需要的包,包括spring-core、spring-context都自动配置进来,maven确实很人性化。
mysql-connector是为了建立mysql数据库连接的,而spring-jdbc可以让我们用spring提供的框架跟方便安全健壮得建立数据库连接和调用数据库。
既然是数据库操作,那就先把数据库操作的类给写好:
JDBCOperater.java
package com.xiakaihui.springmvc.JDBC;import java.util.HashMap;import java.util.List;import java.util.Map;import com.xiakaihui.springmvc.Student;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;public class JDBCOperater extends NamedParameterJdbcDaoSupport { public void insertNamedParameter(Student student) { String sql = "INSERT INTO Student(ID, NAME, AGE)" + "VALUES(:id, :name, :age)"; Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("name", student.getName()); parameters.put("age", student.getAge()); parameters.put("id", student.getId()); getNamedParameterJdbcTemplate().update(sql, parameters); } public Student findByStudentId(int Id) { String sql = "SELECT * FROM Student WHERE ID = ?"; Student student = getJdbcTemplate().queryForObject(sql, new Object[] {Id}, new BeanPropertyRowMapper<Student>(Student.class)); return student; } public List<Student> findAll() { String sql = "SELECT * FROM Student"; List<Student> students = getJdbcTemplate().query(sql, new BeanPropertyRowMapper<Student>(Student.class)); return students; }}
这里用了Spring的getNamedParameterJdbcTemplate,来直接对数据库插入我们所要的对象,getJdbcTemplate也是很重要的Spring JDBC操作类,这里用它查询数据库,它的queryForObject会根据我们的需求自动为我们封装对象值。
我们因尽量用Spring提供的Template方法来操作数据库,而不是自己根据mysql-connector-java来再写一套,当然用来学习下是可以。但是毕竟Spring做的更加稳定,它处理异常和关闭连接也更加全面和安全。
接下来就是写好Spring关于数据库调用的bean文件:
Sping-Database.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mysql"/> <property name="username" value="root"/> <property name="password" value="123456"></property> </bean> <bean id="student" class="com.xiakaihui.springmvc.JDBC.JDBCOperater"> <property name="dataSource" ref="dataSource"/> </bean></beans>
这里创建数据库时要注意,要这样CREATE TABLE **()charset utf8 collate utf8_general_ci;不然会出现java.sql.SQLException: Incorrect string value:
‘\xE6\x88\x91\xE7\x9A\x84…’ for column的错误,就是因为你传给数据库的是UTF-8,但是建表的时候不是UTF-8的,所以数据库不认就会抛异常。
数据库的操作已经写完了,然后我们把页面跳转给写好:
StudentController.java
package com.xiakaihui.springmvc;import org.springframework.context.ApplicationContext;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;import com.xiakaihui.springmvc.JDBC.JDBCOperater;@Controllerpublic class StudentController { @RequestMapping(value="/student", method=RequestMethod.GET) public ModelAndView student() { Student st = new Student(); return new ModelAndView("student", "command", st); } @RequestMapping(value="/addStudent", method=RequestMethod.POST) public String addStudent(@ModelAttribute("SpringWeb")Student student, Model model) { model.addAttribute("name", student.getName()); model.addAttribute("age", student.getAge()); model.addAttribute("id", student.getId()); ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Database.xml"); JDBCOperater jdbcOp = (JDBCOperater) context.getBean("student"); jdbcOp.insertNamedParameter(student); ((ConfigurableApplicationContext)context).close(); return "result"; }}
这段代码的原理很简单,要注意的是这段代码:
((ConfigurableApplicationContext)context).close();要记得读完bean之后要把上下文给close掉,防止泄露。
好了,先是web制定servlet
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>HelloWorldSpring</display-name> <servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring-mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- Servlet Encoding Start --> <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Servlet Encoding End --> </web-app>
这个filter是我刚写的时候为了解决中文乱码问题的,这是网页显示的中文乱码问题,上面是解决数据库的中文乱码问题。
下面就是servlet的配置了
spring-mvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.xiakaihui.springmvc"/> <context:annotation-config/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean></beans>
springmvc的controller类已经用了,基本的servlet配置也已近ok,接下来就是我们要跳转的两个jsp了:
student.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <h2>学生信息</h2> <form:form method="POST" action="/TextBox/addStudent"> <table> <tr> <td><form:label path="name">姓名:</form:label></td> <td><form:input path="name"/></td> </tr> <tr> <td><form:label path="age">年龄:</form:label></td> <td><form:input path="age"/></td> </tr> <tr> <td><form:label path="id">编号:</form:label></td> <td><form:input path="id"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="提交学生信息"/></td> </tr> </table> </form:form></body></html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Spring mvc 表单处理-输入框处理</title></head><body> <h2>提交的学生信息如下</h2> <table> <tr> <td>姓名</td> <td>${name}</td> </tr> <tr> <td>年龄</td> <td>${age}</td> </tr> <tr> <td>编号</td> <td>${id}</td> </tr> </table></body></html>
这里要注意<%@taglib uri=”http://www.springframework.org/tags/form” prefix=”form”%>这个配置,说明是表单,不然文本框无法显示。
还有编码都要改为UTF-8,不然中文会乱码。
好了,这就是Spring + jdbc + Springmvc实现的简单Demo虽然现在只写了一个插入,但是基本框架已经用了,查询接口已经预留好,以后随着对SpringMVC的理解会再完善这个Demo。
但是实现这个小Demo确实花了一个月时间,每天加完班去完健身房回到家看和敲一个多小时再睡觉。从对spring的一无所知,到能简单的通过spring调用数据库,再到对jdbc的深入学习,也顺便熟悉了mysql的基本语法,为了能够界面展示抛弃了用过的Android,继续学习SpringMVC,最后搭出来这样一套数据库的调用。也多亏前段时间对设计模式和重构的理解,现在搞这种感觉都是围绕策略、工厂、模板等实现的,万变不离其宗。
最后附上最后程序运行结果,数据库里有几个是中文乱码,展示下是什么样的:
- Spring MVC + JDBC 实现数据库操作
- 《Spring JDBC 操作数据库》
- spring mvc 整合 jdbc 实现Web后端数据库
- Spring JDBC数据库操作类
- Spring使用JDBC操作数据库
- Spring-JDBC 操作SQL数据库
- Spring之jdbc数据库操作
- spring framwor操作数据库示例spring-jdbc
- Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册
- Spring MVC+Spring JDBC
- spring MVC链接数据库与JDBC连接数据库
- Spring集成JDBC操作数据库实例教程
- 用Spring的JDBC直接操作数据库
- spring jdbc-数据库操作对象化模型
- Spring技术内幕之数据库操作组件的实现(01)-JDBC的设计与实现
- 使用spring jdbc template简化jdbc数据库操作实例代码
- spring+spring mvc+spring jdbc
- Spring-mvc的jdbc
- delphi自带md5的使用
- <防无聊>题解
- PAT程序设计考题——甲级1098(Insertion or Heap Sort ) C++实现
- php的内置接口 arrayaccess
- QOpenGLWidget类
- Spring MVC + JDBC 实现数据库操作
- c/c++面试题
- 用itchat爬取朋友圈好友信息
- SSE2
- EasyDSS RTMP流媒体服务器开发直播同时HLS录像功能实现时移回放
- webpack3最新版本配置研究(一)loader
- python学习——datetime
- LOP优化
- Maven最佳实践:划分模块