springboot是现在比较流行的微服使用的框架,springboot本质上就是将spring+springmvc+mybatis零配置化,基本上springboot的默认配置符合我们的开发。当然有一部分还是需要自定义的。

本章不是专门讲springboot的,主要将springboot+mybatis plus是如何整合的。

一、导入pom依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.9.RELEASE</version>
  5. </parent>
  6.  
  7. <repositories>
  8. <!--阿里云仓库-->
  9. <repository>
  10. <id>aliyun</id>
  11. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  12. </repository>
  13. <!--快照版本使用,正式版本无需添加此仓库-->
  14. <repository>
  15. <id>snapshots</id>
  16. <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
  17. </repository>
  18. </repositories>
  19.  
  20. <properties>
  21. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  22. <maven.compiler.source>1.7</maven.compiler.source>
  23. <maven.compiler.target>1.7</maven.compiler.target>
  24. <mybatis-plus-boot-starter.version>2.1.9</mybatis-plus-boot-starter.version>
  25. <mybatisplus.version>2.1.8</mybatisplus.version>
  26. <HikariCP.version>2.4.13</HikariCP.version>
  27. <fastjson.version>1.2.39</fastjson.version>
  28. <druid.version>1.1.0</druid.version>
  29. </properties>
  30.  
  31. <dependencies>
  32.  
  33. <!-- slf4j -->
  34. <dependency>
  35. <groupId>org.slf4j</groupId>
  36. <artifactId>slf4j-api</artifactId>
  37. <version>1.7.19</version>
  38. </dependency>
  39.  
  40. <!-- Druid -->
  41. <dependency>
  42. <groupId>com.alibaba</groupId>
  43. <artifactId>druid</artifactId>
  44. <version>${druid.version}</version>
  45. </dependency>
  46.  
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-web</artifactId>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-starter-jetty</artifactId>
  54. </dependency>
  55.  
  56. <dependency>
  57. <groupId>com.zaxxer</groupId>
  58. <artifactId>HikariCP-java7</artifactId>
  59. <version>${HikariCP.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>com.alibaba</groupId>
  63. <artifactId>fastjson</artifactId>
  64. <version>${fastjson.version}</version>
  65. </dependency>
  66. <!-- mybatis-plus begin -->
  67. <dependency>
  68. <groupId>com.baomidou</groupId>
  69. <artifactId>mybatis-plus-boot-starter</artifactId>
  70. <version>${mybatis-plus-boot-starter.version}</version>
  71. <exclusions>
  72. <exclusion>
  73. <artifactId>tomcat-jdbc</artifactId>
  74. <groupId>org.apache.tomcat</groupId>
  75. </exclusion>
  76. </exclusions>
  77. </dependency>
  78. <!-- mybatis-plus end -->
  79.  
  80. <!-- JUnit test dependency -->
  81. <dependency>
  82. <groupId>org.springframework.boot</groupId>
  83. <artifactId>spring-boot-starter-test</artifactId>
  84. <scope>test</scope>
  85. </dependency>
  86. <dependency>
  87. <groupId>com.jayway.restassured</groupId>
  88. <artifactId>rest-assured</artifactId>
  89. <version>2.9.0</version>
  90. <scope>test</scope>
  91. </dependency>
  92.  
  93. <!-- Code generator test sample-->
  94. <dependency>
  95. <groupId>org.apache.velocity</groupId>
  96. <artifactId>velocity</artifactId>
  97. <version>1.7</version>
  98. <scope>test</scope>
  99. </dependency>
  100.  
  101. <dependency>
  102. <groupId>mysql</groupId>
  103. <artifactId>mysql-connector-java</artifactId>
  104. <version>5.1.21</version>
  105. </dependency>
  106.  
  107. </dependencies>
  108.  
  109. <build>
  110. <plugins>
  111. <plugin>
  112. <groupId>org.springframework.boot</groupId>
  113. <artifactId>spring-boot-maven-plugin</artifactId>
  114. </plugin>
  115. </plugins>
  116. </build>

二、编写application.yml配置文件

  1. #app
  2. server:
  3. port: 8080
  4.  
  5. #spring
  6. spring:
  7. devtools:
  8. restart:
  9. enabled: false
  10.  
  11. datasource:
  12. url: jdbc:mysql://127.0.0.1:3306/blog?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
  13. username: root
  14. password: 1234
  15. db-name: blog
  16. filters: log4j,wall,mergeStat1
  17.  
  18. #mybatis
  19. mybatis-plus:
  20. mapper-locations: classpath:/mapper/*Dao.xml
  21. #实体扫描,多个package用逗号或者分号分隔
  22. typeAliasesPackage: com.blog.springboot.entity
  23. global-config:
  24. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  25. id-type: 2
  26. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
  27. field-strategy: 2
  28. #驼峰下划线转换
  29. db-column-underline: true
  30. #刷新mapper 调试神器
  31. refresh-mapper: true
  32. #数据库大写下划线转换
  33. #capital-mode: true
  34.  
  35. #逻辑删除配置(下面3个配置)
  36. logic-delete-value: 0
  37. logic-not-delete-value: 1
  38. #自定义sql注入器,不在推荐使用此方式进行配置,请使用自定义bean注入
  39. sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  40. #自定义填充策略接口实现,不在推荐使用此方式进行配置,请使用自定义bean注入
  41. meta-object-handler: com.blog.springboot.MyMetaObjectHandler
  42. #自定义SQL注入器
  43. #sql-injector: com.baomidou.springboot.xxx
  44. # SQL 解析缓存,开启后多租户 @SqlParser 注解生效
  45. sql-parser-cache: true
  46. configuration:
  47. map-underscore-to-camel-case: true
  48. cache-enabled: false
  49. #logging
  50. logging:
  51. level: warn

三、准备相关的类(例如springboot启动类等)

Application.java

  1. package com.blog.springboot;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.boot.Banner;
  6. import org.springframework.boot.SpringApplication;
  7. import org.springframework.boot.autoconfigure.SpringBootApplication;
  8. import org.springframework.transaction.annotation.EnableTransactionManagement;
  9.  
  10. @EnableTransactionManagement
  11. @SpringBootApplication
  12. public class Application {
  13.  
  14. protected final static Logger logger = LoggerFactory.getLogger(Application.class);
  15.  
  16. public static void main(String[] args) {
  17. SpringApplication app = new SpringApplication(Application.class);
  18. app.setBannerMode(Banner.Mode.OFF);
  19. app.run(args);
  20. logger.info("Application is success!");
  21.  
  22. }
  23.  
  24. }

MyMetaObjectHandler.java

  1. package com.blog.springboot;
  2.  
  3. import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
  4. import org.apache.ibatis.reflection.MetaObject;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7.  
  8. /**
  9. * 注入公共字段自动填充,任选注入方式即可
  10. */
  11. //@Component
  12. public class MyMetaObjectHandler extends MetaObjectHandler {
  13.  
  14. protected final static Logger logger = LoggerFactory.getLogger(Application.class);
  15.  
  16. @Override
  17. public void insertFill(MetaObject metaObject) {
  18. logger.info("新增");
  19. }
  20.  
  21. @Override
  22. public void updateFill(MetaObject metaObject) {
  23. logger.info("更新");
  24. }
  25. }

MybatisPlusConfig.java

  1. package com.blog.springboot.config;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import com.baomidou.mybatisplus.incrementer.H2KeyGenerator;
  7. import com.baomidou.mybatisplus.incrementer.IKeyGenerator;
  8. import com.baomidou.mybatisplus.mapper.ISqlInjector;
  9. import com.baomidou.mybatisplus.mapper.LogicSqlInjector;
  10. import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
  11.  
  12. import org.mybatis.spring.annotation.MapperScan;
  13. import org.springframework.context.annotation.Bean;
  14. import org.springframework.context.annotation.Configuration;
  15.  
  16. import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
  17. import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
  18. import com.baomidou.mybatisplus.plugins.parser.ISqlParser;
  19. import com.baomidou.mybatisplus.plugins.parser.tenant.TenantHandler;
  20. import com.baomidou.mybatisplus.plugins.parser.tenant.TenantSqlParser;
  21. import com.blog.springboot.MyMetaObjectHandler;
  22.  
  23. import net.sf.jsqlparser.expression.Expression;
  24. import net.sf.jsqlparser.expression.LongValue;
  25.  
  26. @Configuration
  27. @MapperScan("com.blog.springboot.mapper*")
  28. public class MybatisPlusConfig {
  29.  
  30. /**
  31. * mybatis-plus SQL执行效率插件【生产环境可以关闭】
  32. */
  33. @Bean
  34. public PerformanceInterceptor performanceInterceptor() {
  35. return new PerformanceInterceptor();
  36. }
  37.  
  38. @Bean
  39. public MetaObjectHandler metaObjectHandler(){
  40. return new MyMetaObjectHandler();
  41. }
  42.  
  43. /**
  44. * 注入主键生成器
  45. */
  46. @Bean
  47. public IKeyGenerator keyGenerator(){
  48. return new H2KeyGenerator();
  49. }
  50.  
  51. /**
  52. * 注入sql注入器
  53. */
  54. @Bean
  55. public ISqlInjector sqlInjector(){
  56. return new LogicSqlInjector();
  57. }
  58.  
  59. }

  

WebConfig.java

  1. package com.blog.springboot.config;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.http.converter.HttpMessageConverter;
  7. import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
  8. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  9. import org.springframework.web.bind.annotation.ControllerAdvice;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  11.  
  12. import com.fasterxml.jackson.annotation.JsonInclude;
  13. import com.fasterxml.jackson.databind.MapperFeature;
  14. import com.fasterxml.jackson.databind.ObjectMapper;
  15. import com.fasterxml.jackson.databind.module.SimpleModule;
  16. import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
  17.  
  18. /**
  19. * <p>
  20. * WEB 初始化相关配置
  21. * </p>
  22. */
  23. @ControllerAdvice
  24. @Configuration
  25. public class WebConfig extends WebMvcConfigurerAdapter {
  26.  
  27. @Override
  28. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  29. Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
  30. builder.serializationInclusion(JsonInclude.Include.NON_NULL);
  31. ObjectMapper objectMapper = builder.build();
  32. SimpleModule simpleModule = new SimpleModule();
  33. simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
  34. objectMapper.registerModule(simpleModule);
  35. objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);// 忽略 transient 修饰的属性
  36. converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
  37. super.configureMessageConverters(converters);
  38. }
  39. }

