您的位置:首页 > 数据库 > Oracle

springMVC+MyBatis+Oracle+Web实现增删改查(附带完整案例+数据库数据)

2015-09-11 13:58 357 查看
在网上也是搜索很多资料一点点学到现在。东西整合在一起,希望对各位有所帮助一、准备工作:1.先看下目录结构2.需要的jar包二、配置文件解读配置文件有这么几个 web.xml,springMvc的配置文件(spring-mvc.xml,daoContext.xml),数据库属性文件mysql.properties,MyBatis的配置文件MyBatis-config.xml,MyBatis与数据库映射文件userMapper.xml。下面逐一讲解1.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <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>

<welcome-file-list>
<welcome-file>/WEB-INF/index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<init-param>
<description>加载spring-mvc文件夹下xml的配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<filter>是为了防止乱码加的<servlet>中<init-param>是在加载文件夹spring-mvc文件夹下关于springMvc 配置的xml的配置文件另外需要注意的是:servlet-name是随意的。但是如果没有<init-param>中加载xml这句话时,spring会自动找到test-servlet.xml文件。这时就需要spring配置文件名与其一致,否则会报错2.spring-mvc有两个配置文件:spring-mvc.xml和daoContext.xml(1)spring-mvc.xml 顾名思义是springMvc的配置文件
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 启用 spring mvc 注解 -->
<mvc:annotation-driven/>
<!-- 对com.yue下所有包下的类的注解进行扫描,并自动创建bean实例和装配bean -->
<context:component-scan base-package="com.yue"></context:component-scan>

