本文基于 SPRING注解。本文使用Oracle数据库。

项目文件下载地址:http://download.csdn.net/detail/u010634066/8188965

项目总图:

现在lib中导入所有所需jar包:这里就不叙述了

一:在SRC下创建一个Bean包;在bean下面添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表。

package com.szz.bean;import com.szz.base.bean.BaseObject;/*** @author Administrator**/
public class User extends BaseObject {private String ID;/*** @return the iD*/public String getID() {return ID;}/*** @param iD the iD to set*/public void setID(String iD) {ID = iD;}/*** @return the nAME*/public String getNAME() {return NAME;}/*** @param nAME the nAME to set*/public void setNAME(String nAME) {NAME = nAME;}/*** @return the pASSWORD*/public String getPASSWORD() {return PASSWORD;}/*** @param pASSWORD the pASSWORD to set*/public void setPASSWORD(String pASSWORD) {PASSWORD = pASSWORD;}private String NAME;private String PASSWORD;/* (non-Javadoc)* @see com.szz.base.bean.BaseObject#toString()*//* (non-Javadoc)* @see java.lang.Object#toString()*/@Overridepublic String toString() {return "User [ID=" + ID + ", NAME=" + NAME + ", PASSWORD=" + PASSWORD+ "]";}}

二、创建com.szz.dao包;里面用来定义需要对数据进行操作的实体类型DAO接口

package com.szz.dao;import java.util.List;import com.szz.bean.User;/*** @author Administrator**/
public interface UserDao {/** 查询*/public List<user> selectAll();public User findById(String id);public User findByUserName(String userName);public int countAll();/** 更新删除插入*/public int insert(User user);public int update(User user);public int delete(String userName);/*  //返回插入数据的IDpublic int findInsertUserID(User user);*//*//批处理   插入多条数据public void insertUsers(List<user> users);*/}
三、创建包com.szz.tables.xml(这样命名好像不好 定义com.szz.Mappers比较直观一点) 这个是用来写sql语句的xml文件 
<!--?xml version="1.0" encoding="UTF-8" ?-->  <!-- 这里定义好命名空间 --><mapper namespace="com.szz.dao.UserDao"><select id="selectAll" resulttype="User">select * from SM_USER </select><select id="countAll">select count(*) c from SM_USER </select><select id="findById" parametertype="String" resulttype="User">select * from SM_USER where ID=#{ID}</select><select id="findByUserName" parametertype="String" resulttype="User">select * from SM_USER where NAME=#{NAME}</select><!-- <select id="findInsertUserID" paramterType="Srtring">select ID FROM SM_USER NAME =#{User.NAME}</select> --><insert id="insert" parametertype="User">insert into SM_USER(ID,NAME,PASSWORD) VALUES(#{ID},#{NAME},#{PASSWORD})</insert><update id="update" parametertype="User">update SM_USER <set><!-- 这里要注意后面的    逗号“,”  因为有多个参数需要用逗号隔开  否则会报错 --><if test="NAME!=null">NAME=#{NAME},</if><if test="PASSWORD!=null">PASSWORD=#{PASSWORD}</if></set>where ID=#{ID}</update><delete id="delete" parametertype="String">delete FROM SM_USER WHERE ID=#{ID}</delete></mapper>

命名空间定义为我们需要对应的DAO接口;这里每个方法的ID都跟DAO里面的方法一一对应;

还有说明一下

?
1
parameterType="User"

如果你没有在mybatis配置文件里面定义别名 这样写就会报错 你要把全类名写清楚

?
1
2
3
<typealiases>
       <typealias type="com.szz.bean.User" alias="User">
   </typealias></typealiases>