上述类启动类和对mapper文件扫描的类是一定要用到的,功能的话,就不用多说了,启动类,运行即可通过地址栏进入界面,因为我在pom文件中配置了tomcat,就算不配置,springboot也会自带一个servlet容器,扫描类,主要针对xml文件,相当于mybatis的动态扫描的接口编程方式。

四、使用代码生成器进行代码生成(具体可以参考我的MP实战系列(六)之代码生成器讲解)

生成的代码,我还是先贴出来

(1)实体类

  1. package com.blog.springboot.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import com.baomidou.mybatisplus.activerecord.Model;
  6. import com.baomidou.mybatisplus.annotations.TableField;
  7. import com.baomidou.mybatisplus.annotations.TableId;
  8. import com.baomidou.mybatisplus.annotations.TableName;
  9. import com.baomidou.mybatisplus.enums.IdType;
  10.  
  11. /**
  12. * <p>
  13. *
  14. * </p>
  15. *
  16. * @author yc
  17. * @since 2018-05-19
  18. */
  19. @TableName("user")
  20. public class UserEntity extends Model<UserEntity> {
  21.  
  22. /**
  23. * 用户ID
  24. */
  25. @TableId(value = "user_id", type = IdType.AUTO)
  26. private Integer user_id;
  27. /**
  28. * 用户名
  29. */
  30. private String username;
  31. /**
  32. * 性别
  33. */
  34. private Integer sex;
  35. /**
  36. * 电话
  37. */
  38. private String phone;
  39. /**
  40. * 密码
  41. */
  42. private String password;
  43. /**
  44. * 等级
  45. */
  46. private Integer level;
  47. /**
  48. * 用户创建时间
  49. */
  50. @TableField("create_time")
  51. private String createTime;
  52. /**
  53. * 邮箱
  54. */
  55. private String email;
  56. /**
  57. * 登录标识
  58. */
  59. private Integer logo;
  60. /**
  61. * 登录时间
  62. */
  63. @TableField("login_time")
  64. private String loginTime;
  65.  
  66. public Integer getUserId() {
  67. return user_id;
  68. }
  69.  
  70. public void setUserId(Integer user_id) {
  71. this.user_id = user_id;
  72. }
  73.  
  74. public String getUsername() {
  75. return username;
  76. }
  77.  
  78. public void setUsername(String username) {
  79. this.username = username;
  80. }
  81.  
  82. public Integer getSex() {
  83. return sex;
  84. }
  85.  
  86. public void setSex(Integer sex) {
  87. this.sex = sex;
  88. }
  89.  
  90. public String getPhone() {
  91. return phone;
  92. }
  93.  
  94. public void setPhone(String phone) {
  95. this.phone = phone;
  96. }
  97.  
  98. public String getPassword() {
  99. return password;
  100. }
  101.  
  102. public void setPassword(String password) {
  103. this.password = password;
  104. }
  105.  
  106. public Integer getLevel() {
  107. return level;
  108. }
  109.  
  110. public void setLevel(Integer level) {
  111. this.level = level;
  112. }
  113.  
  114. public String getCreateTime() {
  115. return createTime;
  116. }
  117.  
  118. public void setCreateTime(String createTime) {
  119. this.createTime = createTime;
  120. }
  121.  
  122. public String getEmail() {
  123. return email;
  124. }
  125.  
  126. public void setEmail(String email) {
  127. this.email = email;
  128. }
  129.  
  130. public Integer getLogo() {
  131. return logo;
  132. }
  133.  
  134. public void setLogo(Integer logo) {
  135. this.logo = logo;
  136. }
  137.  
  138. public String getLoginTime() {
  139. return loginTime;
  140. }
  141.  
  142. public void setLoginTime(String loginTime) {
  143. this.loginTime = loginTime;
  144. }
  145.  
  146. @Override
  147. public String toString() {
  148. return "User{" +
  149. "userId=" + user_id +
  150. ", username=" + username +
  151. ", sex=" + sex +
  152. ", phone=" + phone +
  153. ", password=" + password +
  154. ", level=" + level +
  155. ", createTime=" + createTime +
  156. ", email=" + email +
  157. ", logo=" + logo +
  158. ", loginTime=" + loginTime +
  159. "}";
  160. }
  161.  
  162. @Override
  163. protected Serializable pkVal() {
  164. // TODO Auto-generated method stub
  165. return this.user_id;
  166. }
  167. }