<!-- 视图解析器,定义跳转的文件前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
<pre name="code" class="html">启用注解:当url中有deleteUser.do,则去文件中找@RequestMapping(value="deleteUser.do")这句话,并对应执行他的方法
视图解析器:java方法中return "main";则会去找“/WEB-INF/jsp/main.jsp”的文件。对应起来就是一个完整的请求返回过程
<pre name="code" class="html">(2)daoContext.xml中是一些与数据库相关的连接配置文件</p><p></p><pre name="code" class="html">
<?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:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 引入jdbc配置文件 --><context:property-placeholder location="classpath:mysql.properties"/><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:MyBatis-config.xml" /><property name="dataSource" ref="dataSource"/></bean><!-- 自动扫描mapper --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage"  value="com.yue.dao"/></bean></beans>
引入jdbc配置文件mysql.properties稍后会将此文件贴出自动扫描mapper指的是扫描与myBatis相关的配置文件,此文件是在com.yue.dao下的userMapper.xml。一会儿将此文件也会贴出3.数据库属性文件mysql.properties
jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@localhost:1521:orcljdbc.username=practicejdbc.password=123
此处就不必过多解释,驱动,url,用户名密码而已4.MyBatis的配置文件MyBatis-config.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC  "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="com.yue.model.User" alias="User"></typeAlias></typeAliases><mappers><mapper resource="com/yue/dao/mapper/userMapper.xml"></mapper></mappers></configuration>
<typeAlias>相当于为userMapper中User类定义了个缩写。在userMapper.xml中就不必写com.yue.model.User,而是直接User即可5.MyBatis与数据库映射文件userMapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yue.dao.IUser"><select id="findAllUser" resultType="User">select * from user_my order by id</select><delete id="deleteUser" parameterType="int">delete from user_my where id=#{id}</delete><select id="selectUser" parameterType="User" resultType="User">select * from user_my where username like '%'||#{username}||'%'  order by id</select><select id="mergeUser" parameterType="User">MERGE INTO user_my uUSING (select #{id} id,#{email} email,#{username} username,#{password} password,#{phone} phone,#{mobile} mobile,#{address} address from dual ) nuON (u.id = nu.id)WHEN MATCHED THENupdate  setu.username = nu.username,u.password = nu.password,u.email = nu.email,u.phone = nu.phone,u.mobile = nu.mobile,u.address = nu.address where u.id=nu.idWHEN NOT MATCHED THENinsert (id,username,password,email,phone,mobile,address)values (nu.id, nu.username, nu.password,nu.email,nu.phone,nu.mobile,nu.address)</select><insert id="insertUser" parameterType="User">insert into user_my(id,email,username,password,phone,mobile,address)values(#{id},#{email},#{username},#{password},#{phone},#{mobile},#{address})</insert><update id="updateUser" parameterType="User">update user_my set username=#{username} where id=#{id}</update></mapper>
<mapper namespace="com.yue.dao.IUser">
是将这些语句通过接口IUser与java类联系起来这其中就是与数据库直接交互的myBatis的配置文件,在这里边定义具体的sql语句三、这里将模仿一个实际的调用过程对项目进行简要描述。在文章最后我会把完整项目包加上供大家调试学习1.url 访问http://localhost:8080/Spring-study/在web.xml中定义了默认界面index.xml。index.xml中只有一句话<% response.sendRedirect("findAllUser.do"); %>findUser.do直接就对应到了MyBatisTest中的@RequestMapping(value="findAllUser.do")MyBatisTest的完整文件:
package com.yue.controller;import java.util.List;import javax.validation.Valid;import org.springframework.beans.factory.annotation.Autowired;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.RequestParam;import com.yue.model.Page;import com.yue.model.User;import com.yue.service.UserService;@Controllerpublic class MyBatisTest {@Autowiredprivate UserService userService;User user = new User();Page page = new Page();List<User> userAll;@RequestMapping(value="findAllUser.do")public String findAllUser(Model model){System.out.println("------------------------------>findAllUser");List<User> users = userService.findAllUser();userAll = users;getPage(users,model);getSubList(users,model);return "main";}@RequestMapping(value="add")public String add(){System.out.println("------------------------------->add");return "add";}@RequestMapping(value="alter")public String alter(@RequestParam(value="id") int id,Model model){System.out.println("------------------------------->alter");for(int i=0;i<userAll.size();i++){User user = userAll.get(i);if(user.getId()==id){model.addAttribute("user", user);}}return "add";}@RequestMapping(value="mergeUser.do")public String mergeUser(@ModelAttribute("user") @Valid  User user,Model model){System.out.println("-------------------------------->mergeUser");userService.mergeUser(user);List<User> users = userService.findAllUser();userAll = users;getPage(users,model);getSubList(users,model);return "main";}@RequestMapping(value="deleteUser.do")public String deleteUser(@ModelAttribute("page") @Valid  Page page,@RequestParam(value="id") int id,Model model){System.out.println("-------------------------------->deleteUser");this.page=page;int flag = userService.deleteUser(id);System.out.println("***flag="+flag);List<User> users = userService.findAllUser();if((page.getCurrentPage()-1)*page.getRowsPerPage() == users.size()){page.setCurrentPage(page.getCurrentPage()-1);}userAll = users;getPage(users,model);getSubList(users,model);return "main";}@RequestMapping(value="selectUser.do")public String selectUser(@ModelAttribute("page") @Valid  Page page,Model model){System.out.println("------------------------------->selectUser");this.page = page;List<User> users = userService.selectUser(page.getUsername_cx());userAll = users;page.setRowsPerPage(3);page.setCurrentPage(1);getPage(users,model);getSubList(users,model);return "main";}@RequestMapping(value="turnPage.do")public String turnPage(@ModelAttribute("page") @Valid  Page page,Model model){System.out.println("------------------------------->turnPage");this.page = page;getPage(userAll,model);getSubList(userAll,model);return "main";}public void getSubList(List<User> users,Model model){int rowsCount = users.size();int start = (page.getCurrentPage()-1)*page.getRowsPerPage() ;int end = page.getCurrentPage()*page.getRowsPerPage() ;int startIndex = start>rowsCount?1:start;int endIndex = end>rowsCount?rowsCount:end;List<User> userList = userAll.subList(startIndex,endIndex);model.addAttribute("userList",userList);}public void getPage(List<User> users,Model model){int rowsCount = users.size();int totalPage = rowsCount/page.getRowsPerPage()+(rowsCount%page.getRowsPerPage()>0?1:0);page.setRowsCount(rowsCount);page.setTotalPage(totalPage);model.addAttribute("page",page );}/*@RequestMapping(value="insertUser.do")public String insertUser(@ModelAttribute("user") @Valid  User user){System.out.println("------------------------------->insertUser");int flag = userService.insertUser(user);System.out.println("****flag="+flag);return "hello";}@RequestMapping(value="updateUser")public String updateUser(){System.out.println("-------------------->updateUser");user.setId(10);user.setUsername("赵月10");int flag = userService.updateUser(user);System.out.println("***flag="+flag);return "hello";}*/}
</pre><pre name="code" class="java">@RequestMapping(value="findAllUser.do")public String findAllUser(Model model){System.out.println("------------------------------>findAllUser");List<User> users = userService.findAllUser();userAll = users;getPage(users,model);getSubList(users,model);return "main";}
List<User> users = userService.findAllUser();
跳转到UserService中的findAllUser()方法。UserService完整文件:
package com.yue.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.yue.dao.IUser;import com.yue.model.User;@Servicepublic class UserService {@Autowiredprivate IUser iuser;public List<User> findAllUser(){return iuser.findAllUser();}public int insertUser(User user){return iuser.insertUser(user);}public int deleteUser(int id){return iuser.deleteUser(id);}public int updateUser(User user) {return iuser.updateUser(user);}public void mergeUser(User user) {iuser.mergeUser(user);}public List<User> selectUser(String username_cx) {return iuser.selectUser(username_cx);}}
iuser.findAllUser();跳入到接口IUser中,实现接口的<span style="font-family: Arial, Helvetica, sans-serif;">findAllUser</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
IUser的完整文件
package com.yue.dao;import java.util.List;import com.yue.model.User;public interface IUser {public List<User> findAllUser();public int insertUser(User user);public int deleteUser(int id);public int updateUser(User user);public void mergeUser(User user);public List<User> selectUser(String username_cx);}
此接口文件与userMapper互联。实现id为findAllUser的语句,如下<select id="findAllUser" resultType="User">select * from user_my order by id</select>此语句进入数据库中查询数据,返回List<User>@RequestMapping(value="findAllUser.do")public String findAllUser(Model model){System.out.println("------------------------------>findAllUser");List<User> users = userService.findAllUser();userAll = users;getPage(users,model);getSubList(users,model);return "main";}public void getSubList(List<User> users,Model model){int rowsCount = users.size();int start = (page.getCurrentPage()-1)*page.getRowsPerPage() ;int end = page.getCurrentPage()*page.getRowsPerPage() ;int startIndex = start>rowsCount?1:start;int endIndex = end>rowsCount?rowsCount:end;List<User> userList = userAll.subList(startIndex,endIndex);model.addAttribute("userList",userList);}将userList放入model当中返回到main.jsp中main.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%><%@page import="com.yue.model.User" %><%@page import="com.yue.model.Page" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function deleteUser(id){window.location.href="deleteUser.do?id="+id;}function addUser(){window.location.href="add";}function alterUser(id){window.location.href="alter?id="+id;}function selectUser(){document.getElementById("pageForm").action="selectUser.do" ;document.getElementById("pageForm").submit();}function turnPage(action){var total =  document.getElementById("totalPage").value;;var currentPage = document.getElementById("currentPage").value;currentPage = parseInt(currentPage);page = parseInt(currentPage);switch(action){case 'first' : page=1; break;case 'prior' : page--; break;case 'next' : page++;break;case 'last' : page=total; break;case 'jump' : page=currentPage; break;case 'rows' : page=1; break;}if(page<1){page=1;alert("已经到达首页");return;}if(page>total){page=total;alert("已经到达末页");return;}document.getElementById("currentPage").value = page;document.getElementById("pageForm").action="turnPage.do" ;document.getElementById("pageForm").submit();}</script></head><body><form id="pageForm" method="post">输入姓名: <input type="text" id="username_cx" name="username_cx" value="${page.username_cx }"/><input type="button" value="查询" onclick="selectUser()"></input><table border="1" width="95%"><c:forEach var="user" items="${userList}"><tr><td>姓名:</td><td>${user.username }</td><td>邮箱:</td><td>${user.email }</td><td>移动电话:</td><td>${user.mobile }</td><td>固定电话:</td><td>${user.phone }</td><td>地址:</td><td>${user.address }</td><td><input type="button" value="修改" onclick="alterUser(${user.id})"></input>  <input type="button" value="删除" onclick="deleteUser(${user.id})"></input></td></tr></c:forEach></table></br><table width="95%"><tr><td align="left"><input type="button" value="首页" onclick="turnPage('first')"/><input type="button" value="上一页" onclick="turnPage('prior')"/><input type="button" value="下一页" onclick="turnPage('next')"/><input type="button" value="末页 " onclick="turnPage('last')"/> <input type="hidden" name="totalPage" id="totalPage" value="${page.totalPage }"/><input type="text" size="3" maxlength="5"  id="currentPage" name="currentPage" value="${page.currentPage}"onkeydown="if (window.event.keyCode==13) {turnPage('jump');}"/>/共${page.totalPage }页     共${page.rowsCount }条记录 每页显示<input type="text" size="3" maxlength="5"  id="rowsPerPage" name="rowsPerPage" value="${page.rowsPerPage}"onkeydown="if (window.event.keyCode==13) {turnPage('rows');}"/>条记录</td><td align="right"><input type="button" value="新增" onclick="addUser()"></input></td></tr></table></form></body></html>
 <c:forEach var="user" items="${userList}"><tr><td>姓名:</td><td>${user.username }</td><td>邮箱:</td><td>${user.email }</td><td>移动电话:</td><td>${user.mobile }</td><td>固定电话:</td><td>${user.phone }</td><td>地址:</td><td>${user.address }</td><td><input type="button" value="修改" onclick="alterUser(${user.id})"></input>  <input type="button" value="删除" onclick="deleteUser(${user.id})"></input></td></tr></c:forEach>
通过${userList}将数据取得,迭代获得数据2.截图展示总结:写的不太好,有点流水账。完整实例 http://download.csdn.net/detail/zhaoxiaoyueyue/9098517
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: