我永远不会试图去战胜一个纯傻逼,因为他会用他丰富的经验来打败我...

分类目录
11月 17

Idea 配置Maven项目发布.

        这次自己新开发的项目, 打算用 Java Web ssm 框架来开发。软件还是Idea,毕竟好用。

        前期的项目配置还是根据,Idea SpringMVC+Spring+MyBatis+Maven整合框架搭建秒杀系统 这篇文章来配置,然后Idea 配置Tomcat 部署

        直接进入正题,打开右上角的 Project Structre  或者使用 Ctrl+Alt+Shift+S 快捷键打开,先设置 Modules,先点绿色的加号,然后往下拉选择 web,然后配置,Web Resource Directories  设置到src/main/webapp 然后点ok,目录下如下图。        

        在然后,去设置 Artifacts,点绿色的加号,选择 Web Application Exploded 选择 From Modules,回弹出一个框,就是你刚刚在 Modules 配置的那个,选择即可 点ok即可。

         

    然后,配置Tomcat服务器,在右上角有一个 绿色的开始按钮,旁边,点击 Edit Configuration,回弹出一个框 。

     在点绿色加号 -> Tomcat Server -> Local  ,然后就是配置 Tomcat 服务器了

   

    第一个 Name:就是你这里显示的服务器名,随便写无所谓。

    Server 标签配置:

            Application serven:这里就要配置了,点击右边的Configure,弹出Application Servers,点击Tomcat Home,也就是你的Tomcat文件,所放置的位置,选择即可,剩下的都会自动加载,然后点ok,Server 剩余标签的内容,都选择默认即可,然后点Apply,下一步切换到 Deployment 配置

     



    Deployment 标签配置:

         主要是配置 Deploy at the server startup , 点击右边的加号,会有一个 Artifact External Source 两个标签,这里我们选择 Artifact  也是我们刚刚在 Project Stuctre  配置的 Artifact 包,直接选择即可,点ok

       

       

    至此,配置就结束了,可以点,右上角的 绿色按钮 或者 小虫子按钮就可以开始服务器了~ 



             如有疑问,欢迎在本博客下面留言,或者放邮件 至(i@ishwy.me), 邮件内说明来源。

11月 13

php数组中两个数组合并

2017-11-16 10:20:49更新

    今早,看到代码的时候,突然想起这种的 array_merge 的函数不是没用,而是我自己使用错误了,array_merge 不是引用赋值,而我之前是给他一个空数组,在给$data,所以,肯定是不成功的。。

    其实代码很简单,所以,改成了每次循环想结果数组里合并之。代码如下。效果图也就不贴了,是第二张图的效果,也是理想效果。


这两天做项目的时候遇到一个问题,数据是从数据库取的,所以,返回的数组的key名,就是数据库的字段名。

而数据呢,又是在数组的key名下面的数据,所以结构就类似下面这样:


最后想要的结果是:

起初,是想要 array_merge 来实现完成的,因为这个函数就是来做数组合并的发现。最后发现,如果想使用这个函数,就必须把数组里面的每个元素分开,所以,也就没打算使用这个方法了。

后面,使用 foreach + array_merge 来实现的时候发现 key 如果相关的话,前面的会被覆盖掉。

然后,想到了一个取巧的办法,就是先确定好一个数组【0】,然后在后面再接一个数组。然后,把数组放进这个数组里, 这样的话key,也不会存在重复了,而是会自动递增。

