SpringMVC3+Mybatis3(登录及CRUD操作)
- 格式:doc
- 大小:20.78 KB
- 文档页数:19
请简述mybatis的crud注解及其作用。
MyBatis是一个Java持久层框架,它提供了多种方式来进行数据库的CRUD(增删改查)操作。
除了XML配置文件外,MyBatis还支持使用注解来进行CRUD操作。
在MyBatis中,有以下常用的CRUD注解及其作用:
1.@Select:用于执行查询操作的注解。
可以标注在接口的方法上,
指定SQL语句进行数据查询,并将结果封装到对应的Java对象中。
2.@Insert:用于执行插入操作的注解。
可以标注在接口的方法上,
指定SQL语句将数据插入到数据库表中。
3.@Update:用于执行更新操作的注解。
可以标注在接口的方法上,
指定SQL语句更新数据库表中的数据。
4.@Delete:用于执行删除操作的注解。
可以标注在接口的方法上,
指定SQL语句删除数据库表中的数据。
这些注解可以与SQL语句结合使用,通过在方法上添加相应的注解,可以直接执行对应的数据库操作,避免了手动编写SQL语句和繁琐的结果映射过程。
使用注解的方式可以简化代码,提高开发效率。
请注意的是,使用注解方式进行CRUD操作时,需要在MyBatis的配置文件中启用注解,并配置对应的扫描路径,以便MyBatis能够扫
描到相应的注解。
同时,还需要在接口上添加@Mapper注解或者在配置文件中进行映射配置,以便将接口与对应的SQL语句进行关联。
Mybatis实现数据的增删改查(CRUD)什么是 MyBatis?MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。
MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis下载:https:///mybatis/mybatis-3/releasesMybatis实例对一个User表的CRUD操作:User表:-- ------------------------------ Table structure for `user`-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11NOT NULL AUTO_INCREMENT,`userName` varchar(50 DEFAULT NULL,`userAge` int(11 DEFAULT NULL,`userAddress` varchar(200 DEFAULT NULL,PRIMARY KEY (`id`ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai';INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou';INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place';INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place';INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing';在Src目录下建一个mybatis的xml配置文件Configuration.xmlxml version="1.0" encoding="UTF-8" ?>DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="er"/>typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value="admin"/>dataSource>environment>environments><mappers><mapper resource="com/mybatis/test/User.xml"/>mappers>configuration>定义User mappers的User.xml配置文件xml version="1.0" encoding="UTF-8" ?>DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mybatis.test.IUserOperation"><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where user.id = #{id}select><select id="selectUsersByName" parameterType="string" resultType="User">select * from user where erName = #{userName}select><insert id="addUser" parameterType="User"useGeneratedKeys="true" keyProperty="id">insert into user(userName,userAge,userAddressvalues(#{userName},#{userAge},#{userAddress}insert><update id="updateUser" parameterType="User">update user setuserName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}update><delete id="deleteUser" parameterType="int">delete from user where id=#{id}delete>mapper>配置文件实现了接口和SQL语句的映射关系。
MyBatis整合Spring开发环境:System:WindowsWebBrowser:IE6+、Firefox3+JavaEE Server:tomcat5.0.2.8、tomcat6IDE:eclipse、MyEclipse 8Database:MySQL开发依赖库:JavaEE5、Spring 3.0.5、Mybatis 3.0.4、myBatis-spring-1.0、junit4.8.2Email:hoojo_@Blog:/IBM_hoojo/1、首先新建一个WebProject 命名为MyBatisForSpring,新建项目时,使用JavaEE5的lib库。
然后手动添加需要的jar包,所需jar包如下:2<!-- 设置Spring容器加载配置文件路径 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext-*.xml</param-value> </context-param><!-- 配置Spring核心控制器 --><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServl et</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/dispatcher.xml</param-value> </init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 解决工程编码过滤器 --><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncoding Filter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>3xsi:schemaLocation="/schema/bean s/schema/beans/spring-beans-3.0.x sd/schema/context/schema/context/spring-context-3 .0.xsd"><!-- 注解探测器 --><context:component-scan base-package="com.hoo"/><!-- annotation默认的方法映射适配器 --><bean id="handlerMapping"class="org.springframework.web.servlet.mvc.annotation.DefaultAnnot ationHandlerMapping"/><bean id="handlerAdapter"class="org.springframework.web.servlet.mvc.annotation.AnnotationMe thodHandlerAdapter"/></beans>4、在src目录下添加applicationContext-common.xml,内容如下:<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/bean s/schema/beans/spring-beans-3.0.x sd/schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd "><!-- 配置DataSource数据源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource "><property name="driverClassName"value="com.mysql.jdbc.Driver"/><property name="url"value="jdbc:mysql://10.0.0.131:3306/ash2"/><property name="username"value="dev"/><property name="password"value="dev"/></bean><!-- 配置SqlSessionFactoryBean --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource"ref="dataSource"/><property name="configLocation"value="classpath:mybatis.xml"/><!-- mapper和resultmap配置路径 --><property name="mapperLocations"><list><!-- 表示在com.hoo.resultmap包或以下所有目录中,以-resultmap.xml结尾所有文件 --><value>classpath:com/hoo/resultmap/**/*-resultmap.xml</value> <value>classpath:com/hoo/entity/*-resultmap.xml</value><value>classpath:com/hoo/mapper/**/*-mapper.xml</value></list></property></bean><!-- 单独配置一个Mapper;这种模式就是得给每个mapper接口配置一个bean --> <!--<bean id="accountMapper"class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface"value="com.hoo.mapper.AccountMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean><bean id="companyMapper"class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface"value="panyMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>--><!-- 通过扫描的模式,扫描目录在com/hoo/mapper目录下,所有的mapper都继承上面的配置最先配置的是DataSource,这里采用的是jdbc的DataSource;然后是SqlSessionFactoryBean,这个配置比较关键。
使用注解实现mybatis的crud操作实验原理随着互联网技术的发展,数据库的应用越来越广泛,其中MyBatis作为一款优秀的持久层框架,在Java开发中占据着重要的地位。
本文将介绍如何使用注解实现MyBatis的CRUD操作实验原理,包括增(insert)、查(select)、改(update)和删(delete)四个部分。
一、注解实现CRUD操作的前提条件首先,我们需要确保项目已经正确地引入了MyBatis的相关依赖,并且已经创建了对应的数据库表。
其次,需要熟悉MyBatis的注解使用方法,包括@Select、@Insert、@Update、@Delete等。
二、注解实现CRUD操作的步骤1.增(insert):使用@Insert注解实现插入操作。
首先需要编写对应的SQL语句,并将其放在@Insert注解中。
然后,在Java代码中调用MyBatis的SqlSession对象执行该SQL语句即可。
示例代码:```java@Insert("INSERTINTOuser(name,age)VALUES(#{name},#{age})")intinsertUser(Useruser);```2.查(select):使用@Select注解实现查询操作。
同样需要编写对应的SQL语句,并将其放在@Select注解中。
在Java代码中,可以直接调用SqlSession对象执行该SQL语句,获取查询结果。
示例代码:```javaList<User>userList=sqlSession.selectList("selectUser",use r);```3.改(update):使用@Update注解实现更新操作。
同样需要编写对应的SQL语句,并将其放在@Update注解中。
在Java代码中,可以使用SqlSession对象执行该SQL语句,更新数据库中的数据。
常见的 crud 操作
常见的 CRUD 操作是指在计算机编程中常用的四种基本数据操作,创建(Create)、读取(Read)、更新(Update)和删除(Delete)。
这些操作是在数据库和应用程序中经常使用的基本操作,用于管理数据和信息。
创建(Create)操作是指向数据库中添加新的数据记录,这可以通过插入新的行或者创建新的文档来实现。
在应用程序中,创建操作可以是用户注册新账户、添加新的产品信息或者创建新的文档等。
读取(Read)操作是指从数据库中检索数据记录,这可以通过查询语句来实现。
在应用程序中,读取操作可以是用户查看个人资料、浏览产品列表或者阅读文章等。
更新(Update)操作是指更新数据库中已有的数据记录,这可以通过修改现有的行或者更新文档来实现。
在应用程序中,更新操作可以是用户修改个人资料、编辑产品信息或者更新文章内容等。
删除(Delete)操作是指从数据库中移除数据记录,这可以通
过删除行或者删除文档来实现。
在应用程序中,删除操作可以是用户注销账户、移除产品信息或者删除文章等。
这四种基本的 CRUD 操作是构建应用程序和管理数据库中数据的基础。
它们为用户提供了管理和操作数据的方式,是编程中不可或缺的重要操作。
通过灵活运用这些操作,开发人员可以构建出功能强大且易于管理的应用程序和数据库系统。
Spring+SpringMVC+Mybatis(SSM)Demo(⼊门详细步骤) 菜鸟⼀枚,刚刚接触Spring不久,前段时间按照⽹上的demo写了下SSM,发现好多都不懂,好不容易程序能运⾏,也能出应有的结果,但想再次安全靠⾃⼰写⼀遍,各个步骤完全记不住,因此发⼀随笔做好记录,⽅便后续查看。
该随笔按我⾃⼰的步骤⼀⼀记录下来,内容包括SpringMVC的配置,以及mybatis generator⾃动⽣成xml配置、entity、dao层等信息。
本⼯程的编辑器⽤的是IDEA,数据库⽤的MySQL。
⼀、新建⼯程1、运⾏IDEA,选择创建⼀个新⼯程,选择maven,创建对应的java web项⽬。
2、填写GroupId和ArtifactId3、配置本地maven仓库(我这⾥已经配置过了,所以显⽰如下)更改maven的本地仓库——更改C:\Users\⽤户名\.m2\setting.xml⽂件(如果没有该⽂件,可以去“idea安装⽬录\plugins\maven\lib\maven3\conf”下复制过来,该⽬录是在安装idea时选择安装maven插件时⾃动⽣成的)中添加<localRepository>本地仓库地址</localRepository>4、填写⼯程名完成⼯程的创建。
5、为了去除spring等框架版本和jdk版本不兼容问题,在settings⾥修改⼯程的jdk版本。
6、更改项⽬结构(图中的xml⽂件都是后续创建的,可以不管)- java 主Java代码⽂件夹 - controller 控制器⽂件⽂件夹 - dao 数据访问层⽂件夹 - service 业务逻辑层⽂件夹 - entity 实体层⽂件夹- resources 资源⽂件夹(要将此定义为Sources Root,不然classpath不会指向该⽬录,卡了本菜鸟好久=_=。
右键选择Mark directory as-->Sources Root-->显⽰) - mapper mybatis sql⽂件夹- webapp web页⾯⽂件夹 -WEB-INF web应⽤的安全⽬录- test 测试⽂件夹⼆、Maven包的初始化1、修改pom.xml配置⽂件相关jar包的⾃动导⼊参考配置如下:1<?xml version="1.0" encoding="UTF-8"?>23<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">5<modelVersion>4.0.0</modelVersion>67<groupId>com.mycompany.app</groupId>8<artifactId>Demo</artifactId>9<version>1.0-SNAPSHOT</version>10<packaging>war</packaging>1112<name>Demo Maven Webapp</name>13<!-- FIXME change it to the project's website -->14<url></url>1516<dependencies>17<dependency>18<groupId>junit</groupId>19<artifactId>junit</artifactId>20<version>4.12</version>21<scope>test</scope>22</dependency>23<dependency>24<groupId>org.springframework</groupId>25<artifactId>spring-core</artifactId>26<version>4.3.5.RELEASE</version>27</dependency>28<dependency>29<groupId>org.springframework</groupId>30<artifactId>spring-aop</artifactId>31<version>4.3.5.RELEASE</version>32</dependency>33<dependency>34<groupId>org.springframework</groupId>35<artifactId>spring-orm</artifactId>36<version>4.3.5.RELEASE</version>37</dependency>38<dependency>39<groupId>org.springframework</groupId>40<artifactId>spring-tx</artifactId>41<version>4.3.5.RELEASE</version>42</dependency>43<dependency>44<groupId>org.springframework</groupId>45<artifactId>spring-test</artifactId>46<version>4.3.5.RELEASE</version>47</dependency>48<dependency>49<groupId>org.springframework</groupId>50<artifactId>spring-mock</artifactId>51<version>2.0.8</version>52</dependency>53<dependency>54<groupId>org.springframework</groupId>55<artifactId>spring-jdbc</artifactId>56<version>4.3.5.RELEASE</version>57</dependency>58<dependency>59<groupId>org.springframework</groupId>60<artifactId>spring-context</artifactId>61<version>4.3.5.RELEASE</version>62</dependency>63<dependency>64<groupId>org.springframework</groupId>65<artifactId>spring-context-support</artifactId>66<version>4.3.5.RELEASE</version>67</dependency>68<dependency>69<groupId>org.springframework</groupId>70<artifactId>spring-expression</artifactId>71<version>4.3.5.RELEASE</version>72</dependency>73<!--Spring Web + Spring MVC-->74<dependency>75<groupId>org.springframework</groupId>76<artifactId>spring-web</artifactId>77<version>4.3.1.RELEASE</version>78</dependency>79<dependency>80<groupId>org.springframework</groupId>81<artifactId>spring-webmvc</artifactId>82<version>4.3.1.RELEASE</version>83</dependency>84<dependency>85<groupId>com.github.pagehelper</groupId>86<artifactId>pagehelper</artifactId>87<version>3.7.3</version>88</dependency>89<dependency>90<groupId>com.github.jsqlparser</groupId>91<artifactId>jsqlparser</artifactId>92<version>0.9.1</version>93</dependency>94<!--mysql jdbc-->95<dependency>96<groupId>mysql</groupId>97<artifactId>mysql-connector-java</artifactId>98<version>5.1.38</version>99</dependency>100<!--c3p0-->101<dependency>102<groupId>c3p0</groupId>103<artifactId>c3p0</artifactId>104<version>0.9.1.2</version>105</dependency>106<!--NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config--> 107<!-- https:///artifact/jstl/jstl -->108<dependency>109<groupId>jstl</groupId>110<artifactId>jstl</artifactId>111<version>1.2</version>113<!--file upload jar package-->114<!-- https:///artifact/commons-fileupload/commons-fileupload -->115<dependency>116<groupId>commons-fileupload</groupId>117<artifactId>commons-fileupload</artifactId>118<version>1.3.1</version>119</dependency>120<!-- https:///artifact/commons-io/commons-io -->121<dependency>122<groupId>commons-io</groupId>123<artifactId>commons-io</artifactId>124<version>2.4</version>125</dependency>126<!-- https:///artifact/commons-lang/commons-lang -->127<dependency>128<groupId>commons-lang</groupId>129<artifactId>commons-lang</artifactId>130<version>2.6</version>131</dependency>132<!-- https:///artifact/commons-beanutils/commons-beanutils -->133<dependency>134<groupId>commons-beanutils</groupId>135<artifactId>commons-beanutils</artifactId>136<version>1.8.3</version>137</dependency>138<!-- https:///artifact/commons-collections/commons-collections -->139<dependency>140<groupId>commons-collections</groupId>141<artifactId>commons-collections</artifactId>142<version>3.2.1</version>143</dependency>144<!-- https:///artifact/commons-logging/commons-logging -->145<dependency>146<groupId>commons-logging</groupId>147<artifactId>commons-logging</artifactId>148<version>1.2</version>149</dependency>150<!-- https:///artifact/net.sf.ezmorph/ezmorph -->151<dependency>152<groupId>net.sf.ezmorph</groupId>153<artifactId>ezmorph</artifactId>154<version>1.0.6</version>155</dependency>156<!--json serialize and deserialization-->157<!-- 引⼊fastjson依赖 -->158<dependency>159<groupId>com.alibaba</groupId>160<artifactId>fastjson</artifactId>161<version>1.2.12</version>162</dependency>163<!-- 引⼊gson依赖 -->164<dependency>165<groupId>com.google.code.gson</groupId>166<artifactId>gson</artifactId>167<version>2.6.2</version>168</dependency>169<!--Base64 加解密-->170<!-- https:///artifact/net.iharder/base64 -->171<dependency>172<groupId>net.iharder</groupId>173<artifactId>base64</artifactId>174<version>2.3.8</version>175</dependency>176<!-- https:///artifact/commons-codec/commons-codec -->177<dependency>178<groupId>commons-codec</groupId>179<artifactId>commons-codec</artifactId>180<version>1.10</version>181</dependency>182<!--log4j-->183<!-- https:///artifact/org.apache.logging.log4j/log4j-core -->184<dependency>185<groupId>org.apache.logging.log4j</groupId>186<artifactId>log4j-core</artifactId>187<version>2.6.2</version>188</dependency>189<dependency>190<groupId>org.jetbrains</groupId>191<artifactId>annotations-java5</artifactId>192<version>RELEASE</version>193</dependency>194<!--mybatis 应⽤mybatis需要导⼊mybatis,将mybatis和spring整合在⼀起需要导⼊mybatis-spring--> 195<dependency>196<groupId>org.mybatis</groupId>197<artifactId>mybatis</artifactId>198<version>3.3.0</version>199</dependency>200<dependency>201<groupId>org.mybatis</groupId>202<artifactId>mybatis-spring</artifactId>203<version>1.2.3</version>204</dependency>205<dependency>206<groupId>org.mybatis.generator</groupId>207<artifactId>mybatis-generator-core</artifactId>208<version>1.3.2</version>209</dependency>211212<build>213<finalName>Demo</finalName>214<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->215<plugins>216<plugin>217<artifactId>maven-clean-plugin</artifactId>218<version>3.0.0</version>219</plugin>220<!-- see /ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->221<plugin>222<artifactId>maven-resources-plugin</artifactId>223<version>3.0.2</version>224</plugin>225<plugin>226<artifactId>maven-compiler-plugin</artifactId>227<version>3.7.0</version>228</plugin>229<plugin>230<artifactId>maven-surefire-plugin</artifactId>231<version>2.20.1</version>232</plugin>233<plugin>234<artifactId>maven-war-plugin</artifactId>235<version>3.2.0</version>236</plugin>237<plugin>238<artifactId>maven-install-plugin</artifactId>239<version>2.5.2</version>240</plugin>241<plugin>242<artifactId>maven-deploy-plugin</artifactId>243<version>2.8.2</version>244</plugin>245</plugins>246</pluginManagement>247</build>248</project>View Code三、SpringMVC的配置1、(⼀般在resource⽂件夹或者WEB-INF⽂件夹)新建spring-servlet.xml⽂件(⽂件名称⼀般为“xxx-servlet.xml”),声明SpringMVC框架对控制器、页⾯、资源的访问。
Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory一、摘要上两篇文章分别介绍了Spring3.3 整合Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法和Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言),这篇文章将介绍Spring整合Mybatis 如何完成SqlSessionFactory的动态切换的。
并且会简单的介绍下MyBatis整合Spring中的官方的相关代码。
Spring整合MyBatis切换SqlSessionFactory有两种方法,第一、继承SqlSessionDaoSupport,重写获取SqlSessionFactory的方法。
第二、继承SqlSessionTemplate 重写getSqlSessionFactory、getConfiguration和SqlSessionInterceptor这个拦截器。
其中最为关键还是继承SqlSessionTemplate 并重写里面的方法。
而Spring整合MyBatis也有两种方式,一种是配置MapperFactoryBean,另一种则是利用MapperScannerConfigurer进行扫描接口或包完成对象的自动创建。
相对来说后者更方便些。
MapperFactoryBean继承了SqlSessionDaoSupport也就是动态切换SqlSessionFactory的第一种方法,我们需要重写和实现SqlSessionDaoSupport方法,或者是继承MapperFactoryBean 来重写覆盖相关方法。
如果利用MapperScannerConfigurer的配置整合来切换SqlSessionFactory,那么我们就需要继承SqlSessionTemplate,重写上面提到的方法。
在整合的配置中很多地方都是可以注入SqlSessionTemplate代替SqlSessionFactory的注入的。
(完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis))的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)的全部内容。
(完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)编辑整理:张嬗雒老师尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布到文库,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是我们任然希望(完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 这篇文档能够给您的工作和学习带来便利。
同时我们也真诚的希望收到您的建议和反馈到下面的留言区,这将是我们进步的源泉,前进的动力.本文可编辑可修改,如果觉得对您有帮助请下载收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为〈(完整版)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)> 这篇文档的全部内容.SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。
之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。
SpringMVC实现⼀次简单的CRUD⽰例基本环境搭建1、数据库和实体类的名字相同,实体类属性名即数据库字段名。
2、创建实体类对应 dao 类,持久层框架 mybatis 正处于学习中,这⾥就⽤原始的 jdbc 操作了。
3、创建⼀个 java 类,作为 Controller,处理请求。
4、CRUD 涉及到显⽰数据、修改、添加的页⾯;删除就不需要了,修改和添加使⽤同⼀个页⾯。
所以就有 index.jsp(⼀个超链接跳转到 show.jsp)、show.jsp(显⽰所有员⼯信息和操作链接)、input.jsp(⽤于修改和添加)。
具体实现接下来就是 CRUD 的具体实现了,顺序为查询显⽰所有员⼯信息-->删除-->添加-->修改。
在具体的实现前,需要了解⼀下 Controller 类的⼤致结构:package com.taohan.controller;//import *;@Controller@SuppressWarnings("all")public class CURD {@Autowiredprivate DepartmentInfoDao departDao;@Autowiredprivate EmployeeInfoDao empDao;//在后⾯的具体描述中,就只贴出处理对应请求的⽅法代码了}查询①在 index.jsp 页⾯中加⼊下⾯超链接,⽤于获取到所有员⼯集合,保存到域对象中,最后转发(内部跳转) 到 show.jsp 进⾏显⽰。
<a href="emps" rel="external nofollow" >员⼯信息</a>②该请求会交由 Controller 中的指定⽅法处理,下⾯就需要定义处理该请求的⽅法。
//获取所有的员⼯信息@RequestMapping("/emps")public String getemps(Map<String, Object> map) {//获取员⼯集合,存⼊ map 集合中map.put("emps", empDao.getEmployees());return "show";}③现在已经获取到了员⼯集合了,接下来就是编写 show.jsp 页⾯了。
官网:/p/mybatis/参考资料1 兼顾效率,iBatis一些非见用法(10条)/62575/202886/2 整合Mybatis与Spring3/topic/1018134一环境:XP3+Oracle10g+MyEclipse6+(Tomcat or WebLogic92)+JDK1.5二工程文件: Spring3+MyIbatis3工程图片:jar下载:/topics/download/d209389e-ecac-390e-85c7-c08849f50348三具体代码如下:1 数据库文件create table USERS(id VARCHAR2(50) not null,name VARCHAR2(50),age INTEGER,sex VARCHAR2(1),address VARCHAR2(200),password VARCHAR2(20))insert into users (id,name,age,sex,address,password)VALUES(";123456789";,";sprng";,23,";1";,";北京大学";,";123";);2 Java相关文件A UserMapper.javapackage com.liuzd.ssm.mapper;import java.util.List;import er;public interface UserMapper{public int checkUserExits(User user);public void addUser(User user);public void editUser(User user);public void delUser(String userId);public List<;User>; getUserList();public User getUserByUid(String userId);}B UserMapper.xml文件<;?xml version=";1.0"; encoding=";UTF-8";?>;<;!DOCTYPE mapper PUBLIC ";-////DTD Mapper 3.0//EN"; ";/dtd/mybatis-3-mapper.dtd";>;<;mapper namespace=";erMapper";>;<;resultMap type=";er"; id=";userMap";>; <;id property=";id"; column=";id";/>;<;result property=";name"; column=";name";/>;<;result property=";age"; column=";age";/>;<;result property=";sex"; column=";sex";/>;<;result property=";address"; column=";address";/>;<;result property=";password"; column=";password";/>;<;/resultMap>;<;select id=";checkUserExits"; parameterType=";er"; resultType=";int";>;<;![CDATA[select count(*) from users where name=#{name} and password=#{password} ]]>;<;/select>;<;select id=";getUserList"; resultType=";java.util.List"; resultMap=";userMap";>;<;![CDATA[select * from users]]>;<;/select>;<;select id=";getUserByUid"; parameterType=";string"; resultType=";er";>;<;![CDATA[select * from users where id=#{id}]]>;<;/select>;<;update id=";editUser"; parameterType=";er";>;<;![CDATA[update users set name=#{name},age=#{age},sex=#{sex},address=#{address},password=#{password} where id=#{id}]]>;<;/update>;<;insert id=";addUser"; parameterType=";er";>;<;![CDATA[insert into users (id,name,age,sex,address,password)VALUES(#{id},#{name},#{age},#{sex},#{address}, #{password})]]>;<;/insert>;<;delete id=";delUser"; parameterType=";string";>;<;![CDATA[delete users where id=#{id}]]>;<;/delete>;<;/mapper>;C UserService.javapackage com.liuzd.ssm.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import er;import erMapper;@Service(";userService";)public class UserService {@Autowiredprivate UserMapper userMapper;public void addUser(User user) {erMapper.addUser(user);}public int checkUserExits(User user) {return erMapper.checkUserExits(user);}public void delUser(String userId) {erMapper.delUser(userId);}public User getUserByUid(String userId) {return (User)erMapper.getUserByUid(userId);}public List<;User>; getUserList() {return (List<;User>;)erMapper.getUserList();}public void editUser(User user) {erMapper.editUser(user);}}D WEB层调用代码a LoginController.javapackage com.liuzd.ssm.web;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;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.servlet.ModelAndView;import er;import erService;@Controller@RequestMapping(";/login";)public class LoginController {private UserService userService;public UserService getUserService() {return userService;}@Resourcepublic void setUserService(UserService userService) {erService = userService;}@SuppressWarnings(";unchecked";)@RequestMapping(";add";)//@ModelAttribute 可加可不加,url: http://127.0.0.1:8088/ssm/user/add.dopublic String login(User user, HttpServletRequest req, HttpServletResponse response) {// 此处调用服务层进行相应的业务操作// 传递对象于下一页面req.setAttribute(";user";, user);// 调用服务层进行验证用户,此处只演示功能int usize = getUserService().checkUserExits(user);System.out.println(";用户信息: "; + user + ";,usize: ";+usize);if (usize >; 0) {//return ";success";;List<;User>; useralls = this.getUserService().getUserList();req.setAttribute(";userList";, useralls);return ";userList";;}return ";error";;}@SuppressWarnings(";unchecked";)// @RequestMapping(params= ";method=add2";,method=RequestMethod.POST)// 定义method方法不是必须的@RequestMapping(params = ";method=add2";)public ModelAndView login2(@ModelAttribute(";user";)User user, HttpServletRequest req, HttpServletResponse response) {// 使用ModelAndView保存对象于下一页面ModelAndView model = new ModelAndView();model.addObject(";user";, user);// 调用服务层进行验证用户,此处只演示功能int usize = getUserService().checkUserExits(user);System.out.println(";用户信息2: "; + user + ";,usize: ";+usize);if (usize >; 0) {List<;User>; useralls = this.getUserService().getUserList();model.addObject(";userList";, useralls);model.setViewName(";userList";);} else {model.addObject(";msg";,";用户或者密码错误!";);model.setViewName(";error";);}return model;}@RequestMapping(value=";add3/{name}/{password}";,method=RequestMethod.GET) public String login3(@PathVariable(";name";) String name,@PathVariable(";password";) String pwd,Model model) {User user = new User();user.setName(name);user.setPassword(pwd);model.addAttribute(";user";,user);// 调用服务层进行验证用户,此处只演示功能int usize = getUserService().checkUserExits(user);System.out.println(";用户信息3: ";+user + ";,size: "; + usize);if (usize >; 0) {return ";success";;}//放入model默认把参数存于请求model.addAttribute(";msg";,";用户或者密码错误!";);return ";error";;/*** 重定向JSP页面,走出了springmvc配置的view(jsp)* 因为这样说明:model.addAttribute(";msg";,";用户或者密码错误!";);* 获取不到值了* 不加上.jsp就是这样:http://127.0.0.1:8080/Spring3-Login-Annotaction/index?msg=%E7...* *///返回到页面是乱码在页面中用${msg}获取不到值,用request.getParams(";msg";);为乱码//return ";redirect:index.jsp?msg=用户或者密码错误!";;}}b UserController.javapackage com.liuzd.ssm.web;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.SessionAttributes;import org.springframework.web.servlet.ModelAndView;import er;import erService;@Controller@RequestMapping(";/user";)@SessionAttributes(";userList";)public class UserController {private UserService userService;public UserService getUserService() {return userService;}@Resourcepublic void setUserService(UserService userService) {erService = userService;}@RequestMapping(";/userList";)public ModelAndView userList(){/*** 想要在页面展现数据,必须返回ModelAndView类型,返回String是不能获取数据的* */ModelAndView mv = new ModelAndView();List<;User>; users = this.getUserService().getUserList();mv.addObject(";userList";,users);mv.setViewName(";userList";);return mv;}@RequestMapping(";/addUser";)public ModelAndView addUser(User user){System.out.println(";ADD USER: ";+ user);erService.addUser(user);return userList();}@RequestMapping(";/toAddUser";)public String toAddUser(){return ";addUser";;}@RequestMapping(";/delUser/{id}";)public ModelAndView delUser(@PathVariable(";id";) String id){ erService.delUser(id);return userList();}@RequestMapping(";/getUser/{id}";)public ModelAndView getUser(@PathVariable(";id";) String id){ User user = erService.getUserByUid(id);ModelAndView mv = new ModelAndView(";updateUser";);mv.addObject(";user";,user);return mv;}@RequestMapping(";/updateUser";)public ModelAndView editUser(User user){System.out.println(";编辑: ";+user);erService.editUser(user);return userList();}}3 JSp文件A index.jsp<;%@ page language=";java"; pageEncoding=";UTF-8"; contentType=";text/html; charset=UTF-8";%>;<;!DOCTYPE HTML PUBLIC ";-//W3C//DTD HTML 4.01 Transitional//EN";>;<;html>;<;head>;<;%@ include file=";/common/meta.jsp";%>;<;/head>;<;body>;<;form action=";${pageContext.request.contextPath}/login/add.do"; method=";post";>;姓名: <;input type=";text"; name=";name"; id=";name";>;<;br>;密码: <;input type=";password"; name=";password"; id=";password";>;<;br>; <;input type=";submit"; value=";Login";>;<;/form>; <;br>;<;form action=";${pageContext.request.contextPath}/login.do?method=add2"; method=";post";>;姓名: <;input type=";text"; name=";name"; id=";name";>;<;br>;密码: <;input type=";password"; name=";password"; id=";password";>;<;br>; <;input type=";submit"; value=";Login2";>;<;/form>;<;br>;<;ahref=";${pageContext.request.contextPath}/login/add3/spring/spring.do";>;Spring MVC RESL风格<;/a>;<;/body>;<;/html>;B addUser.jsp<;%@ page language=";java"; contentType=";text/html; charset=UTF-8"; pageEncoding=";UTF-8";%>;<;%@ page import=";ng3.RandomStringUtils";%>;<;%String id = RandomStringUtils.randomAlphanumeric(32);%>;<;html>;<;head>;<;title>;用户信息<;/title>;<;/head>;<;body>;<;form action=";${pageContext.request.contextPath}/user/addUser.do"; method=";post";>;<;br>;<;table>;<;tr>;<;td>;<;input name=";id"; type=";hidden"; value=";<;%=id%>;";>;姓名: <;input name=";name";>;<;/td>;<;/tr>;<;tr>;<;td>;年龄: <;input name=";age";>;<;/td>;<;/tr>;<;tr>;<;td>;性别: <;select name=";sex";>;<;option value=";1";>;男<;/option>;<;option value=";2";>;女<;/option>;<;/select>;<;/td>;<;/tr>;<;tr>;<;td>;密码: <;input name=";password";>;<;/td>;<;/tr>;<;tr>;<;td>;地址:<;input name=";address";/>;<;/td>;<;/tr>;<;tr>;<;td align=";right";>;<;input type=";submit"; vlaue=";保存";/>;<;/td>;<;/tr>;<;/table>;<;/form>;<;br>;<;a href=";${pageContext.request.contextPath}/index.jsp";>;返回主页<;/a>;<;br>; <;a href=";${pageContext.request.contextPath}/user/userList.do";>;返回显示<;/a>; <;/body>;<;/html>;C updateUser.jsp<;%@ page language=";java"; contentType=";text/html; charset=UTF-8"; pageEncoding=";UTF-8";%>;<;html>;<;head>;<;title>;编辑用户信息<;/title>;<;/head>;<;body>;<;form action=";${pageContext.request.contextPath}/user/updateUser.do"; method=";post";>;<;br>;<;table>;<;tr>;<;td>;<;input name=";id"; type=";hidden"; value=";${user.id}";>;姓名: <;input name=";name"; value=";${}";>; <;/td>;<;/tr>;<;tr>;<;td>;年龄: <;input name=";age"; value=";${user.age}";>;<;/td>;<;/tr>;<;tr>;<;td>;性别: <;select name=";sex";>;<;option value=";1"; ${user.sex eq ";1"; ? ";selected"; : ";";}>;男<;/option>;<;option value=";2"; ${user.sex eq ";2"; ? ";selected"; : ";";}>;女<;/option>;<;/select>;<;/td>;<;/tr>;<;tr>;<;td>;密码: <;input name=";password"; value=";${user.password}";>;<;/td>;<;/tr>;<;tr>;<;td>;地址:<;input name=";address"; value=";${user.address}";/>;<;/td>;<;/tr>;<;tr>;<;td align=";right";>;<;input type=";submit"; vlaue=";保存";/>;<;/td>;<;/tr>;<;/table>;<;/form>;<;br>;<;a href=";${pageContext.request.contextPath}/index.jsp";>;返回主页<;/a>;<;br>; <;a href=";${pageContext.request.contextPath}/user/userList.do";>;返回集合显示<;/a>;<;/body>;<;/html>;D userList.jsp<;%@ page language=";java"; pageEncoding=";UTF-8"; contentType=";text/html; charset=UTF-8";%>;<;%@ taglib uri=";/WEB-INF/c.tld"; prefix=";c";%>;<;!DOCTYPE HTML PUBLIC ";-//W3C//DTD HTML 4.01 Transitional//EN";>;<;html>;<;head>;<;%@ include file=";/common/meta.jsp";%>;<;/head>;<;body>;<;table width=";60%"; border=";1"; cellpadding=";0"; align=";center";>;<;thead>;<;tr>;<;th style=";cursor: hand;"; title=";按姓名进行排序"; onclick=";sortPage('name')"; valign=";top";>;姓名<;/th>;<;th style=";cursor: hand;"; title=";按年龄进行排序";onclick=";sortPage('age')"; valign=";top";>;年龄<;/th>;<;th style=";cursor: hand;"; title=";按性别进行排序"; onclick=";sortPage('sex')"; valign=";top";>;性别<;/th>;<;th style=";cursor: hand;"; title=";按地址进行排序"; onclick=";sortPage('address')"; valign=";top";>;地址<;/th>;<;th style=";cursor: hand;"; >;操作<;/th>;<;/tr>;<;/thead>;<;tbody>;<;c:forEach items=";${userList}"; var=";user";>;<;tr align=";center";>;<;td>;${}<;/td>;<;td>;${user.age}<;/td>;<;td>;${user.sex eq 1 ? ";男"; : user.sex eq 2 ? ";女"; : ";未知";}<;/td>;<;td>;${user.address}<;/td>;<;td>;<;ahref=";${pageContext.request.contextPath}/user/toAddUser.do";>;添加<;/a>;|<;ahref=";${pageContext.request.contextPath}/user/getUser/${user.id}.do";>;编辑<;/a>;|<;ahref=";${pageContext.request.contextPath}/user/delUser/${user.id}.do";>;删除<;/a>;<;/td>;<;/tr>;<;/c:forEach>;<;/tbody>;<;/table>;<;br>;<;a href=";${pageContext.request.contextPath}/index.jsp";>;返回<;/a>;<;/body>;<;/html>;4 配置文件a web.xml<;?xml version=";1.0"; encoding=";UTF-8";?>;<;web-app version=";2.5"; xmlns=";/xml/ns/javaee";xmlns:xsi=";/2001/XMLSchema-instance";xsi:schemaLocation=";/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd";>;<;context-param>;<;param-name>;webAppRootKey<;/param-name>;<;param-value>;ssm.root<;/param-value>;<;/context-param>;<;context-param>;<;param-name>;contextConfigLocation<;/param-name>;<;param-value>;classpath*:applicationContext.xml<;/param-value>;<;/context-param>;<;context-param>;<;param-name>;log4jConfigLocation<;/param-name>;<;param-value>;/WEB-INF/classes/log4j.properties<;/param-value>;<;/context-param>;<;context-param>;<;param-name>;log4jRefreshInterval<;/param-name>;<;param-value>;60000<;/param-value>;<;/context-param>;<;context-param>;<;param-name>;log4jExposeWebAppRoot<;/param-name>;<;param-value>;false<;/param-value>;<;/context-param>;<;listener>;<;listener-class>;org.springframework.web.context.ContextLoaderListener<;/listener-class>;<;/listener>;<;listener>;<;listener-class>;org.springframework.web.util.Log4jConfigListener <;/listener-class>;<;/listener>;<;filter>;<;filter-name>;encodingFilter<;/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>;false<;/param-value>;<;/init-param>;<;/filter>;<;filter-mapping>;<;filter-name>;encodingFilter<;/filter-name>;<;url-pattern>;*.do<;/url-pattern>;<;/filter-mapping>;<;filter-mapping>;<;filter-name>;encodingFilter<;/filter-name>;<;url-pattern>;*.jsp<;/url-pattern>;<;/filter-mapping>;<;servlet>;<;servlet-name>;springmvc<;/servlet-name>;<;servlet-class>;org.springframework.web.servlet.DispatcherServlet <;/servlet-class>;<;init-param>;<;param-name>;contextConfigLocation<;/param-name>;<;param-value>;classpath:springmvc.xml<;/param-value>;<;/init-param>;<;load-on-startup>;1<;/load-on-startup>;<;/servlet>;<;servlet-mapping>;<;servlet-name>;springmvc<;/servlet-name>;<;url-pattern>;*.do<;/url-pattern>;<;/servlet-mapping>;<;!-- weblogic配置数据源需要<;resource-ref>;<;description>;s2sh<;/description>;<;res-ref-name>;s2sh<;/res-ref-name>;<;res-type>;javax.sql.DataSource<;/res-type>;<;res-auth>;Container<;/res-auth>;<;/resource-ref>;-->;<;welcome-file-list>;<;welcome-file>;index.jsp<;/welcome-file>;<;/welcome-file-list>;<;/web-app>;b applicationContext.xml<;?xml version=";1.0"; encoding=";UTF-8";?>;<;beans xmlns=";/schema/beans";xmlns:xsi=";/2001/XMLSchema-instance";xmlns:context=";/schema/context";xmlns:aop=";/schema/aop";xmlns:tx=";/schema/tx";xsi:schemaLocation=";/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd /schema/aop/schema/aop/spring-aop-3.0.xsd/schema/tx/schema/tx/spring-tx-3.0.xsd";>;<;context:annotation-config />;<;context:component-scan base-package=";com.liuzd.ssm.service"; />;<;beanclass=";org.springframework.beans.factory.config.PropertyPlaceholderConfigur er";>;<;property name=";locations";>;<;value>;classpath:jdbc.properties<;/value>;<;/property>;<;/bean>;<;bean id=";dataSource"; class=";mons.dbcp.BasicDataSource";destroy-method=";close";>;<;property name=";driverClassName"; value=";${jdbc.driverClassName}";/>;<;property name=";url"; value=";${jdbc.url}"; />;<;property name=";username"; value=";${ername}"; />;<;property name=";password"; value=";${jdbc.password}"; />;<;/bean>;<;!--<;bean id=";dataSource"; class=";org.springframework.jndi.JndiObjectFactoryBean";>;<;property name=";jndiName";>;<;value>;${JNDI}<;/value>;<;/property>;<;property name=";resourceRef";>;<;value>;${RESOURCEREF}<;/value>;<;/property>;<;property name=";jndiEnvironment";>;<;props>;<;propkey=";java.naming.provider.url";>;${Context.PROVIDER_URL}<;/prop>;<;propkey=";java.naming.factory.initial";>;${Context.INITIAL_CONTEXT_FACTORY}<;/prop>;<;/props>;<;/property>;<;/bean>; -->;<;!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean -->;<;bean id=";sqlSessionFactory"; class=";org.mybatis.spring.SqlSessionFactoryBean";>;<;property name=";dataSource"; ref=";dataSource"; />;<;!--<;property name=";configLocation"; value=";classpath*:mybatis-config.xml";/>;-->;<;/bean>;<;!-- scan for mappers and let them be autowired -->;<;bean class=";org.mybatis.spring.mapper.MapperScannerConfigurer";>;<;property name=";basePackage"; value=";com.liuzd.ssm.mapper"; />;<;/bean>;<;/beans>;。