首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

Mac免费使用MAMP搭建本地开发环境

打开MAMP 打开偏好设置 设置端口 这里用的是Apache,选择项目路径 到这里可以先运行一下看看是否有端口占用的情况,如果80被占用改成其他的,正常就继续下面的 修改apache文件httpd.conf vi /Applications/MAMP/conf/apache/httpd.conf找到这行把#注释去掉,:wq保存退出Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf 第一步、修改httpd-vhosts.conf文件 vi /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf //配置多个项目就复制多个,主要改两个地方 //DocumentRoot 修改为项目路径 //ServerName 自定义配置本地域名 <VirtualHost *:80> ServerAdmin alf66666@163.com DocumentRoot "/Users/eric/HBuilder/userprofiles/medin/backend/web" ServerName www.m.com ErrorLog "logs/apache_error.log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost> 第二步、修改系统hosts,需要权限 sudo vi /etc/hosts添加配置的本地域名,就是上面的ServerName 127.0.0.1 www.m.com 第三步、重启MAMP 如果配置多个项目,只需要重复上面三步就可以了 以上步骤做完,可以正常运行了或许有其他报错情况 The requested URL index.php was not found on this server. 如果项目是Nginx运行的,选择Apache也是可以的,在项目目录(第一步配置的DocumentRoot)下添加.htaccess文件 // vi /Applications/MAMP/conf/apache/httpd.conf //修改apache文件httpd.conf //AllowOverride None 改为 AllowOverride All <Directory "/Applications/MAMP/bin/phpPgAdmin"> Options All AllowOverride All Order allow,deny Allow from all </Directory> 如果有端口6379 Redis等报错情况,可能是后端根据本地域名必须包含哪些英文字母来配置不同数据库等等,所以要和后端约定好本地域名规则,按照规则配置域名

优秀的个人博客,低调大师

MyBatis开发框架的四大核心

MyBatis 四大核心主要包括(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四大核心,便可知 MyBatis 八 九。 SqlSessionFactoryBuilder 从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。 其中配置方式有两种 1. XML 文件方式 XML 文件方式是作为常用的一种方式: String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); mybatis-config.xml 就是我们的配置文件: PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 2. Java Config 这是第二种配置方式,通过 Java 代码来配置: DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.addMapper(BlogMapper.class); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); Java Config 相比较 XML 文件的方式而言,会有一些限 制。比如修改了配置文件需要重新编译,注解方式没有 XML 配置项多等。所以,业界大多数情况下是选择 XML 文件的方式。但到底选择哪种方式,这个要取决与自己团队的需要。比如,项目的 SQL 语句不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 则会更加简洁一点;反之,则可以选择 XML 文件的方式。 SqlSessionFactory SqlSessionFactory 顾名思义,是用于生产 SqlSession 的工厂。 通过如下的方式来获取 SqlSession 实例: SqlSession session = sqlSessionFactory.openSession(); SqlSession SqlSession 包含了执行 SQL 的所有的方法。以下是示例: SqlSession session = sqlSessionFactory.openSession(); try { Blog blog = session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); } 当然,下面的方式可以做到类型安全: SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); } Mapper Mapper 顾名思义,是用做 Java 与 SQL 之间的映射的。包括了 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。 比如,下面是一个常见的 Mapper 接口映射文件: select * from Blog where id = #{id} 其中 "org.mybatis.example.BlogMapper" 就是我们要射射的接口,selectBlog 就是BlogMapper上的方法。而这个 selectBlog 具体就是要执行“select * from Blog where id = #{id}”这个 SQL 语句。 这样,我们就能通过 Blog blog = session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); 或者是 BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); 来获取到执行的结果。 当然,如果是采用注解的方式的话,可以省去 XML 文件: public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }

优秀的个人博客,低调大师

Android开发常犯错误记录