四、spring的配置文件 spring-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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 启动扫描szz下所有的注解--> <context:component-scan base-package="com.szz"><mvc:annotation-driven ignore-default-model-on-redirect="true"> <mvc:default-servlet-handler><!-- 可通过注解控制事务<tx:annotation-driven />   -->  <!-- 导入外部的资源文件   一般都会把数据源的配置文件房子properties文件里面  然后用这种方式来导入  <context:property-placeholder location="classpath:jdbc.properties"/>--><!--   配置DataSource数据源   配置mysql方式<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="root" /><property name="maxActive" value="5" /><property name="maxIdle" value="3" /><property name="maxWait" value="1000" /><property name="defaultAutoCommit" value="true" /><property name="removeAbandoned" value="true" /><property name="removeAbandonedTimeout" value="60" /></bean>  --><!-- 配置DataSource数据源    oracle方式--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:myoracle"><property name="username" value="SRC"><property name="password" value="src123456"></property></property></property></property></bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource" />  </bean>  -->  <!-- 创建SqlSessionFactory,同时指定数据源 <span id="blogcontent" style="font-family:tahoma, arial, 宋体, sans-serif;line-height: 24px; background-color: #ffffff;">SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,
在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。
通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。
所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。</span>--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"><property name="mapperLocations" value="classpath:com/szz/tables/xml/*.xml"> <property name="configLocation" value="classpath:mybatis-config.xml"></property>  </property></property></bean> <!-- jsp页面解析器,当Controller返回XXX字符串时,先通过拦截器,然后该类就会在/WEB-INF/views/目录下,查找XXX.jsp文件--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"><property name="suffix" value=".jsp"></property></property></bean><!--  Mapper接口所在包名,Spring会自动查找其下的Mapper  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  <property name="basePackage" value="com.szz.dao" />  </bean>  --><!-- ,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的 --><!-- 用户Dao --><bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">  <property name="mapperInterface" value="com.szz.dao.UserDao">  <property name="sqlSessionFactory" ref="sqlSessionFactory">  </property></property></bean></mvc:default-servlet-handler></mvc:annotation-driven></context:component-scan></beans>

配置文件说明: 详情见http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html

在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:

  • mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。

  • configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。

  • typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。

  • typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。

    • plugins:数组类型,用来指定Mybatis的Interceptor。

    • typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。

    • typeHandlers:数组类型,表示TypeHandler

    • 接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。

      定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

      对应xml

<!-- 用户Dao --><bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">  <property name="mapperInterface" value="com.szz.dao.UserDao">  <property name="sqlSessionFactory" ref="sqlSessionFactory">  </property></property></bean>

MapperScannerConfigurer

利用上面的方法进行整合的时候,我们有一个Mapper就需要定义一个对应的MapperFactoryBean,当我们的Mapper比较少的时候,这样做也还可以,但是当我们的Mapper相当多时我们再这样定义一个个Mapper对应的MapperFactoryBean就显得速度比较慢了。为此Mybatis-Spring为我们提供了一个叫做MapperScannerConfigurer的类,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象。

如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的MapperScannerConfigurer定义就是只指定一个basePackage属性,如:

Xml代码

bean>

这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。

五、创建mybatis-config.xml

<!--?xml version="1.0" encoding="UTF-8"?--><configuration><!--    <environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="oracle.jdbc.driver.OracleDriver" /><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:LEARN" /><property name="username" value="system" /><property name="password" value="src123456" /></dataSource></environment></environments> -->
<!--别名定义--><typealiases><typealias type="com.szz.bean.User" alias="User"></typealias></typealiases> <!-- 映射文件,存放sql语句的配置文件 --><!-- <mappers><mapper resource="com/szz/tables/xml/UserDaoMapper.xml" /></mappers> -->
</configuration>

六、创建services接口

package com.szz.service;import java.util.List;import com.szz.bean.User;public interface UserService {public List<user> getUsers();/** 濡傛灉ID涓虹┖灏辨壘username    濡傛灉username涓虹┖灏辨壘ID锛?閮藉~鎸夌収ID*/public User getUserInfo(String ID,String userName);public int getCount();//  public int saveUser(User user);public int insertUser(User user);public int updateUser(User user);public int deleteUser(String ID);
}

七‘services接口的实现类 serviceImpl