最后的效果就是,有一个key【0】的数组,有点不美观(优化的话只要用array_values 把数据取出来,我这里因为不需要这么优化,就不做了。

    

        $data = [];

        foreach($goodsMessage as $item) {

            $data = array_merge($data,$item['goodsMessage']);
            
        }


附上结果图:

上完成代码:

 $goodsMessage = [
            0 => [
                'goodsMessage' => [
                    0 => [
                        'id' => 0,
                        'age' => 0
                    ],
                    1 => [
                        'id' => 4,
                        'age' => 4
                    ],
                ]
            ],
            1 => [
                'goodsMessage' => [
                    0 => [
                        'id' => 1,
                        'age' => 1
                    ],
                    1 => [
                        'id' => 2,
                        'age' => 2
                    ],
                    2 => [
                        'id' => 3,
                        'age' => 3
                    ],
                ]
            ],
        ];

        foreach($goodsMessage as $item) {
            foreach ($item['goodsMessage'] as $v){
                    $data[0][] = $v;
            }
        }

 

11月 03

Idea SpringMVC+Spring+MyBatis+Maven整合框架搭建秒杀系统

因为工作繁忙的问题, 好久没写博客了 🙂

最近项目做完了, 也是闲的没事了,  因为公司另一个部门是使用Java开发的,  一直吹逼说Java比php安全, 效率高, 稳定之类的.  在下, 作为phper 怎么能忍,但是也不能无凭无据的怼。所以,自我学习一下Java看看到底哪里牛逼了。

学习路线  (楼主也只是上学出钱)  -> 

    1. Java的一些语法基础,(因为,有php基础所以基本就简单过了一遍)。

    2. Servlet的一些简单教程。(http请求、表单、cookie)之类的简单教程。

    3. Spring框架的一些理论知识点,主要是IoC和DI的相关知识点、事物管理

    4. SpringMVC框架,主要是看执行流程以及一些注解是使用。

    5. Mybatis框架, 主要是看了一些全局配置的配置和整合spring,在我的理解Mybatis就相当一个数据库链接驱动。

 

 相关知识点看完之后,就打算找一个项目试试手,在网上正好看到一个秒杀系统,正是用ssm的框架进行开发的,所以,在这里正好也记录一下,开发旅程。

     环境和开发工具:windows10 64位  idea 2017.3 。

     框架版本:是基于Maven 最新环境的,如下,  jdk1.8 Tomcat8.0  Spring 3.0  Spring MVC 4.3.7 Mybatis 3.4.2。

先用idea 配置搭建Maven:

    File -> new > Project -> 选择Maven,第二步要勾上之后,才能选择下列的maven-archatype-webapp选择,然后在next   


    GroupId : 就是改项目的名。

    ArtifactId:就是后面要打包的文件名。

    Version: 默认不变。然后后面两部可以一直next,下去,最后在finish

    

     

    然后, 根目录下就会有一个pom.xml文件, 这个文件就是配置Maven 包依赖的文件。为了不让文章显得杂余,我这里使用外链。

    >改项目pom.xml 配置文件,感觉也是基本的ssm的框架配置文件

      https://gitee.com/slgz/seckill/blob/master/pom.xml

        

    Idea 默认好像是不会自动import的,所以这里手动一下pom.xml 文件选择Maven -> Reimport ,时间长短,看自己的网速。等完成之后就会显示如下信息

    当然, ide给我们创建的项目,是缺少文件的。这里,我们在自己手动创建几个文件

    src/main/Java : 这里就是java源代码的文件夹,注意:这里要定义为Resources类型文件

    src/main/resources:这里就是相关的配置文件注意:这里要定义为Resources类型文件

    在一样的新建test的文件夹,

    src/main/Java

    src/main/resources

    接下来就是一些相关的配置顺序流程了,这里就不一一描述了,就说一下流程吧。

    先是配置Mybatis相关文件:

        在src/main/java/org/seckill类下,以下简称(seckill类)。

            以下,统一规定:命名规范就是,首字母大写 , 包中的geter seter toString方法,都可以通过idea的快捷键 Alt+INS 快捷键完成。

            新建entity 实体包,  此包就是定义数据库里对应的字段以及类型,并实现seter geter 方法  toSting方法。

            然后,新建Dao包,  此包就是实现entiry的实现类,定义 sql 方法名,注意,这里只是定义方法名,方法参数,类型。并不具体实现,具体实现后面再说

            

       在src/main/resources下新建spring文件夹,在spring文件夹里新建 spring-dao.xml文件,这里就是为了整合Mybatis过程。

             主要是配置过程:

                    1.   配置数据库相关的参数properties属性,这里就在 resources 目录下直接新增 jdbc.properties  文件,此文件是数据库的链接地址, 以及账号 密码等配置
                    2.   配置数据库连接池,主要还是通过c3p0完成链接。

                    3.   配置SqlSessionFactory对象,这里是关键主要完成的是。链接第二步的连接池,配置mybatis-config.xml 文件, 自动扫描entity包  , 自动扫描sql配置文件包,

                            这里就要在resources下新建mapper文件夹, mapper问价主要完成是具体sql语句的编写,因为mybatis就是通过原生sql来访问的。

                    4.  最后异步就是配置,动态mapper接口包,动态实现mapper接口。


        到这里基本的mybatis整合配置文件,为止。



        接下来配置Service包,在 resouces/spring 下新建spring-service.xml 文件夹, 主要就是配置spring的事务管理器。


        

        最后一部就是配置SpringMVC和spring的整合, 其实SpringMVC和spring是天然一体的, 天生就是在一起的。

        易于项目好维护, resources/spring  下新建 spring-web.xml 文件。

              主要配置:

                    1. 开启SpringMVC注解模式。

                    2. 静态资源默认Servlet配置,如js / css/ image

                    3. 配置jsp显示ViewResolver。

                    4. 一样的,自动扫描web相关的bean。



        至此,ssm框架整合的基本算是完成了。

            以此的顺序是:     Mybatis    ->  Spring   -> SpriongMVC


        


                    

           最后附上已经做完的项目链接:

                    https://gitee.com/slgz/seckill.git 

        

        

2月 18

php二维数组根据某个key相同合并数组

起初的原因是一个朋友,问我如下代码能不能把id相同的能不能合并成一个数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$a= [
    0=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'后台开发'
    ],
    1=>[
     'id' =>1,
     'name'=>'技术部',
     'job'=>'前端开发'
    ],
    2=>[
     'id' =>2,
     'name'=>'设计部',
     'job'=>'UI设计师'
    ],
];

