- 浏览: 706409 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
yajie870423:
为什么验证码到时间180秒了,还可以用
springsecurity3和JCaptcha的整合 -
Belong:
[img][i]引用[list]
[*][img][img][ ...
ckeditor的配置属性相关 -
纵观全局:
666666666666666 Mark !
Spring Security3 - MVC 整合教程 (初识Spring Security3) -
Hiderevenger:
,教程很好,循序渐进,融会贯通
Spring Security3 - MVC 整合教程 (初识Spring Security3) -
smileyangtest:
按了add怎么什么反映都没有,也没有报错什么的,什么都没有,请 ...
Spring3MVC和jQuery的集成
在以前的教程中我们并没有进行数据库连接操作.
一个没有进行数据库操作的web项目几乎是不存在的.
所以数据库连接也是一个很重要的知识点.
而在本教程中,我们会用SpringMVC+JDBC实现一个简单的数据库访问.
并对Person对象进行简单的CRUD操作.
我们将使用MySql数据库.
相应的也可以用于DB2,oracle,SqlServer,HyperSQL等数据库.
JDBC是什么?
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
MySql是什么?
MySQL由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
下面是我们的应用程序文件夹结构:
然后是pom.xml里添加的jar包:
创建一张MySql表.
注意数据库是 spring3db.
首先添加Spring MVC所必须的配置.
web.xml
在web.xml中我们定义servlet:spring.
按照惯例,我们必须声明一个spring-servle.xml
spring-servle.xml
这个XML配置声明一个视图解析器.在控制器中会根据JSP名映射到/ WEB-INF/jsp中相应的位置.
要进行数据库操作,一定需要一个数据库连接的配置.
jdbc.properties
注:以后所有的教程所用到的数据库统一为spring3db
jdbc-context.xml
该文件主要配置了:
1.启用了事务管理
2.声明了一个数据源
我们将使用连接池(Connection pool)对数据库进行管理.
JDBC连接通常是通过一个连接池(Connection pool)管理,而不是直接driver.
连接池包括BoneCP,C3P0的和DBCP.
连接池(Connection pool)是什么东西?
由于创建一个数据库连接比较耗费资源,因此对于一个项目来讲,从使用人数来看,先初始化一部分连接,放在连接池中,有用户过来直接拿来使用.如果全部用完了的话,就新创建连接.当用户从连接池中取出的连接用完以后,自动返回连接池等下个用户来用.
下面是所有开源的Connection Pools
Open Source Database Connection Pools
网上对于BoneCP,C3P0的和DBCP这3种连接池效率有很多的评测.结果各不相同.
但是Spring和Hibernate官方推荐使用c3p0,(据了解JavaEye也是用的c3p0)肯定有其性能上的优点.
所以我们也使用c3p0
关于c3p0的详细信息可以参考:HowTo configure the C3P0 connection pool
然后创建一个applicationContext.xml.
applicationContext.xml.
定义一个Person对象.
Person.java
由于我们要实现对Person 的CRUD操作.
需要定义一个service来实现对Person进行操作的方法.
PersonService.java
我们在PersonService实现了一个简单的CRUD.主要对应了下面几种方法.
getAll
add
delete
edit
注意:我们是通过一个SimpleJdbcTemplate实例来进行数据库的操作的.
什么是JdbcTemplate?
JdbcTemplate类是在JDBC核心包的核心类。 它处理的创建和释放资源,它可以帮助您避免如忘记关闭连接常见的错误。 它执行核心的JDBC工作流,如语句创建和执行基本任务,让应用程序代码提供SQL和提取结果。 JdbcTemplate类执行SQL查询,更新语句和存储过程调用,执行过的ResultSets和返回的参数值的提取迭代。 它还捕捉JDBC异常并将它们转换为通用的,更丰富,层次结构异常org.springframework.dao包定义。
来源:Spring3官方文档
什么是SimpleJdbcTemplate?
来源:Spring3官方文档
换句通俗点的话就是SimpleJdbcTemplate是JdbcTemplate的加强版.
值得注意的是:
我们的教程中使用的是Spring官方文档中的最佳实践.而实际工作中为了编码的效率和代码的整洁.
我们可以使用SimpleJdbcTemplate自带的其他方法.
比如PersonService中的getAll方法采用的是Spring推荐的最佳实践.
我们也可以用BeanPropertyRowMapper来达到检索所有的Person的功能,并且代码更少.
但是要注意BeanPropertyRowMapper的使用条件.返回的对象必须和数据库里的字段相同(可以忽略带"_"和大写的字段).
然后是Controller
MainController.java
该Controller包含了4个映射.
每个映射调用一个PersonService.当调用成功后则会跳转到指定的JSP页面
addedpage.jsp
editedpage.jsp
deletedpage.jsp
personspage.jsp
我们的应用程序已经完成了
进入主页输入:http://localhost:8080/spring-jdbc/main/persons
新增一Person:http://localhost:8080/spring-jdbc/main/persons/add?firstname=John&lastname=Smith&money=1000
删除一Person:http://localhost:8080/spring-jdbc/main/persons/delete?id=1
修改一Person:http://localhost:8080/spring-jdbc/main//persons/edit?id=1&firstname=Johnny&lastname=Smith&money=2000
总结
这样我们完成了预定的目标:成功的连接了数据库并通过使用SpringMVC和JDBC实现了一个简单的CRUD操作;
我们了解了什么是JdbcTemplate以及如何使用SimpleJdbcTemplate对数据库进行操作.
而spring3MVC自带的SimpleJdbcTemplate能够很好的封装JDBC.数据库操作方便.
和Hibernate的HQL不同.因为是直接用原生态的sql进行查询.所以能够对sql语句进行拼接.
十分的灵活.这点是HQL所不能比拟的.
BTW:附件为本次教程源码.你可以下载后直接在tomcat或其他web服务器启动.也可以自行添加
maven插件启动.
一个没有进行数据库操作的web项目几乎是不存在的.
所以数据库连接也是一个很重要的知识点.
而在本教程中,我们会用SpringMVC+JDBC实现一个简单的数据库访问.
并对Person对象进行简单的CRUD操作.
我们将使用MySql数据库.
相应的也可以用于DB2,oracle,SqlServer,HyperSQL等数据库.
JDBC是什么?
引用
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
MySql是什么?
引用
MySQL由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
下面是我们的应用程序文件夹结构:
然后是pom.xml里添加的jar包:
创建一张MySql表.
注意数据库是 spring3db.
DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `ID` int(11) unsigned NOT NULL AUTO_INCREMENT, `FIRST_NAME` varchar(255) DEFAULT NULL, `LAST_NAME` varchar(255) DEFAULT NULL, `MONEY` double DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
首先添加Spring MVC所必须的配置.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
在web.xml中我们定义servlet:spring.
按照惯例,我们必须声明一个spring-servle.xml
spring-servle.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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 定义一个视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans>
这个XML配置声明一个视图解析器.在控制器中会根据JSP名映射到/ WEB-INF/jsp中相应的位置.
要进行数据库操作,一定需要一个数据库连接的配置.
jdbc.properties
# database properties #spring3db is databaseName. app.jdbc.driverClassName=com.mysql.jdbc.Driver app.jdbc.url=jdbc:mysql://localhost/spring3db app.jdbc.username=root app.jdbc.password=root
注:以后所有的教程所用到的数据库统一为spring3db
jdbc-context.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:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- 定义jdbc配置信息路径 --> <context:property-placeholder location="/WEB-INF/jdbc.properties" /> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 数据源配置,使用c3p0数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverClass="${app.jdbc.driverClassName}" p:jdbcUrl="${app.jdbc.url}" p:user="${app.jdbc.username}" p:password="${app.jdbc.password}" p:acquireIncrement="5" p:idleConnectionTestPeriod="60" p:maxPoolSize="100" p:maxStatements="50" p:minPoolSize="10" /> <!-- 定义事务管理 --> <!-- See http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> </beans>
该文件主要配置了:
1.启用了事务管理
2.声明了一个数据源
我们将使用连接池(Connection pool)对数据库进行管理.
JDBC连接通常是通过一个连接池(Connection pool)管理,而不是直接driver.
连接池包括BoneCP,C3P0的和DBCP.
连接池(Connection pool)是什么东西?
引用
由于创建一个数据库连接比较耗费资源,因此对于一个项目来讲,从使用人数来看,先初始化一部分连接,放在连接池中,有用户过来直接拿来使用.如果全部用完了的话,就新创建连接.当用户从连接池中取出的连接用完以后,自动返回连接池等下个用户来用.
下面是所有开源的Connection Pools
Open Source Database Connection Pools
网上对于BoneCP,C3P0的和DBCP这3种连接池效率有很多的评测.结果各不相同.
但是Spring和Hibernate官方推荐使用c3p0,(据了解JavaEye也是用的c3p0)肯定有其性能上的优点.
所以我们也使用c3p0
关于c3p0的详细信息可以参考:HowTo configure the C3P0 connection pool
然后创建一个applicationContext.xml.
applicationContext.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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 激活spring的注解. --> <context:annotation-config /> <!-- 扫描注解组件并且自动的注入spring beans中. 例如,他会扫描@Controller 和@Service下的文件.所以确保此base-package设置正确. --> <context:component-scan base-package="org.liukai.tutorial" /> <!-- 配置注解驱动的Spring MVC Controller 的编程模型.注:次标签只在 Servlet MVC工作! --> <mvc:annotation-driven /> <!-- 导入jdbc的配置文件 --> <import resource="jdbc-context.xml" /> </beans>
定义一个Person对象.
Person.java
package org.liukai.tutorial.domain; import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = -6463052236469808931L; private Integer id; private String firstName; private String lastName; private Double money; // setter/getter.. }
由于我们要实现对Person 的CRUD操作.
需要定义一个service来实现对Person进行操作的方法.
PersonService.java
package org.liukai.tutorial.service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.liukai.tutorial.domain.Person; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * Service for processing Persons. * <p> * 关于Spring JDBC 和 JdbcTemplate * see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html * <p> * 关于transactions, see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html */ @Service("personService") @Transactional public class PersonService { protected static Logger logger = Logger.getLogger("service"); private SimpleJdbcTemplate jdbcTemplate; @Resource(name="dataSource") public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new SimpleJdbcTemplate(dataSource); } /** *检索所有的Person */ public List<Person> getAll() { logger.debug("Retrieving all persons"); String sql = "select id, first_name, last_name, money from person"; // Maps a SQL result to a Java object RowMapper<Person> mapper = new RowMapper<Person>() { public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person person = new Person(); person.setId(rs.getInt("id")); person.setFirstName(rs.getString("first_name")); person.setLastName(rs.getString("last_name")); person.setMoney(rs.getDouble("money")); return person; } }; return jdbcTemplate.query(sql, mapper); } /** * 新增person */ public void add(String firstName, String lastName, Double money) { logger.debug("Adding new person"); String sql = "insert into person(first_name, last_name, money) values " + "(:firstName, :lastName, :money)"; Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("firstName", firstName); parameters.put("lastName", lastName); parameters.put("money", money); // Save jdbcTemplate.update(sql, parameters); } /** * 删除指定Person */ public void delete(Integer id) { logger.debug("Deleting existing person"); String sql = "delete from person where id = ?"; Object[] parameters = new Object[] {id}; jdbcTemplate.update(sql, parameters); } /** * Edit指定的Person */ public void edit(Integer id, String firstName, String lastName, Double money) { logger.debug("Editing existing person"); String sql = "update person set first_name = :firstName, " + "last_name = :lastName, money = :money where id = :id"; // Assign values to parameters Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("id", id); parameters.put("firstName", firstName); parameters.put("lastName", lastName); parameters.put("money", money); // Edit jdbcTemplate.update(sql, parameters); } }
我们在PersonService实现了一个简单的CRUD.主要对应了下面几种方法.
getAll
add
delete
edit
注意:我们是通过一个SimpleJdbcTemplate实例来进行数据库的操作的.
什么是JdbcTemplate?
引用
JdbcTemplate类是在JDBC核心包的核心类。 它处理的创建和释放资源,它可以帮助您避免如忘记关闭连接常见的错误。 它执行核心的JDBC工作流,如语句创建和执行基本任务,让应用程序代码提供SQL和提取结果。 JdbcTemplate类执行SQL查询,更新语句和存储过程调用,执行过的ResultSets和返回的参数值的提取迭代。 它还捕捉JDBC异常并将它们转换为通用的,更丰富,层次结构异常org.springframework.dao包定义。
来源:Spring3官方文档
什么是SimpleJdbcTemplate?
引用
SimpleJdbcTemplate类包装的可变参数和自动装箱,如经典的JdbcTemplate,并利用Java 5的语言特性。
来源:Spring3官方文档
换句通俗点的话就是SimpleJdbcTemplate是JdbcTemplate的加强版.
值得注意的是:
我们的教程中使用的是Spring官方文档中的最佳实践.而实际工作中为了编码的效率和代码的整洁.
我们可以使用SimpleJdbcTemplate自带的其他方法.
比如PersonService中的getAll方法采用的是Spring推荐的最佳实践.
public List<Person> getAll() { logger.debug("Retrieving all persons"); String sql = "select id, first_name, last_name, money from person"; // Maps a SQL result to a Java object RowMapper<Person> mapper = new RowMapper<Person>() { public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person person = new Person(); person.setId(rs.getInt("id")); person.setFirstName(rs.getString("first_name")); person.setLastName(rs.getString("last_name")); person.setMoney(rs.getDouble("money")); return person; } }; return jdbcTemplate.query(sql, mapper); }
我们也可以用BeanPropertyRowMapper来达到检索所有的Person的功能,并且代码更少.
public List<Person> getAll() { logger.debug("Retrieving all persons"); String sql = "select id, first_name, last_name, money from person"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<Person>(Person.class)); }
但是要注意BeanPropertyRowMapper的使用条件.返回的对象必须和数据库里的字段相同(可以忽略带"_"和大写的字段).
然后是Controller
MainController.java
package org.liukai.tutorial.controller; import java.util.List; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.liukai.tutorial.domain.Person; import org.liukai.tutorial.service.PersonService; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/main") public class MainController { protected static Logger logger = Logger.getLogger("controller"); @Resource(name="personService") private PersonService personService; /** *获得所有的Person并返回到指定JSP页面 * * @return the name of the JSP page */ @RequestMapping(value = "/persons", method = RequestMethod.GET) public String getPersons(Model model) { logger.debug("Received request to show all persons"); // 调用personService中的getAll获得所有的Person List<Person> persons = personService.getAll(); // 把Person装入一个指定的model model.addAttribute("persons", persons); // 解析 /WEB-INF/jsp/personspage.jsp return "personspage"; } /** *根据页面传递过来的值新增一Person并跳转到指定页面. */ @RequestMapping(value = "/persons/add", method = RequestMethod.GET) public String add( @RequestParam(value="firstname", required=true) String firstName, @RequestParam(value="lastname", required=true) String lastName, @RequestParam(value="money", required=true) Double money) { logger.debug("Received request to add new person"); personService.add(firstName, lastName, money); return "addedpage"; } /** * 根据接收的ID删除Person */ @RequestMapping(value = "/persons/delete", method = RequestMethod.GET) public String delete(@RequestParam(value="id", required=true) Integer id, Model model) { logger.debug("Received request to delete existing person"); personService.delete(id); model.addAttribute("id", id); return "deletedpage"; } /** * edit指定的Person */ @RequestMapping(value = "/persons/edit", method = RequestMethod.GET) public String edit( @RequestParam(value="id", required=true) Integer id, @RequestParam(value="firstname", required=true) String firstName, @RequestParam(value="lastname", required=true) String lastName, @RequestParam(value="money", required=true) Double money, Model model){ logger.debug("Received request to edit existing person"); personService.edit(id, firstName, lastName, money); model.addAttribute("id", id); return "editedpage"; } }
该Controller包含了4个映射.
引用
/persons
/persons/add?firstname=''&lastname=''&money=''
/persons/delete?id=''
/persons/edit?id=''&firstname=''&lastname=''&money=''
/persons/add?firstname=''&lastname=''&money=''
/persons/delete?id=''
/persons/edit?id=''&firstname=''&lastname=''&money=''
每个映射调用一个PersonService.当调用成功后则会跳转到指定的JSP页面
addedpage.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="java.util.Date" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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> <h1>Persons</h1> <p>你于 <%= new java.util.Date() %> 新增一个Person </p> </body> </html>
editedpage.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="java.util.Date" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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> <h1>Persons</h1> <p>你于 <%= new java.util.Date() %> 根据${id }修改了一个Person </p> </body> </html>
deletedpage.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="java.util.Date" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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> <h1>Persons</h1> <p>你于 <%= new java.util.Date() %> 根据${id }删除了一个Person </p> </body> </html>
personspage.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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> <h1>Persons</h1> <table> <tr> <td width="50">Id</td> <td width="150">First Name</td> <td width="150">Last Name</td> <td width="50">Money</td> </tr> <c:forEach items="${persons}" var="person"> <tr> <td><c:out value="${person.id}" /></td> <td><c:out value="${person.firstName}" /></td> <td><c:out value="${person.lastName}" /></td> <td><c:out value="${person.money}" /></td> </tr> </c:forEach> </table> </body> </html>
我们的应用程序已经完成了
进入主页输入:http://localhost:8080/spring-jdbc/main/persons
新增一Person:http://localhost:8080/spring-jdbc/main/persons/add?firstname=John&lastname=Smith&money=1000
删除一Person:http://localhost:8080/spring-jdbc/main/persons/delete?id=1
修改一Person:http://localhost:8080/spring-jdbc/main//persons/edit?id=1&firstname=Johnny&lastname=Smith&money=2000
总结
这样我们完成了预定的目标:成功的连接了数据库并通过使用SpringMVC和JDBC实现了一个简单的CRUD操作;
我们了解了什么是JdbcTemplate以及如何使用SimpleJdbcTemplate对数据库进行操作.
而spring3MVC自带的SimpleJdbcTemplate能够很好的封装JDBC.数据库操作方便.
和Hibernate的HQL不同.因为是直接用原生态的sql进行查询.所以能够对sql语句进行拼接.
十分的灵活.这点是HQL所不能比拟的.
BTW:附件为本次教程源码.你可以下载后直接在tomcat或其他web服务器启动.也可以自行添加
maven插件启动.
- spring-jdbc.zip (21.5 KB)
- 下载次数: 561
评论
2 楼
罗文2018
2014-02-26
把楼主的框架导入myeclipse运行之后,静态资源报404错误.怎么解?
1 楼
lixia0417
2013-01-23
楼主写的真是认真啊。写的好
发表评论
-
Spring3MVC and POI
2011-04-27 15:01 6943本教程我们将通过Apache的 POI进行excel的导出和写 ... -
Spring Security3 - MVC 整合教程 (初识Spring Security3)
2011-03-31 17:07 179246下面我们将实现关于Spring Security3的一系列教程 ... -
Spring3MVC和jQuery的集成
2011-03-25 12:27 14858在本教程.我们将使用Spring MVC建立一个简单的基于jQ ... -
Spring3MVC 在JSP中使用@ModelAttribute
2011-03-24 11:00 39834在教程中,我们将创建一个简单的Spring3MVC simpl ... -
写在spring3MVC教程之前
2011-03-24 10:02 2548Spring是一个很强大的框架. 很多新人对Spring 的感 ... -
maven项目添加jar包.
2011-03-23 21:52 114337很多新手都不知道如何在maven项目里添加jar包. 以前我还 ... -
配合m2eclipse创建一个标准的maven web项目.
2011-03-23 17:31 24519Maven是一个近几年比较 ...
相关推荐
在本项目中,我们主要利用Spring框架,包括其核心模块Spring、MVC模块Spring MVC以及数据访问/集成模块Spring JDBC,结合MySQL数据库来构建一个基础的登录注册系统。以下是这个项目涉及的关键技术点: 1. **Spring...
通过这个项目,初学者可以深入理解Spring MVC和Spring JDBC的集成,以及它们在实际应用中的工作原理。同时,也可以学习到Web开发的基本流程,包括前后端交互、数据库操作以及用户认证等核心概念。
本项目聚焦于Spring、Spring MVC和JDBC Template的集成应用,用于实现数据库的增删改查操作。这是一套常见的企业级应用开发模式,对于理解和掌握Java Web开发至关重要。 首先,Spring框架是一个开源的应用框架,它...
Spring MVC、Spring和Spring JDBC是Java开发中非常重要的三大框架,它们构成了Spring框架的核心部分,广泛应用于企业级应用开发。本实例源码旨在提供一个整合这三者的基础模板,帮助开发者理解和掌握它们之间的协同...
集成Spring Data JDBC可以减少代码量,提高可维护性,并且由于Spring的其他模块(如Spring MVC和Spring Security)与之良好集成,可以构建更复杂的Web应用。例如,Spring MVC提供了模型-视图-控制器架构,使业务逻辑...
标题中的“spring3.1 mvc jdbc 合成”指的是在Spring 3.1版本中,如何集成使用Spring MVC框架和JDBC进行数据访问的技术。Spring MVC是Spring框架的一个核心模块,用于构建Web应用程序,而JDBC(Java Database ...
集成 Spring MVC 和 MyBatis 的主要步骤包括以下几个方面: 1. **环境准备**:首先,确保项目中引入了 Spring MVC、MyBatis 相关的依赖库,如 spring-webmvc、spring-jdbc、mybatis、mybatis-spring 等。这些依赖...
另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...
此外,Spring3MVC还常常与Spring的其他模块集成,比如`spring-aop.jar`(面向切面编程,用于实现如日志、事务管理等功能)、`spring-jdbc.jar`(数据库操作支持)、`spring-tx.jar`(事务管理服务)以及`spring-orm....
本示例"Spring mvc、Spring、Spring jdbc 整合 demo"着重展示了Spring框架的三大关键模块:Spring MVC(模型-视图-控制器)、Spring Core以及Spring JDBC的集成与应用。 1. **Spring MVC** Spring MVC是Spring框架...
Spring MVC、Spring Boot和Spring JDBC是Java开发中的三大核心框架,它们在构建高效、可扩展的Web应用程序中扮演着至关重要的角色。这篇文章将深入探讨这三个框架的原理、用途以及它们如何协同工作。 **Spring MVC*...
总之,Spring 3 MVC作为一个全面的Web开发框架,提供了丰富的功能和强大的集成能力,使得开发者能够专注于业务逻辑,而不是底层的基础设施。这个整合包包含的jar文件可能是Spring MVC框架本身、Spring核心库、相关...
14. **数据库集成**:可能包含对JDBC、Hibernate或MyBatis等持久层技术的使用,实现对数据库的CRUD操作。 本项目提供了实战经验,涵盖了从用户注册、登录、商品浏览、购物车管理到订单处理等一系列电商功能,全面...
在本文中,我们将深入探讨如何将Spring MVC框架与Elasticsearch 5.5.0版本进行集成,实现数据的增删改查功能。Elasticsearch是一个高性能、分布式、全文搜索引擎,广泛应用于日志分析、实时数据分析等领域。Spring ...
3. **Spring JDBC**:Spring JDBC提供了一个JdbcTemplate类,它封装了JDBC的繁琐操作,如打开和关闭连接、处理异常等,使得开发者可以专注于SQL语句的编写。此外,它还支持RowMapper和ResultSetExtractor,用于将...
在本示例中,"Spring-MVC的demo" 提供了一个完整的Spring MVC学习项目,包含了数据库操作、JDBC以及Spring的核心功能。 1. **Spring MVC 框架简介** Spring MVC 是Spring框架的一部分,主要用于处理Web请求。它将...
Spring MVC、Spring 和 Spring JPA 是Java开发中的三大核心框架,它们共同构建了一个高效、灵活的Web应用程序开发环境。在本教程中,我们将探讨如何将这些框架与MySQL数据库进行集成,以便实现数据的持久化存储。 ...
此外,由于其基于Spring框架,可以与其他Spring模块(如Spring JDBC、MyBatis等)无缝集成,实现更复杂的业务逻辑。 总之,Spring3 MVC是一个强大且灵活的Web开发框架,它简化了Web应用的开发过程,提高了代码的可...
本示例提供的"spring3+springMVC3+springJDBC3+jQuery easyui"就是一个经典组合,适用于开发高效、可维护的后端服务和用户友好的前端界面。让我们逐一深入探讨这些技术的细节。 首先,Spring框架(版本3)是Java...