Spring + Mybatis + SpringMvc 框架搭建小结
来源:互联网 发布:网络分层结构模型 编辑:程序博客网 时间:2024/04/27 23:57
附参考博文地址:http://blog.csdn.net/gebitan505/article/details/44455235
一、maven项目构建(此处暂略)
二、集成Spring与Mybatis
Maven引入需要的jar包——pom.xml
在pom.xml中配置所需jar包,网上可找到大量范例,此处以笔者构建的项目为例,用时需注意jar包的版本。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>QF</groupId> <artifactId>happyFarm</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>happyFarm Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <spring.version>4.1.4.RELEASE</spring.version> <shiro.version>1.2.3</shiro.version> <mybatis.version>3.2.8</mybatis.version> <mybatis-spring.version>1.2.2</mybatis-spring.version> <mysql.version>5.1.26</mysql.version> <druid.version>1.0.9</druid.version> <log4j.version>1.2.17</log4j.version> <slf4j.version>1.7.5</slf4j.version> <commons-lang3.version>3.1</commons-lang3.version> <commons-io.version>2.4</commons-io.version> <commons-codec.version>1.8</commons-codec.version> <commons-fileupload.version>1.3.1</commons-fileupload.version> <commons-beanutils.version>1.8.3</commons-beanutils.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.7</jdk.version> </properties> <dependencies> <!-- junit 测试包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- servlet 服务包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>runtime</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!--Apache Shiro所需的jar包 --> <!-- <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${shiro.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>${shiro.version}</version> </dependency> --> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- ################### json解释 ################ --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.4</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.4</version> </dependency> <!-- ############################################## --> <!--json-lib --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <!-- aop代理 --> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version> 1.6.11</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- GENERAL UTILS begin <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>${commons-beanutils.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <finalName>happyFarm</finalName> </build></project>
配置数据库连接——jdbc.properties
此处需要注意数据库名(myhappyfarm),数据库用户名(root),密码(“”),以及字符编码(useUnicode=true&characterEncoding=UTF-8),以上均以笔者所用框架为例。
jdbc.driverClass = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/myhappyfarm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNulljdbc.username = rootjdbc.password = jdbc.minPoolSize=2jdbc.maxPoolSize=20jdbc.checkoutTimeout=3000jdbc.maxStatements=50jdbc.testConnectionOnCheckin = falsejdbc.idleConnectionTestPeriod = 18000
配置Spring与Mybatis配置文件——spring-mybatis.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:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd" default-lazy-init="true"> <!-- 定时器开关 开始 --> <task:annotation-driven /> <!-- 标注类型 的事务配置 如果使用注解事务。就放开 <tx:annotation-driven /> --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driverClass}" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动匹配Mapper映射文件 --> <!--Remember fucking this!!! --> <property name="mapperLocations" value="classpath:com/happyFarm/mapping/*.xml" /> <property name="typeAliasesPackage" value="com.happyFarm.model" /> </bean> <!-- 通过扫描的模式,扫描目录在com.lanyuan.mapper目录下,所有的mapper都继承SqlMapper接口的接口, 这样一个bean就可以了 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.happyFarm.dao" /> </bean> <!-- 事务配置 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <aop:config> <aop:pointcut expression="execution(public * com.happyFarm.service.*Impl.*(..))" id="pointcut" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="query*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="logicDelById" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <tx:annotation-driven /> <!-- 使用Spring组件扫描的方式来实现自动注入bean --> <context:component-scan base-package="com.happyFarm.service.impl.**" /> <!-- 隐式地向 Spring 容器注册 --> <context:annotation-config /></beans>
配置*.Mapper.xml的路径以及实体类路径(这里定义了mapperLocation)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动匹配Mapper映射文件 --> <property name="mapperLocations" value="classpath:com/happyFarm/mapping/*.xml" /> <property name="typeAliasesPackage" value="com.happyFarm.model" /></bean>
注入service层的实现类
<!-- 使用Spring组件扫描的方式来实现自动注入bean --><context:component-scan base-package="com.happyFarm.service.impl.**" />
log4j配置,基本无需改变,通用
######################################################################## Categories and levels########################################################################log4j.appender.stdout=org.apache.log4j.ConsoleAppender#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n#log4j.logger.com.ibatis=debug#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug#log4j.logger.java.sql.Connection=debug#log4j.logger.java.sql.Statement=debug#log4j.logger.java.sql.PreparedStatement=debug,stdout# 每天生成一个文件 设置为FileApp,ConApp log4j.rootCategory=FileApp, ConApplog4j.category.com.gzedu = debuglog4j.category.com.ibatis = debuglog4j.category.freemarker = errorlog4j.category.org.springframework = errorlog4j.category.com.opensymphony = infolog4j.category.org.apache = infolog4j.category.java.sql = debug######################################################################## Appenders######################################################################## ConApp is set to be a ConsoleAppender.log4j.appender.ConApp=org.apache.log4j.ConsoleAppender# ConApp uses PatternLayout.log4j.appender.ConApp.layout=org.apache.log4j.PatternLayout# Define Patternlog4j.appender.ConApp.layout.ConversionPattern=%p %d{yyyy-MM-dd HH:mm:ss,SSS} %c.%t %m%n# FileApp#log4j.appender.FileApp=org.apache.log4j.RollingFileAppenderlog4j.appender.FileApp=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.FileApp.DatePattern ='_'yyyy-MM-dd'.log'log4j.appender.FileApp.File=${project}WEB-INF/logs/loglog4j.appender.FileApp.layout=org.apache.log4j.PatternLayoutlog4j.appender.FileApp.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %5p %c{1}:%L - %m%nlog4j.appender.FileApp.Append=true
利用MyBatis Generator自动创建代码
- 所需jar包:
- mybatis_3.2.7.jar
- mybatis-generator-core-1.3.2-sources.jar
- mysql-connector-java-5.1.25-bin.jar
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <classPathEntry location="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\webapp\WEB-INF\lib\mysql-connector-java-5.0.3-bin.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/myhappyfarm?useUnicode=true&characterEncoding=UTF-8" userId="root" password=""> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- generate Model --> <javaModelGenerator targetPackage="com.happyFarm.model" targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- generate xml --> <sqlMapGenerator targetPackage="com.happyFarm.mapper" targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- generate Mapper --> <javaClientGenerator targetPackage="com.happyFarm.dao" targetProject="E:\Documents and Settings\Administrator\workspace\happyFarm\src\main\java" type="XMLMAPPER"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <table schema="" tableName="cropbasic" domainObjectName="CropBasic" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="cropgrowthinfo" domainObjectName="CropGrowthInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="cropstoreinfo" domainObjectName="CropStoreInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="friendslist" domainObjectName="FriendsList" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="harvestlist" domainObjectName="HarvestList" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="plantinfo" domainObjectName="PlantInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="seedstoreinfo" domainObjectName="SeedStoreInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="userbasic" domainObjectName="UserBasic" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="" tableName="userinfo" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context></generatorConfiguration>
- 其中,jdbcConnection为数据库连接配置,需注意用户名密码及编码;
- javaModelGenerator、sqlMapGenerator、javaClientGenerator分别对应自动生成实体类,*Mapper.xml,以及dao层的文件夹名称
- table表示表名,以及生成的实体对象名
- DOS命令行进入lib目录(这里需要注意的是,三个jar包和generatorConfig.xml需要在同一目录下,否则会找不到jar包)
- 执行java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite
- 完成后即可在指定文件夹看到生成的model,dao,以及mapper
- 所需jar包:
依照写好的dao,实体类等编写相应的service层及实现类,至此完成spring与mybatis整合
配置springMVC配置文件——spring-mvc.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.happyFarm.controller" /> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 --> </list> </property> </bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> </beans>
8.配置web.xml文件
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <!-- Spring和mybatis的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-application.xml</param-value> </context-param> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 防止Spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC servlet --> <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list></web-app>
至此,完成ssm框架搭建的小结,编码时需注意注解等事项,待补充
0 0
- Spring + Mybatis + SpringMvc 框架搭建小结
- springMVC+Spring+Mybatis框架搭建
- spring+springMVC+mybatis框架搭建
- Spring+SpringMVC+Mybatis框架搭建
- Spring+SpringMVC+MyBatis框架搭建
- springmvc+spring+mybatis框架搭建
- Spring+SpringMVC+Mybatis框架搭建
- 搭建Spring+SpringMVC+mybatis框架
- Spring+SpringMVC+Mybatis框架搭建
- springMVC+spring+Mybatis框架搭建
- 搭建SpringMVC + Spring + Mybatis 框架
- Spring,SpringMVC,Mybatis (SSM)框架的搭建
- spring+springmvc+mybatis框架的搭建
- springmvc+spring+mybatis+maven框架搭建
- SSM框架搭建(Spring+SpringMVC+MyBatis)
- Spring+SpringMVC+MyBatis框架搭建-----详细教程
- Maven+Spring+SpringMVC+MyBatis框架的搭建
- Maven搭建SpringMVC+Spring+MyBatis框架
- 使用MJRefresh的情况下如何让tableView滚动到顶部
- IO:文件夹的遍历选择与数组、集合的综合
- bzoj1806(dp)
- Linux常用命令
- Android: Property Animation 属性动画的使用
- Spring + Mybatis + SpringMvc 框架搭建小结
- 关于Hessian一些报错的解决方案总结
- Memcache介绍、安装、使用(二)
- 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。
- #413 Reverse Integer
- MySQL中CHAR和VARCHAR
- RxJava与Retrofit的封装
- QGraphicsView有什么方法可以限制其大小不变
- mvn test执行单元测试一个类