一开始我打算先取出 所有id 放在一个数组中,因为不想用循环所以打算用 array_column() 函数,取出id再去重在当做key使用,结果发现我家里安装的是php5.4的不支持。这个函数5.5才支持。。
于是,我去查了一下数组的手册就又想到个办法,发现实际上,我最终的想法还是哪 id 来做文章,所以我想何不直接循环用取id当key ?
所以代码如下,其实非常的简单。。比我一开始想的判断还简单很多,

1
2
3
4
$res = [];
foreach ($a as $k => $v) {
    $res[$v['id']][] = $v;
}

最终的效果
插图“>

———————————————————————–分割线——————————————————————————————————————–

新需求。说分类,意思就是下面这个样子,其实也很简单。。只要在上面原有的更改一下就行了,
// 部门一
// –职位一
// –职位二
// –职位三
// 部门二
// –职位一
// –职位二

1
2
3
4
foreach ($a as $key => $val) {
       $result[$val['id']]['name']   = $val['name'];
       $result[$val['id']]['job'][]  = $val['job'];
  }

最终的效果

插图“>

2月 08

centos6.5 安装swoole扩展

swoole是一个PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。

官网一共提供了两个方案,自主编译和pecl安装。但是感觉对我们这些小菜鸟并不是很友好,安装的时候出现的问题很多。所以我在这写个教程记录一下,也方便造福大众。:>

第一种PECL:
如果使用pecl的话就要使用phpize来生成php编译配置。所以如果没有安装过的同学,就需要先 yum install php-devel ,因为 php-devel 里面包括phpize,要查看phpize是否安装成功的方法也很简单。which phpize null
接下来还要继续安装pcre-devel zlib-devel和 yum install pcre-devel zlib-devel
提示complete 则代表安装成功。
接下来将可以愉快的 pecl install swoole了。如果出来如下图显示,则就代表安装完成。接下来就去php.ini 添加即可null

2月 06

产品更新代码块

header(“Content-type:text/html;charset=utf8”);
/* 图片上传 */
/* 引入公共函数库 */
include “../../function_class.php”;
$id = $_GET[‘id’];
?>


具体说明:
选择要更新的图片:
删除图片

以上的提交的html代码
——————————————————————————————————————————————————————————————————–
0){
die(_alert(‘更新内容成功,不包括图片’));
}else{
die(_alert(‘内容更新失败’));
}
}