(2)dao

  1. package com.blog.springboot.mapper;
  2.  
  3. import com.blog.springboot.entity.UserEntity;
  4. import com.baomidou.mybatisplus.mapper.BaseMapper;
  5.  
  6. /**
  7. * <p>
  8. * Mapper 接口
  9. * </p>
  10. *
  11. * @author yc
  12. * @since 2018-05-19
  13. */
  14. public interface UserDao extends BaseMapper<UserEntity> {
  15.  
  16. }

(3)service

  1. package com.blog.springboot.service;
  2.  
  3. import com.blog.springboot.entity.UserEntity;
  4. import com.baomidou.mybatisplus.service.IService;
  5.  
  6. /**
  7. * <p>
  8. * 服务类
  9. * </p>
  10. *
  11. * @author yc
  12. * @since 2018-05-19
  13. */
  14. public interface UserService extends IService<UserEntity> {
  15.  
  16. }

(4)service实现类

  1. package com.blog.springboot.service.impl;
  2.  
  3. import com.blog.springboot.entity.UserEntity;
  4. import com.blog.springboot.mapper.UserDao;
  5. import com.blog.springboot.service.UserService;
  6. import com.baomidou.mybatisplus.service.impl.ServiceImpl;
  7. import org.springframework.stereotype.Service;
  8.  
  9. /**
  10. * <p>
  11. * 服务实现类
  12. * </p>
  13. *
  14. * @author yc
  15. * @since 2018-05-19
  16. */
  17. @Service
  18. public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {
  19.  
  20. }

