当前位置: 首页 > 编程日记 > 正文

springmvc和mybatis整合关键配置

springmvc+mybaits的系统架构:


第一步:整合dao层

mybatis和spring整合,通过spring管理mapper接口。

使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

第二步:整合service层

通过spring管理 service接口。

使用配置方式将service接口配置在spring配置文件中。

实现事务控制。

第三步:整合springmvc

由于springmvc是spring的模块,不需要整合。


所需要的jar包:

数据库驱动包:mysql5.1

mybatis的jar包

mybatis和spring整合包

log4j包

dbcp数据库连接池包

spring3.2所有jar包

jstl包


mybatis配置文件     sqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 全局setting配置,根据需要添加 --><!-- 配置别名 --><typeAliases><!-- 批量扫描别名 --><package name="cn.itcast.ssm.po"/></typeAliases><!-- 配置mapper由于使用spring和mybatis的整合包进行mapper扫描,这里不需要配置了。必须遵循:mapper.xml和mapper.java文件同名且在一个目录 --><!-- <mappers></mappers> -->
</configuration>


db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=



applicationContext-dao.xml


配置:
数据源
SqlSessionFactory
mapper扫描器

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 --><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="maxActive" value="30" /><property name="maxIdle" value="5" /></bean><!-- sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" /></bean><!-- mapper扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 --><property name="basePackage" value="cn.itcast.ssm.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean></beans>


mybatis mapper接口映射文件 ItemsMapperCustom.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.itcast.ssm.mapper.ItemsMapperCustom" ><!-- 定义商品查询的sql片段,就是商品查询条件 --><sql id="query_items_where"><!-- 使用动态sql,通过if判断,满足条件进行sql拼接 --><!-- 商品查询条件通过ItemsQueryVo包装对象 中itemsCustom属性传递 --><if test="itemsCustom!=null"><if test="itemsCustom.name!=null and itemsCustom.name!=''">items.name LIKE '%${itemsCustom.name}%'</if></if></sql><!-- 商品列表查询 --><!-- parameterType传入包装对象(包装了查询条件)resultType建议使用扩展对象--><select id="findItemsList" parameterType="cn.itcast.ssm.po.ItemsQueryVo"resultType="cn.itcast.ssm.po.ItemsCustom">SELECT items.* FROM items  <where><include refid="query_items_where"></include></where></select></mapper>


applicationContext-service.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 商品管理的service -->
<bean id="itemsService" class="cn.itcast.ssm.service.impl.ItemsServiceImpl"/>
</beans>

 事务控制(applicationContext-transaction.xml)

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 事务管理器 对mybatis操作数据库事务控制,spring使用jdbc的事务控制类
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源dataSource在applicationContext-dao.xml中配置了--><property name="dataSource" ref="dataSource"/>
</bean><!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><tx:method name="save*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"/><tx:method name="get*" propagation="SUPPORTS" read-only="true"/><tx:method name="select*" propagation="SUPPORTS" read-only="true"/></tx:attributes>
</tx:advice>
<!-- aop -->
<aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast.ssm.service.impl.*.*(..))"/>
</aop:config></beans>


springmvc.xml
创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 可以扫描controller、service、...这里让扫描controller,指定controller的包--><context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan><!--注解映射器 --><!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> --><!--注解适配器 --><!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> --><!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter实际开发时使用mvc:annotation-driven--><mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven><!-- 视图解析器解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 配置jsp路径的前缀 --><property name="prefix" value="/WEB-INF/jsp/"/><!-- 配置jsp路径的后缀 --><property name="suffix" value=".jsp"/></bean><!-- 自定义参数绑定 --><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><!-- 转换器 --><property name="converters"><list><!-- 日期类型转换 --><bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/></list></property></bean>
</beans>