*/
package com.szz.service.impl;import java.util.List;import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.szz.bean.User;
import com.szz.dao.UserDao;
import com.szz.service.UserService;/*** @author Administrator**/
@Service("userService")
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;/*@Autowiredprivate SqlSessionTemplate sessionTemplate;*/public UserDao getUserDao() {return userDao;}/*** @param userDao the userDao to set*/public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic List<user> getUsers() {// TODO Auto-generated method stubreturn userDao.selectAll();//return sessionTemplate.getMapper(UserDao.class).selectAll();}@Overridepublic User getUserInfo(String ID, String userName) {// TODO Auto-generated method stubif(ID!=null){return userDao.findById(ID);}elsereturn userDao.findByUserName(userName);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn userDao.countAll();}@Overridepublic int insertUser(User user) {// TODO Auto-generated method stubreturn userDao.insert(user);}@Overridepublic int updateUser(User user) {// TODO Auto-generated method stubreturn userDao.update(user);}@Overridepublic int deleteUser(String ID) {// TODO Auto-generated method stubreturn userDao.delete(ID);}}

八、创建控制类controller包/**

package com.szz.action;import java.util.ArrayList;
import java.util.List;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.szz.base.acion.BaseAction;
import com.szz.bean.User;
import com.szz.service.UserService;/*** @author Administrator**/
@Controller
@RequestMapping(value="/user")
public class UserAction extends BaseAction {@Autowiredprivate UserService userService;@RequestMapping(value="/login",method=RequestMethod.POST)public String login(){ return "redirect:/user/userList";}@RequestMapping(value="userList")public ModelAndView showAll(){System.out.println("index......");ModelAndView MV = new ModelAndView("user/index");List<user> userList = new ArrayList<user>();userList = userService.getUsers();MV.addObject("userList",userList);return MV;}@RequestMapping(value="/add")public ModelAndView login(HttpServletRequest request,@RequestParam(value="username", required=true, defaultValue="szz") String name){ System.out.println("/user/login....");ModelAndView mv = new ModelAndView("user/success");  mv.addObject("add", "娣诲姞"); return mv;  }@RequestMapping(value="/edituser")public ModelAndView edit(@RequestParam(value="ID") String ID){ModelAndView mv = new ModelAndView("user/edit");User user = userService.getUserInfo(ID, null);mv.addObject("user",user);return mv;}@RequestMapping(value="/deleteuser")public String deleteuser(@RequestParam(value="ID") String ID){userService.deleteUser(ID);return "redirect:/user/userList";}@RequestMapping(value="/userset",method=RequestMethod.POST)  public String user(@ModelAttribute("user")User user ) {System.out.println(user.getNAME());return "user/success";   }@RequestMapping(value="/insertuser",method=RequestMethod.POST)  public String insertUser( User userInfo ) throws Exception {  userService.insertUser(userInfo);return "redirect:/user/userList";}@RequestMapping(value="/updateuser",method=RequestMethod.POST)  public String updateUser( User userInfo ) throws Exception {  userService.updateUser(userInfo);return "redirect:/user/userList";}}

九、web.xml

<!--?xml version="1.0" encoding="UTF-8"?-->
<web-app version="2.5" 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_2_5.xsd"><servlet><servlet-name>Dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-context.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>
index.jsp<form action="/SpringMvcMybatisFreeMarker/user/login" method="post">用户ID:<input name="id" value="" type="text"><br>用户名称:<input id="username" name="username" value="" type="text"><br>用户密码:<input name="password" value="" type="text"><br><input value="提交" type="submit">
</form>

user/index.jsp

<form action="user/insertuser" method="post">
<table><tbody><tr><th>ID</th><td><input name="ID" type="text"> </td></tr><tr></tr><tr><th>账号</th><td><input name="NAME" type="text"> </td></tr><tr><th>密码</th><td><input name="PASSWORD" type="text"></td></tr><tr><td colspan="2"><input value="添加" type="submit"> </td></tr>
</tbody></table>
</form><c:foreach items="${userList}" var="user"></c:foreach><table><tbody><tr><th>id</th><th>账号</th><th>密码</th><th>功能</th></tr><tr><td>${user.ID}</td><td>${user.NAME}</td><td>${user.PASSWORD}</td><td>修改   删除 </td></tr></tbody></table>

user/edit.jsp

<form action="user/updateuser" method="post">
<input name="ID" value="${user.ID}" type="text">
<table><tbody><tr> <th>账号</th><td><input name="NAME" value="${user.NAME}" type="text"></td></tr><tr><th>密码</th><td><input name="PASSWORD" value="${user.PASSWORD}" type="text"></td></tr><tr><td colspan="2"><input value="修改" type="submit"> </td></tr>
</tbody></table>
</form> 

访问:http://localhost:8080/SpringMvcMybatisFreeMarker/index.jsp

/**本文链接/http://www.2cto.com/kf/201411/354983.html

SpringMVC+Mybatis整合的增删改查相关推荐

  1. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  2. Mybatis基础:增删改查、模糊查询、多条件查询

    Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...

  3. SpringBoot + MyBatis + MySQL +IDEA2021 增删改查 2021-06-04

    SpringBoot + MyBatis + MySQL +IDEA2021 增删改查 1.环境介绍 Windows 10 JDK 1.8 MySQL 8 IDEA 2021.1.2 2.开始操作.新 ...

  4. myBatis 简单的增删改查

    myBatis 简单的增删改查 前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml 的配置文件中, mapper namespace="com.fjh.inte ...

  5. ssm整合的增删改查

    maven+ssm+bootstrap实现简单的增删改查 学习完ssm框架以后 做的第一个完整的增删改查 是在博客园找到的一个小demo,我自己稍微修改了一下,加入了bootstrap和mybatis ...

  6. 【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式

    文章目录 Mybatis 一.简介 1.持久化 2.持久层 3.为什么需要Mybatis? 二.第一个Mybatis程序 1.创建一个数据库 2.配置pom.xml文件 3.创建实体类 4.创建一个M ...

  7. mybatis教程--实现增删改查的入门教程

    1 开发环境 jdk1.7.0_72 eclipse:eclipse-3.7-indigo mysql:mysql5.1 1.1 创建数据库 先导入sql_table.sql,再导入sql_data. ...

  8. SpringBoot+Mybatis+thymeleaf实现增删改查

    一.今天用SpringBoot整合thymeleaf做一套增删改查 1.导入依赖 <dependency><groupId>org.mybatis.spring.boot< ...

  9. Spring Boot整合Mybatis-Plus 增删改查+ 分页基本使用完整示例

    写在前面 MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 "裸MyBatis",不来点增强插件都不好意思了.这不,在上一篇文章<Spring Boot项目利用 ...

最新文章

  1. 华为路由交换VRRP配置
  2. redmi airdots手动串联_串联谐振试验装置组成图
  3. 大数据学习笔记29:Hadoop压缩机制演示
  4. 笨方法学python3 mobi_[下载]Learn Python 3 the Hard Way(已更新完整版PDF\AZW3\EPUB\MOBI)...
  5. 装饰器python3 默认_python3【基础】-装饰器
  6. char*和CString转换
  7. 蒟蒻的HNOI2017滚粗记
  8. (七)python3 切片
  9. 3.2-点云配准原理概述
  10. Centeros常用命令
  11. php中while什么意思,php while 循环是什么意思 - php完全自学手册 - php中文网手册
  12. 如何打印计算机文档目录,word怎么把目录显示出来
  13. Linux服务器集群系统LVS(一)
  14. 用你的微笑魔力征服下属
  15. Python 弹出对话输入框
  16. 驱动VFD屏幕 / 真空荧光屏 (不完美)
  17. equals == equals(null) ==null区别
  18. 如何降低计算机版本,如何在win7系统电脑中将IE浏览器的版本降低
  19. linux毫米波雷达程序,用毫米波雷达数据做SLAM
  20. 基于Greenplum构建下一代数据分析平台

热门文章

  1. suricata源码之-流表管理
  2. 关于一加手机出现 qualcomm crashdump mode 解决办法
  3. java 复制 inputstream_关于对inputstream流的复制
  4. 时空趋势理论 --- 超越时空的均线技术(转载 )
  5. 计算圆环面积的c语言程序,C0610求圆环面积_C语言程序设计源代码_doc_大学课件预览_高等教育资讯网...
  6. gsonformat安装怎么使用_GSON的使用以及GsonFormat工具的安装
  7. 电脑连接电视.在电视上播放下载的大片(超详图解)
  8. struts2配置codebehind
  9. 使用winExec 、ShellExecute、ShellExecuteEx、CreateProcess创建进程
  10. ItelliJ idea 16专业版 激活(破解)