IDEA使用 maven 搭建 SSM 框架
公司有个小的内部使用的软件,让开发,自己选择使用 SSM ;
因为之前自己学过,本以为一切水到渠成,但是好久没用SSM(上次用还是九月份),框架搭建就费劲了,特此记录下 ;
怎么创建 maven 项目,不再累赘 ,网上一大把,或者看我的之前的博客;
pom 文件的编写
SSM
框架,需要众多的 jar
包,具体需要哪些包,这个谁也说不清楚,我也不清楚,去网上 down
一份下来,就好了 ,但是不能保证以后 SSM
用到的包,都被囊括在其中,后面需要再自己添加;
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<!-- spring版本号 -->
<spring.version>4.0.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</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-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
</dependencies>
项目结构
在等 maven
下载的过程中,把项目结构创建下,如下图所示;
(maven
下载不需要多久,如果你下载很久,建议换成阿里的镜像)
SSM 配置文件的编写
在 resources
文件的对应的子文件下面进行 SSM
整合的配置
sqlMapConfig.xml
配置文件:里面进行一个mybatis自己的配置,比如缓存、别名、懒加载等
<?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>
<!-- 批量别名,po -->
<package name="cn.hyc.ssm"/>
</typeAliases> </configuration>applicationContext-dao.xml
配置文件里面配置那些本该由 mybatis 管理的配置项,比如数据源、批量扫描 mapper ,
整合以后,这些交给 spring 管理 ;<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byName"> <!-- ********************************************************
*** 该项配置文件,用于配置 spring与mybatis整合之后, ***
*** 那些本来由mybatis管理的东西,现在交由mybatis管理 ***
******************************************************** --> <!-- 配置 sqlSessionFactory,让 spring 管理sqlSessionFactory -->
<!-- class 类在 spring-mybatis的整合包里面 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 设置读取 mybatis 配置文件的资源流-->
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
<!-- 设置数据源,引用下面配置的数据源对象-->
<property name="dataSource" ref="dataSource"/>
</bean> <!-- 读取数据库的配置文件 -->
<context:property-placeholder location="classpath:db.properties"/> <!-- 配置 DBCP 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username"/>
<property name="password" value="${jdbc.password"/>
<property name="maxOpenPreparedStatements" value="10"/>
<property name="maxIdle" value="5"/>
</bean> <!--批量扫描 mapper,自动生成代理对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.hyc.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean> </beans>
applicationContext-beans.xml
配置文件在里面配置需要注册到 spring 容器中的 bean,可以是扫描注解自动创建的,也可以存放配置创建的对象;
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- ********************************************************
*** spring 配置文件,这里用于配置那些 bean ***
******************************************************** --> <!-- 开启注解扫描,自动扫描那些使用注解创建的对象 -->
<context:component-scan base-package="cn.hyc." /> </beans>
applicationContext-transaction.xml
配置文件对 spring的事务配置,
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- ********************************************************
*** spring事务的配置 ***
******************************************************** --> <!-- ********************************************************
*** 开启事务管理,配置数据源 ***
******************************************************** -->
<!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
<!--<!– dataSource 定义在 ApplicationContext-dao.xml 中,这里需要告诉它 fix 所有的spring配置文件–>-->
<!--<property name="dataSource" ref="dataSource"/>-->
<!--</bean>--> <!-- ********************************************************
*** 配置对什么样的方法使用事务 ***
******************************************************** -->
<!--<tx:advice id="transactionInterceptor" transaction-manager="transactionManager">-->
<!--<tx:attributes>-->
<!--<!–对于 增删改 方法需要开启事务–>-->
<!--<tx:method name="save*"/>-->
<!--<tx:method name="insert*"/>-->
<!--<tx:method name="update*"/>-->
<!--<tx:method name="delete*"/>-->
<!--<!–对于 查 ,级别设为 SUPPORTS ,支持事务 –>-->
<!--<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>-->
<!--<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>-->
<!--</tx:attributes>-->
<!--</tx:advice>--> <!--配置切入点,也就是配置,在什么地方使用事务-->
<!--<aop:resource.config>-->
<!--<aop:advisor advice-ref="transactionInterceptor" pointcut="execution(* xin.ijava.ssm.services.impl.*.*(..))"/>-->
<!--</aop:resource.config>-->
<!--加上这句话,不然 services的层,创建会报错,报 actually of type 'com.sun.proxy.$Proxy12'-->
<!--报 这样的 类型错误-->
<!--<aop:aspectj-autoproxy proxy-target-class="true"/>--> </beans>
springMvc.xml
的配置文件配置 springMvc 的一些配置,比如解析的视图,前后缀,静态资源的拦截问题,关于 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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 启用spring mvc 注解 -->
<!--<context:annotation-config />--> <!-- 完成请求和注解POJO的映射 -->
<!--<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />--> <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<!--<bean id="mappingJacksonHttpMessageConverter"-->
<!--class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">-->
<!--<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>
上面的几个文件,除了
sqlMapConfig.xml
是mybatis
配置自己独特的配置,其他几个都是整合以后,配置交由spring
管理的配置,它们完全可以写在一个配置文件里面,但是那样,我感觉太乱了,就分开写了 ;log4j.properties
配置文件能打印出
mybatis
的sql
语句,方便调试!log4j.rootLogger=DEBUG,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n log4j.appender.File = org.apache.log4j.RollingFileAppender
log4j.appender.File.File = logs/ssm.log
log4j.appender.File.MaxFileSize = 10MB
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%ndb.properties
配置文件jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///DatabaseName?charset=utf-8
jdbc.username = username
jdbc.password = password
web.xml 的配置
在这里配置的东西不多,一般有:springMvc
的前端控制器,和一个监听器,监听 web
程序启动,然就加载 spring
的配置文件,创建代表配置文件的 ApplicationContext
对象,和一个全站的编码过滤器 ;
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 1.针对Spring配置:读取配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<!-- 注册ServletContext监听器,监听 web 程序的启动,
然后创建 ApplicationContext 对象,注册到 web 容器servletContext 域里面
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 针对SpringMVC的配置,前端控制器,本质上一个serlvet -->
<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/springMvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 解决乱码的过滤器 -->
<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>
</web-app>
总结
路径需要特别重视,比如上面的那些配置文件中,引入其他配置文件的路径,一定要写对,最好加上 calsspath
;
一般按照这个步骤走下来,SSM
就整合成功了,但是也就是基本的框架搭起来,里面具体的各种功能,我都没添加进去,比如要 实现全局异常捕捉
,自定义参数绑定
、上传文件
** 等这些功能,则还需要继续进行配置 ;**
我在下面列出了基本的大部分功能,你可以按照这个清单去,丰富你的配置文件 ;
按层分,每层可能用到的大部分功能 ;
---------- spring
--------
1、context 注解扫描,扫描利用注解创建的对象
2、<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
aop自动代理,配合@AspectJ使用,
再利用@Before、@Around,对其中方法进行增强;
3、事务的注解
--------- mybatis
-----
1、管理数据源
2、读取数据库配置
3、扫描 mapper
4、创建 sqlSessionFactory
-------- springMvc
------
1、配置视图解析器
2、配置,使用配置文件的处理器适配器、处理器映射器 ;
3、配置注解的处理器适配器、映射器,替代上面的第二条;mvc:annotation-driven/,它们不能共存,只能选其一 ;
4、如果有自定义参数绑定,则配置 ,还要讲转换器,注入到适配器里面 ;
5、如果使用检验器,则配置检验器,还要将检验器注入到适配器中 ;
6、全局异常类 ;
7、JSON转换器,使用注解的适配器,则不需要再配置 ;
8、如果上传图片,则配置音乐、图片等文件的解析器 ;
9、配置拦截器 ;
10、如果配置了支持 RestFul的前端控制的,则还需要配置配置静态资源,以放行 ;
------ web.xml
--------
1、配置编码过滤器 ;
2、配置 spring 监听器
3、配置 前端控制器
4、如果需要,还要配置支持restFul的前端控制器
IDEA使用 maven 搭建 SSM 框架的更多相关文章
- Maven项目搭建(二):Maven搭建SSM框架
上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...
- Eclipse中使用Maven搭建SSM框架
Eclipse中不使用Maven搭建SSM框架:https://www.cnblogs.com/xuyiqing/p/9569459.html IDEA中使用Maven搭建SSM框架:https:// ...
- 使用maven搭建ssm框架的javaweb项目
目前主流的javaweb项目,常会用到ssm(Spring+Spring MVC+Mybatis)框架来搭建项目的主体框架,本篇介绍搭建SSM框架的maven项目的实施流程.记之共享! 一.SSM框架 ...
- 使用maven搭建SSM框架
使用maven搭建SSM框架,首先得准备好maven环境. 搭建maven环境 第一步:下载maven http://maven.apache.org/download.cgi 下载后解压就可以了. ...
- 使用Maven搭建SSM框架(Eclipse)
今天学习一下使用Maven搭建SSM框架,以前都是用别人配置好的框架写代码,今天试试自己配置一下SSM框架. 这里我的参数是Windows7 64位,tomcat9,eclipse-jee-neon- ...
- 使用maven搭建ssm框架环境
1.前言 因为经常换环境,在搭ssm框架的时候老是出错,所以记录一下最近搭建的环境,以供参考. 本文讲解如何使用maven搭建ssm框架,并能用于简单的登录注册. IDE:IDEA,JDK版本:1.8 ...
- 【原】无脑操作:eclipse + maven搭建SSM框架
网上看到一些Spring + Spring MVC + MyBatis框架的搭建教程,不是很详细或是时间久远了,自己动手整一个简单无脑的! 0.系统环境 1)Windows 10 企业版 2)JDK ...
- Maven 搭建 SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP.Sp ...
- Idea + maven搭建SSM框架
1.打开idea,新建项目,选择maven骨架,然后填写包名和项目名称,一直下一步. 接着下一步,配置项目的maven环境 创建完成之后,如下图:(上边的项目名字只是例子,具体的以自己搭建的项目名为准 ...
随机推荐
- 5.Python3列表和元组
5.1序列 在python3中序列结构主要有列表.元组.集合.字典和字符串,对于这些序列有以下通用操作. 5.1.1 索引 序列中的每一个元素都有 一个编号,也称为索引.这个索引是从0开始递增的,即下 ...
- mysql 导入导出表结构和表数据
mysqldump -u用户名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysqldump -h localhost -uroot -p123456 databas ...
- nginx 动态黑名单
原理: 根据nginx 访问日志记录发现可疑的或者不正常的访问记录记录然后自动添加到nginx的黑名单 起到阻止的作用 可以作为防范少量的ddos攻击 1.首先要格式化nginx的日志(相关内容可以 ...
- lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。
4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...
- NAT(地址转换技术)学习
一.什么是NAT,NAT产生的背景 NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力. NAT产生的背景是为了解决IPv4地址不足的 ...
- 网络攻击-XSS攻击详解
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- bagging,random forest,boosting(adaboost、GBDT),XGBoost小结
Bagging 从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中).共进行 ...
- Tosca TestCases: Update all,Checkin all,Checkout,Checkout Tree
#记录一下TestCases Module 红框里面这几个button的功能 #Update all 从数据库里把别人最新checkin的东西给拽出来查看,也就是拿最新版本 #Checkin all ...
- SQL-W3School-总结:SQL 总结
ylbtech-SQL-W3School-总结:SQL 总结 1.返回顶部 1. SQL 概要 本教程已经向您讲解了用来访问和处理数据库系统的标准计算机语言. 我们已经学习了如何使用 SQL 在数据库 ...
- GitHub上最著名的Android播放器开源项目大全
GitHub上最著名的Android播放器开源项目大全 ...