工程的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>springmvc_mybatis1208</display-name><!-- 加载spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- springmvc前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 使用此种方式可以实现 RESTful风格的url 第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时, 仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。 --><url-pattern>*.action</url-pattern></servlet-mapping><!-- post乱码过虑器 --><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></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list>
</web-app>




转载于:https://www.cnblogs.com/reblue520/p/6239914.html

相关文章:

阿里亲制明信片,字节、百度直接发锅……这些公司的新年礼盒越来越会玩~

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍整理 | 王晓曼出品 | 程序人生&#xff08;ID&#xff1a;coder _life&#xff09;每到年末&#xff0c;各大互联网大厂的新年礼盒都会作为…

html中radio、checkbox选中状态研究(静下心来看,静下心来总结)

html中radio、checkbox选中状态研究&#xff08;静下心来看&#xff0c;静下心来总结&#xff09; 一、总结 1、单选框的如果有多个checked 会以最后一个为准 2、js动态添加checked属性&#xff1a;不行&#xff1a;通过 $("[namesex]:eq(1)").attr("checked&q…

新年新气象,100 行 Python 代码制作动态鞭炮

作者 | FrigidWinter来源 | CSDN博客放鞭炮贺新春&#xff0c;在我国有两千多年历史。关于鞭炮的起源&#xff0c;有个有趣的传说。西方山中有焉&#xff0c;长尺余&#xff0c;一足&#xff0c;性不畏人。犯之令人寒热&#xff0c;名曰年惊惮&#xff0c;后人遂象其形&#xf…

php 反射类简介

反射是操纵面向对象范型中元模型的API&#xff0c;其功能十分强大&#xff0c;可帮助我们构建复 杂&#xff0c;可扩展的应用。其用途如&#xff1a;自动加载插件&#xff0c;自动生成文档&#xff0c;甚至可用来扩充 PHP 语言。php 反射api 由若干类组成&#xff0c;可帮助我们…

shell时间

Shell 调用系统时间变量 Linux常用命令获取今天时期&#xff1a;date %Y%m%d 或 date %F 或 $(date %y%m%d) 获取昨天时期&#xff1a;date -d yesterday %Y%m%d 获取前天日期&#xff1a;date -d -2day %Y%m%d 依次类推比如获取10天前的日期&#xff1a;date -d -10day %Y%m%d…

杨老师课堂_Java核心技术下之控制台模拟记事本案例...

预览效果图&#xff1a; 背景介绍&#xff1a; 编写一个模拟记事本的程序通过在控制台输入指令&#xff0c;实现在本地新建文件打开文件和修改文件等功能。 要求在程序中&#xff1a; 用户输入指令1代表“新建文件”&#xff0c;此时可以从控制台获取用户输入的文件内容&#x…

PHP的URL处理

完整URL地址&#xff1a; http://username:passwordhostname/path?argvalue#auchor 协议&#xff1a;http:// 用户名和密码&#xff1a; username:password 以&#xff1a;将两者分隔 主机名&#xff1a;hostname 和/为分隔符 路径&#xff1a; /path 以/开头、包含/符号 参…

UnitOfWork以及其在ABP中的应用

Unit Of Work&#xff08;UoW&#xff09;模式在企业应用架构中被广泛使用&#xff0c;它能够将Domain Model中对象状态的变化收集起来&#xff0c;并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据中。 从字面上我们可以我们可以把UnitOfWork叫…

分享3个好用到爆的 Python 模块,点赞收藏

作者 | 俊欣来源 | 关于数据分析与可视化今天给大家介绍3个特别好用的Python模块&#xff0c;知道的人可能不多&#xff0c;但是特别的好用。PsutilPendulumPyfigletPsutilPython当中的Psutil模块是个跨平台库&#xff0c;它能够轻松获取系统运行的进程和系统利用率&#xff0c…

使用XHProf分析PHP性能瓶颈(二)