(5)controller

  1. package com.blog.springboot.controller;
  2.  
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4.  
  5. import org.springframework.stereotype.Controller;
  6.  
  7. /**
  8. * <p>
  9. * 前端控制器
  10. * </p>
  11. *
  12. * @author yc
  13. * @since 2018-05-19
  14. */
  15. @Controller
  16. @RequestMapping("/user")
  17. public class UserController {
  18.  
  19. }

(6)UserDao.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.blog.springboot.mapper.UserDao">
  4.  
  5. <!-- 通用查询映射结果 -->
  6. <resultMap id="BaseResultMap" type="com.blog.springboot.entity.UserEntity">
  7. <id column="user_id" property="user_id" />
  8. <result column="username" property="username" />
  9. <result column="sex" property="sex" />
  10. <result column="phone" property="phone" />
  11. <result column="password" property="password" />
  12. <result column="level" property="level" />
  13. <result column="create_time" property="createTime" />
  14. <result column="email" property="email" />
  15. <result column="logo" property="logo" />
  16. <result column="login_time" property="loginTime" />
  17. </resultMap>
  18.  
  19. <!-- 通用查询结果列 -->
  20. <sql id="Base_Column_List">
  21. user_id AS userId, username, sex, phone, password, level, create_time AS createTime, email, logo, login_time AS loginTime
  22. </sql>
  23.  
  24. </mapper>