Multiple dex files define Landroid/support/xxx 这个包冲突都是support里的,比如 Multiple dex files define Landroid/support/v4/app/FragmentTabHost$DummyTabFactory 或者 Multiple dex files define Landroid/support/design/widget/CoordinatorLayout; 不管什么原因,只要在gradle里面都引用一下覆盖版本就行了,不然有你哭的时候,出错日志如下 解决方案: 把后面的版本号都统一,重新运行,ok Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. > java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 百度了一番,发现没有让我失望,没什么用,因为原因可能不只一个,具体不好定位,后来我没办法就把所有的依赖版本升了一下,从27.0.0到28.0.0了,然后我一个个试了一遍,确定是谷歌的依赖库版本低了,估计你添加的依赖库里面的一些sdk和tools版本调成了28, 所以以前的低版本没法成功报错,如果你百度了很多办法都不行,不妨试试我这个,下面是我依赖过的库 更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

优秀的个人博客,低调大师

如何开发自己的Spring Boot Starter

我们在使用 Spring Boot 的过程中,往往都是在pom.xml里加了一系列的依赖,然后启支一个包含main方法的Application,一切就OK啦。给你我的感觉,就像是自己要动手做个菜,自己不再需要准备每一部分的原材料,直接购买包装好的一份菜的原料,下锅即可。 那我们详细看下,这份「包装好」的原料中,到底做了些什么。 添加Starter依赖 这里添加的依赖,除了我们之前在Maven中熟悉的之外,还有一些都是长这个样子: 名为xxx-starter,比如 具体这些starter是怎么起作用的呢,他们什么时候开始工作的? 一切都要从入口处说起。我们以上面的starter为例,看到这个mybatis的starter,其对应的pom中,包含这些依赖 我们看到,相当于我们添加了一个Starter的依赖,其背后会引入许多其定义的其他依赖,通过 Maven 的传递依赖,这些都会被自动添加了进来。 自动配置 相比传统的依赖,我们看到其中包含这样一个:mybatis-spring-boot-autoconfigure,这也是每个Starter的秘密所在:「AutoConfigure」 它会在实现时,考虑应用中的其他部分因素,「推断」你所需要的 Spring 配置。 在Spring Boot中,我们最大的感受是配置仿佛都被做好了,直接使用即可,这就是 spring-boot-autoconfigure. 每个starter都有一个名为spring.factories 的文件,存放在META-INF目录下,其中的内容类似下面这个样子: 所有需要自动配置的Class,都需要配置成key是EnableAutoConfiguration的。 我们来看类的内部 Class 之上, 有不少注解来标识,有几点需要关注的: 其中有标准的 Spring配置注解@Configuration 几个@ConditionalXX 标识执行顺序的@AutoConfigureAfter 其中,@ConditionalOnClass标识SqlSessionFactory类存在时,执行该配置,@ConditionalOnBean标识DataSourceBean在 Spring Context时,执行配置。 这些spring.factories是怎么被识别的呢? 这就得夸下 Spring 的FactoriesLoader了。 看下官方文档说明 启动的时候,根据ClassLoader中的jar,扫描所有spring.factories,将其中符合条件的过滤出来,执行对应的配置。重点可以关注下 AutoConfigurationImportFilter类, 、 经过这里的执行之后, filter方法把符合条件的过滤出来了。 创建自定义Starter 经过上面两步,我们大概知道 Starter的工作原理。有时候,我们需要对外提供一些工具组件时,也想以 Starter 的形式提供出来,供别人使用。步骤也还算清晰,照葫芦画瓢。 先创建自己的模块 增加需要用到的依赖 创建对应的AutoConfiguration类 创建META-INF/spring.factories文件 此时,就不需要再将 Spring Boot 做为 Parent依赖,在单独的依赖中增加 AutoConfiguration类也简单,照上面的创建一个 然后,增加文件 org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.demo.HelloServiceAutoConfiguration 在需要这个服务的地方,直接引入依赖就OK啦。 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册