上一篇文章里&#xff0c;我们介绍了如何基于xhprof扩展来分析PHP性能&#xff0c;并记录到日志里&#xff0c;最后使用xhprof扩展自带的UI在web里展示出来。本篇文章将讲述2个知识点&#xff1a; 使用xhgui代替xhprof的默认UI界面&#xff0c;更便于分析使用tideways扩展替换x…

PHP自动加载类—__autoload()和spl_autoload_register()

test.php <?phpfunction __autoload($class_name) {require_once $class_name . .php;}$obj new j();?> 当前目录下有j.php <?phpclass j{function __construct() {echo "成功加载";} }?> 正常输出&#xff1a;成功加载修改test.php代码<?phpf…

二分 + 模拟 - Carries

Carries Problems Link Mean: 给你n个数&#xff0c;让你计算这n个数两两组合相加的和进位的次数. analyse: 脑洞题. 首先要知道&#xff1a;对于两个数的第k位相加会进位的条件是&#xff1a;a%(10^k)b%(10^k)>10^k. 想到这一点后就简单了&#xff0c;枚举每一位&#…

机器学习的出现,是否意味着“古典科学”的过时?

作者&#xff1a;Laura Spinney译者&#xff1a;刘媛媛原文&#xff1a;Are we witnessing the dawn of post-theory science?让我们回忆一下&#xff0c;Isaac Newton 被一个苹果砸中头部&#xff0c;然后是怎么提出牛顿第二定律——万有引力的&#xff1f;大概过程是这样的&…

MySQL5.6.16二进制源码安装详解及一键安装实现

一、系统环境 1.1操作系统 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [rootlocalhost ~]# uname -rm 10.0-693.el7.x86_64 x86_64 [rootlocalhost ~]# 1.2 安装前环境监测 1.2.1.SELinux和系统防火墙关闭 检查selinux [rootlocalho…

基于 OpenCV 的表格文本内容提取

作者 | 小白来源 | 小白学视觉小伙伴们可能会觉得从图像中提取文本是一件很麻烦的事情&#xff0c;尤其是需要提取大量文本时。PyTesseract是一种光学字符识别&#xff08;OCR&#xff09;&#xff0c;该库提了供文本图像。PyTesseract确实有一定的效果&#xff0c;用PyTessera…

Redis以及Redis的php扩展安装无错版

安装Redis 下载最新的 官网&#xff1a;http://redis.io/ 或者 http://code.google.com/p/redis/downloads/list第一步&#xff1a;下载安装编译 #wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz#tar zxvf redis-2.4.4.tar.gz#cd redis-2.4.4#make #make instal…

Android UI SurfaceView的使用-绘制组合图型,并使其移动

绘制容器类&#xff1a; //图形绘制容器 public class Contanier {private List<Contanier> list;private float x0,y0;public Contanier(){listnew ArrayList<Contanier>();}public void draw(Canvas canvas){canvas.save();canvas.translate(getX(), getY());chi…

新型混合共识机制及抗量子特性的 Hcash 主链测试链即将上线

由上海交通大学密码与计算机安全实验室&#xff08;LoCCS&#xff09;及上海观源信息科技有限公司负责研发的、具有新型混合共识机制及抗量子特性的 Hcash 主链代码已完成并在 2017 年 12 月18 日之前上传至github&#xff1a; https://github.com/HcashOrg/hcashd https://git…

CentOS 6虚拟机安装

这篇博客已经被合并到这里了&#xff1a; 虚拟机安装CentOS以及SecureCRT设置【完美无错版】 下面不用看了&#xff0c;看上面即可 1.下载虚拟机Oracle VM VirtualBox最新的下载地址&#xff1a; http://download.virtualbox.org/virtualbox/4.1.6/VirtualBox-4.1.6-74713-Win…

开发中新游戏《庞加莱》

三体题材的游戏&#xff0c;表现三体人在三体星上生活和冒险。收集水和物器&#xff0c;躲避火焰与巨日&#xff0c;探索遗迹并与巨型生物战斗。温度会因太阳位置不同而发生变化&#xff0c;进而对环境产生一定影响。 游戏开发中。 ---- 2017-4-27版视频&#xff1a; http://v.…

