利用springmvc和jdbcTemplate搭建一个对数据库操作的小例子
2015-09-07 16:17
489 查看
在接触到struts2+hibernate+spring三大框架搭建的项目时觉得对于比较简单的项目会显得很繁重,特别是struts现在使用的也不是很广泛,所以我通过网上的部分资料以及对spring的一些了解,在maven下搭建一个springmvc的小程序,仅仅是对数据库的增删改查的操作,需要其他功能也可以在这之上做一些添加,比如电话号码过滤器等功能
那么我们一步一步来,另外需要说的是对于springmvc我也是初学者,有错误的地方还请指正。
1、我们需要自己新建一个数据库,下面是我创建的数据库:
2、那么我们需要创建一个maven项目,这个网上有很多,这里也不赘述,下面是我的项目工程的结构:
那么我们可以在pom.xml文件中写入相应的jar包就可以了,代码如下:
3、配置web.xml文件和spring配置文件applicationContext.xml
web.xml文件需要配置文字编码的过滤器和一个文件拦截器:
web.xml文件
applicationContext.xml文件主要配置了数据源和jdbc事物,另外是userDao和userController
首先我们利用jdbc事物来编写UserDAO中的对数据库的操作,主要的代码如下:
然后编写UserController类:
这里我主要使用的是jstl来显示数据列表的,也可以使用freemarker来显示,主要修改部分代码和在pom里导入freemarker的jar包就可以了
这里只显示body部分的代码:
getAll.jsp:
最后的效果页面,比较丑,无力吐槽:
添加操作和修改,查询操作都是返回到getAll.jsp页面的,效果图也是这种效果,只不过是把数据库中的值显示出来而已
总结一下,感觉springmvc框架和s2sh框架还是有所区别的,而且相比较而言要轻便许多
那么我们一步一步来,另外需要说的是对于springmvc我也是初学者,有错误的地方还请指正。
1、我们需要自己新建一个数据库,下面是我创建的数据库:
2、那么我们需要创建一个maven项目,这个网上有很多,这里也不赘述,下面是我的项目工程的结构:
那么我们可以在pom.xml文件中写入相应的jar包就可以了,代码如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.5.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>
3、配置web.xml文件和spring配置文件applicationContext.xml
web.xml文件需要配置文字编码的过滤器和一个文件拦截器:
web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <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_2_5.xsd" version="2.5"> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <filter> <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>userServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>userServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>applicationContext.xml文件如下:
applicationContext.xml文件主要配置了数据源和jdbc事物,另外是userDao和userController
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <mvc:annotation-driven /> <!-- 控制器对应的包 --> <context:component-scan base-package="com.cy.control" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--规定返回的页面为webapp目录下的jsp页面 --> <property name="prefix" value="/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置数据源 --> <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/userinfo?useUnicode=true&characterEncoding=UTF-8"></property> <property name="username" value="root" /> <property name="password" value="" /> </bean> <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <bean id="userDao" class="com.cy.DAO.UserDAO" parent="jdbctemplate"> </bean> <bean id="userController" class="com.cy.control.UserController"> <property name="userDao" ref="userDao"></property> </bean> </beans>4、从上面的配置文件可以看出,我们需要编写UserDAO类和UserController类,当然肯定不能少了User类,User类比较简单就不贴了,但要记住写上getter和setter方法
首先我们利用jdbc事物来编写UserDAO中的对数据库的操作,主要的代码如下:
public class UserDAO extends JdbcDaoSupport { //查询所有用户的列表 public List<User> getUserList(){ List<User> userlist=new ArrayList<User>(); String sql="select * from user"; userlist=getJdbcTemplate().query(sql, new RowMapper<User>(){ public User mapRow(ResultSet rs, int index) throws SQLException { User user=new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setTel(rs.getString("tel")); return user; } }); return userlist; } //通过用户名关键字获取用户列表 public List<User> getUserByName(String name){ List<User> userlist=new ArrayList<User>(); String sql="select * from user where name like ?"; userlist=getJdbcTemplate().query(sql, new Object[]{"%"+name+"%"},new RowMapper<User>(){ public User mapRow(ResultSet rs, int index) throws SQLException { // TODO Auto-generated method stub User user=new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setTel(rs.getString("tel")); return user; } }); return userlist; } //添加用户 public void addUser(User user){ String sql="insert into user(name,tel) values(?,?)"; getJdbcTemplate().update(sql, new Object[]{user.getName(),user.getTel()}); } //删除用户 public void deleteUser(int id){ String sql="delete from user where id=?"; getJdbcTemplate().update(sql,id); } //更新用户 public void updateUser(final User user,final int id){ String sql="update user set name=?,tel=? where id=?"; getJdbcTemplate().update(sql,new PreparedStatementSetter(){ public void setValues(PreparedStatement ps) throws SQLException { // TODO Auto-generated method stub ps.setString(1, user.getName()); ps.setString(2, user.getTel()); ps.setInt(3, id); }} ); } //通过用户id获取用户列表,其实这里只有一条数据 public List<User> getUserById(int id){ String sql="select * from user where id=?"; return getJdbcTemplate().query(sql, new Object[]{id},new RowMapper<User>(){ public User mapRow(ResultSet rs, int index) throws SQLException { User user=new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setTel(rs.getString("tel")); return user; } }); } }上面用到了jdbcTemplate事物,其实方法也不难,网上也讲的比较详细,这里也不赘述
然后编写UserController类:
@Controller @RequestMapping("/user") public class UserController { private UserDAO userDao; public UserDAO getUserDao() { return userDao; } public void setUserDao(UserDAO userDao) { this.userDao = userDao; } @RequestMapping("/getAll") public String getAll(HttpServletRequest request){ List<User> userlist=userDao.getUserList(); request.setAttribute("userlist", userlist); /* * 这里返回值主要看applicationContext.xml文件中的prefix和suffix * 来决定跳转到/getAll.jsp页面的 */ return "getAll"; } @RequestMapping("/delete") public String delete(HttpServletRequest request,@RequestParam("id")int id){ userDao.deleteUser(id); return getAll(request); } /* * params="method=add"中主要是因为jsp页面中使用的是/user?method=add来做操作的 * 可以写出"/add",但是jsp页面要写出/user/add来做添加操作 * 可以去掉@RequestParam("name"),对结果没有影响 */ @RequestMapping(params="method=add") public String addUser(@RequestParam("name")String name,@RequestParam("tel")String tel,HttpServletRequest request){ User user=new User(); user.setName(name); user.setTel(tel); userDao.addUser(user); return getAll(request); } @RequestMapping(params="method=findUser") public String findUser(String name,HttpServletRequest request){ List<User> userlist=userDao.getUserByName(name); request.setAttribute("userlist", userlist); return "getAll"; } @RequestMapping("/edit") public String edit(@RequestParam("id") int id,HttpServletRequest request){ List<User> userlist=userDao.getUserById(id); request.setAttribute("userlist", userlist); return "edit"; } @RequestMapping(params="method=update") public String update(String name,String tel,int id,HttpServletRequest request){ User user=new User(); user.setName(name); user.setTel(tel); userDao.updateUser(user,id); return getAll(request); } }5、编写前端页面,主要有getAll.jsp用来显示用户的列表信息,index.jsp主要完成的是添加用户的页面,edit.jsp主要是编辑用户信息的页面
这里我主要使用的是jstl来显示数据列表的,也可以使用freemarker来显示,主要修改部分代码和在pom里导入freemarker的jar包就可以了
这里只显示body部分的代码:
getAll.jsp:
<body> <a href="/index.jsp">添加用户</a> <table border="1"> <tr><td>姓名</td><td>电话</td><td>操作</td></tr> <c:forEach items="${userlist}" var="user"> <tr> <td><c:out value="${user.name}" /></td> <td><c:out value="${user.tel}" /></td> <td><a href="<%=request.getContextPath()%>/user/delete?id=<c:out value="${user.id}"/>">删除</a> <a href="<%=request.getContextPath()%>/user/edit?id=<c:out value="${user.id}"/>">编辑</a></td> </tr> </c:forEach> </table> <form action="<%=request.getContextPath()%>/user?method=findUser" method="post"> <input name="name" id="name" type="text"> <input name="submit" type="submit" value="查询"> </form> </body>index.jsp:
<body> <form action="<%=request.getContextPath()%>/user?method=add" method="post"> <input name="name" id="name" type="text"> <input name="tel" id="tel" type="text"> <input name="submit" type="submit" value="提交"> </form> </body>edit.jsp:
<body> 你要更新的用户: <form action="<%=request.getContextPath()%>/user?method=update" method="post"> <table> <tr><td>姓名</td><td>电话</td></tr> <c:forEach items="${userlist}" var="user"> <tr> <td><input name="name" id="name" type="text" value='<c:out value="${user.name}"></c:out>'></td> <td><input name="tel" id="tel" type="text" value='<c:out value="${user.tel}"></c:out>'></td> <td><input name="id" id="id" type="hidden" value=<c:out value="${user.id}"></c:out>></td> </tr> </c:forEach> </table> <input name="submit" type="submit" value="确定"> </form> </body>上面的jsp代码理解起来也不难,其中c:forEach主要是为了遍历userlist列表,c:out主要是输出对应得值
最后的效果页面,比较丑,无力吐槽:
添加操作和修改,查询操作都是返回到getAll.jsp页面的,效果图也是这种效果,只不过是把数据库中的值显示出来而已
总结一下,感觉springmvc框架和s2sh框架还是有所区别的,而且相比较而言要轻便许多
相关文章推荐
- jdbc中的Statement和PreparedStatement接口对象
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android之获取手机上的图片和视频缩略图thumbnails
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序