///* 执行文件移动程序 如果有图片就执行更新图片*/
if($_FILES[‘lujing’][‘error’] == 0) {
/* 执行更新语句 */
$gx = mysql_query(“UPDATE `picduct` SET `lujing`=’$new_lujing’ WHERE `id`=’$id'”);
move_uploaded_file($lujing, $new_lujing);
echo _alert(‘移动文件成功!’);
}else{
echo _alert(‘移动文件失败,请检查文件是否正确!’);
}

2月 06

简短的思路分析

Q:类的属性,都有哪些特性。

其实特性只有一个。通过对象访问符 -> 惯穿类内部所有方法与类外部。用途是在类的方法之间或类内外之间传递数据。其本质是在一定范围内的全局变量。类和它内部的方法,自成天地,内外不互通。除了全局变量,就是属性可以互相传递。
可以在类内部传递,可以当作函数的参数,可以做函数返回值。外部实例化后,可用实例化后的变量调用它,内部可用$this调用。类的属性不可以有计算过程,最好不要用全局变量定义它

Q:几个类似的方法封装成类有什么好处?
做为一种封装手法。其本质依旧是重复利用代码。提供的便利是由于有属性的存在,可以减少或增加要传递的量。
由于方法是同类型的方法。在连续性操作时,使用类可以有效减少量的使用。也不受返回值数量限制。

图形处理的本质。。
在一张底图上重新画。。
画上去的东西,成为底图的一部份。
所以,每一次操作,都是“在一张底图上重新画”
至于底图上原来有什么,那已经不重要了。
从来就不存在什么图片处理。而是重新画。

思考的时候,不能光听“做什么,怎么做”
却总是忽略了:为什么是这样做,为什么一定是这样做。
为什么可以这样做。为什么应该是这样做。
2016-04-01 22:54

2月 06

产品展示 之 添

这次做的一个产品展示的web 程序。
首先思考一下—> 如果平时要自己记录一个东西会怎么做?那笔在纸上写产品的类型 数量 名称 balabala的吧。这是生活中,如果是电脑程序中的呢?
这时候就要把生活中的笔纸使用 电脑中的 数据库。
所以这个时候就要想一下数据库该怎么设计了,想到产品就会想要知道他的名称,产品说明,产品类型,还有存入仓库中的时间。这几个是最基本的。
还有就是要想后面怎么显示的问题。
HTML上显示的图片都是 src=”路径”;而php程序中显示图片是根据本地文件系统显示的,
这里就要判断什么时候怎么显示,相对于谁谁显示。
如果想要在web显示的话就是 HTTP://index.php 这个index.php 里面包含着一张图片,而里面图片显示是根据PHP的文件系统操作如 D:/image/1.jpg
所以想要把图片存到数据库中只需要把图片在文件系统中的位置,存如数据库中如 “../upload/1.jpg”;读取的时候在读到对应的src就好了。
———————————————————————————————————————————————————————————————-
分析到这,下面就是一些实际操作:
第一把要做的就是:连接数据库,选择数据库
然后因为是要做的是添加,如果可以使用INSERT 的语句。
INSERT INTO `表名·(字段名) VALUES (要添加的字段名);
这个时候就要把想修改的内容添加的要添加的字段名即可。
怎么上传呢?
可以使用表单input 的传值 name 威慑为 content leixing 之类的
到这写到数据库基本就完事了。——————————————————————————————————————————————————————- 后面就是如果在页面中显示了。
因为mysql 返回的是资源性的数据格式。。所以必须要先转换成数组的形式。
PHP提供给三种对mysql函数的解析。
mysql_fetch_array mysql_fetch_assoc mysql_fetch_row
三个函数返回的值都是不同的,复杂度由上到下。我一般用第二个
解析出结果之后,如果有多条数据库返回就可以使用while 循环 或者foreach 因为循环的本质就是处理多条数据,
如果只是一条则就可以直接 $array[‘索引’];

到这基本就完事了- – 代码就不上了,唯一还有的问题就是判断文章标题是否相同, 相同就滚蛋。。跟用户注册一样

2016-03-18 15:20

2月 06

产品展示之删

方案一:如果点击删除图片多选框的时候,就执行更新语句。更新原数据库表中的路径为。默认添加的路径,显示的时候直接显示就好了。

方案二:点击删除图片的时候,使原路径为null。显示的时候判断是否为null,如果则显示show字段默认图片,否则显示原图片
2016-03-18 20:04

2月 06

ThinkPhp的添删改查功能

//tp 数据库模型
//实例化基本模型 Model
// $user = new Model(‘gbook’);
// $date = $user->select();
// var_dump($date);

//实例化用户自定义模型,继承Model
//D 是 M 的高级方法 如果D找不到的话 会自动使用M方法
$user = D(‘gbook’);
echo $user->getinfo();

//新建一个公共的模型

//新建一个空模型
$model = M();

$model->query($sql);//只能查询语句select
$model->execute($sql);//只能插入 更新 insert update
$this->display(‘user’);.

array(
‘user’=>’xiaoming’,
‘password’=>’123456’,
‘sex’=>’0,
),

******************数据库添加数据
public function user() {
$date = array(
array(
‘user’=>’tom’,
‘password’=>’123456’,
‘sex’=>’0’,
),
array(
‘user’=>’cidny’,
‘password’=>’123456’,
‘sex’=>’1’,
),
array(
‘user’=>’jack’,
‘password’=>’123456’,
‘sex’=>’0’,
),
);
M(‘gbook’)->add($date);
M(‘gbook’)->addall($date);//批量添加二维数据库
返回受影响行数 ID值

***********************************************查询
1.字符串直接查询
$data = M(‘user’)->WHERE(‘id’=1)->select();

2.通过数组的方式查询
$where[‘字段名’] = ‘值’
$where[‘_logic’] = ‘or’; //设置逻辑值
$data = M(‘user’)->WHERE(‘id’=1)->select();

3.表达式 eq neq gt ngt lt nlt
******************************更新数据
$update[‘ziduan’] = ‘值’ //要更新的值
$where[‘id’] = 1 //条件
$date = M(‘表名’)->where($where)->save($update)

php foeahc循环的时候value当变量名
[
‘d’=>4
],
‘b’=>[
‘f’=>4
],
‘c’=>[
‘g’=>4
]
];

echo ‘

';

foreach ($a as $key => $value) {
$value['e'] = 5;

//$a['a']['e'] = 5;
//print_r($value);
}

print_r($a);