介绍一个打怪升级练习 Python 的网站,寓教于乐~

作者 | 周萝卜来源 | 萝卜大杂烩这是一个学习 Python 的趣味网站&#xff0c;通过关卡的形式来锻炼 Python 水平。一共有 33 关&#xff0c;每一关都需要利用 Python 知识解题找到答案&#xff0c;然后进入下一关。很考验对 Python 的综合掌握能力&#xff0c;比如有的闯关需要…

hive基本操作与应用

通过hadoop上的hive完成WordCount 启动hadoop ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh cd /usr/local/hive/lib service mysql start start-all.sh Hdfs上创建文件夹 hdfs dfs -mkdir test1 hdfs dfs -ls /user/hadoop 上传文件至hdfs hdfs dfs -put ./try.tx…

PHP源代码分析-字符串搜索系列函数实现详解

今天和同事在讨论关键字过虑的算法实现&#xff0c;前几天刚看过布隆过滤算法&#xff0c;于是就想起我们公司内部的查找关键字程序&#xff0c;好奇是怎么实现的。于是查找了一下源代码&#xff0c;原来可以简单地用stripos函数查找&#xff0c; stripos原型如下&#xff1a; …

麻省理工研究:深度图像分类器,居然还会过度解读

作者 | 青苹果来源 | 数据实战派某些情况下&#xff0c;深度学习方法能识别出一些在人类看来毫无意义的图像&#xff0c;而这些图像恰恰也是医疗和自动驾驶决策的潜在隐患所在。换句话说&#xff0c;深度图像分类器可以使用图像的边界&#xff0c;而非对象本身&#xff0c;以超…

Oracle 查询转换之子查询展开

概念:子查询展开&#xff08;Subquery Unnesting&#xff09;是优化器处理带子查询的目标sql的一种优化手段&#xff0c;它是指优化器不再将目标sql中子查询当作一个独立的处理单元来单独执行&#xff0c;而是将该子查询转换为它自身和外部查询之间等价的表连接。这种等价连接转…

Xcode中通过删除原先版本的程序来复位App

可以在Xcode菜单中点击 Product->Clean Build Folder (按住Option键,在windows键盘中是Alt键.) 此时Xcode将会从设备中删除(卸载uninstall)任何该app之前部署的版本. 接下来重启Xcode,再试一下,有时这可以修复非常奇怪(really weird)的问题.

深入理解PHP之OpCode

OpCode是一种PHP脚本编译后的中间语言&#xff0c;就像Java的ByteCode,或者.NET的MSL。 此文主要基于《 Understanding OPcode》和 网络&#xff0c;根据个人的理解和修改&#xff0c;特记录下来 &#xff1a;PHP代码&#xff1a; <?phpecho "Hello World";$a 1…

关于 AIOps 的过去与未来,微软亚洲研究院给我们讲了这些故事

作者 | 贾凯强出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;在过去的15年里&#xff0c;云计算实现了飞速发展&#xff0c;而这种发展也为诸多的前沿技术奠定了基础&#xff0c;AIOps便在此环境中获得了良好的发展契机。在数字化转型的浪潮下&#xff0c;云计算已经…

JS 正则表达式 0.001 ~99.999

^(0|[1-9][0-9]?)(\.[0-9]{0,2}[1-9])?$转载于:https://www.cnblogs.com/wahaha603/p/9050130.html

深入浅出PHP(Exploring PHP)

一直以来&#xff0c;横观国内的PHP现状&#xff0c;很少有专门介绍PHP内部机制的书。呵呵&#xff0c;我会随时记录下研究的心得&#xff0c;有机会的时候&#xff0c;汇总成书。:) 今天这篇&#xff0c;我内心是想打算做为一个导论&#xff1a; PHP是一个被广泛应用的脚本语言…