(7)springboot单元测试

  1. package com..test;
  2.  
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  8.  
  9. import com.blog.springboot.Application;
  10. import com.blog.springboot.entity.UserEntity;
  11. import com.blog.springboot.mapper.UserDao;
  12.  
  13. @RunWith(SpringJUnit4ClassRunner.class)
  14. @SpringBootTest(classes = Application.class)
  15. public class UserTest{
  16. @Autowired
  17. private UserDao ud;
  18.  
  19. @Test
  20. public void test001() {
  21.  
  22. UserEntity userEntity = ud.selectById(1);
  23. System.out.println(userEntity.getCreateTime()+"||"+userEntity.getEmail());
  24. }
  25.  
  26. }

MP实战系列(七)之集成springboot的更多相关文章

  1. MP实战系列(二)之集成swagger

    其实与spring+springmvc+mybatis集成swagger没什么区别,只是之前写的太不好了,所以这次决定详细写. 提到swagger不得不提rest,rest是一种架构风格,里面有对不同 ...

  2. MP实战系列(九)之集成Shiro

    下面示例是在之前的基础上进行的,大家如果有什么不明白的可以参考MP实战系列的前八章 当然,同时也可以参考MyBatis Plus官方教程 建议如果参考如下教程,使用的技术为spring+mybatis ...

  3. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  4. MP实战系列(十二)之封装方法详解(续二)

    继续MP实战系列(十一)之封装方法详解(续一)这篇文章之后. 此次要讲的是关于查询. 查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事. 1.selectB ...

  5. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  6. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

  7. MP实战系列(十)之SpringMVC集成SpringFox+Swagger2

    该示例基于之前的实战系列,如果公司框架是使用JDK7以上及其Spring+MyBatis+SpringMVC/Spring+MyBatis Plus+SpringMVC可直接参考该实例. 不过建议最好 ...

  8. MP实战系列(八)之SpringBoot+Swagger2

    SpringBoot一个原则,爱好编程的朋友们都知道,那就是"习惯优于配置". 今天一上来主要说的还是代码,个人比较喜欢来的实战系列的,不过有的时候还是比较偏重于理论,理论是造轮子 ...

  9. MP实战系列(三)之实体类讲解

    首先说一句,mybatis plus实在太好用了! mybaits plus的实体类: 以我博客的用户类作为讲解 package com.blog.entity; import com.baomido ...

随机推荐

  1. AnyVal与AnyRef

    AnyRef 是所有引用类型的基类.除了值类型,所有类型都继承自AnyRef .   AnyVal AnyVal 所有值类型的基类, 它描述的是值,而不是代表一个对象. 它包括 9 个 AnyVal ...

  2. Java基础——Oracle(七)

    一.概述 pl/sql (procedural lanaguage/sql)是 oracle 在标准 sql 上的扩展 .不仅允许嵌入sql 语言,还可以定义变量和常量,允许使用条件语句和循环语句,允 ...

  3. Linux下编译、链接和装载

    ——<程序员的自我修养>读书笔记 编译过程 在Linux下使用GCC将源码编译成可执行文件的过程可以分解为4个步骤,分别是预处理(Prepressing).编译(Compilation). ...

  4. 深入理解Java 8 Lambda(语言篇)

    State of Lambda by Brian Goetz 原文链接:http://lucida.me/blog/java-8-lambdas-insideout-language-features ...

  5. Team Foundation Server 2013 KEY(密钥)

    isual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥): ...

  6. Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法

    1.安装步骤: 首先,你要先进入pycharm的Project Interpreter界面,进入方法是:setting(ctrl+alt+s) ->Project Interpreter,Pro ...

  7. flex 布局下,css 设置文本不换行时,省略号不显示的解决办法

    大致是有一个 main 容器是 flex 布局,左边一个 logo 固定宽高,右边 content 动态宽度. <div class="main"> <img a ...

  8. 【读书笔记】iOS-Objective-C编程

    Objective-C中的类可以继承自任何一个顶级类,需要注意的是,虽然NSObject是最常见的顶级类,但是它并不是唯一的顶级类,例如,NSProxy就是和NSObject一样的顶级类,所以你不能说 ...

  9. Power BI 与 Azure Analysis Services 的数据关联:3、还原备份文件到Azure Analysis Services

    Power BI 与 Azure  Analysis Services 的数据关联:3.还原备份文件到Azure  Analysis Services 配置存储设置 备份前,需要为服务器配置存储设置. ...

  10. Android手势密码--设置和校验

    private void setGesturePassword() { toggleMore.setOnCheckedChangeListener(new CompoundButton.OnCheck ...