MyBatisPlus(基于starter和Bean方式)

文章目录

        • 基于boot-starter方式
        • 基于Bean方式

基于boot-starter方式

1、【microboot项目】修改配置文件,引入所需要的相关依赖库:
dependences.gradle

ext.versions = [    // 定义所有要使用的版本号springboot                          : '2.4.3', // SpringBoot版本号junit                               : '5.7.1', // 配置JUnit测试工具的版本编号junitPlatformLauncher               : '1.7.1',  // JUnit测试工具运行平台版本编号lombok                              : '1.18.18', // Lombok插件对应的版本号mysql                               : '8.0.25', // MySQL驱动的版本druid                               : '1.2.6', // Druid版本mybatisplus                         : '3.4.3', // Mybatis-plus-SpringBoot整合依赖
]
ext.libraries = [   // 定义所有的依赖库'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",// 以下的配置为与项目用例测试有关的依赖'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",'junit-bom': "org.junit:junit-bom:${versions.junit}",// 以下的配置为Lombok组件有关的依赖'lombok': "org.projectlombok:lombok:${versions.lombok}",// 以下的配置为数据库开发所需要的依赖:'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",'druid': "com.alibaba:druid:${versions.druid}",// 以下的配置为MyBatis开发框架所需要的依赖:'mybatis-plus-boot-starter': "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",
]

build.gradle

project('microboot-database') { // 子模块dependencies { // 配置子模块依赖compile(project(':microboot-common')) // 引入其他子模块compile(libraries.'mysql-connector-java')compile(libraries.'druid') // 添加原始依赖compile(libraries.'mybatis-plus-boot-starter')}
}

2、【microboot-database子模块】application.yml

spring:datasource:type: com.alibaba.druid.pool.DruidDataSource # 配置数据源的类型driver-class-name: com.mysql.cj.jdbc.Driver # MySQL8之后的驱动url: jdbc:mysql://localhost:3306/yootk # 数据库的JDBC连接地址username: root # 用户名password: mysqladmin # 密码druid: # 定义数据库连接池所需要的相关配置项initial-size: 5 # 初始化连接池大小min-idle: 10 # 最小维持的连接池大小max-active: 50 # 最大可提供的连接数量max-wait: 60000 # 最长等待时间time-between-eviction-runs-millis: 6000 # 关闭空闲连接间隔(毫秒)min-evictable-idle-time-millis: 30000 # 连接最小的生存时间validation-query: SELECT 1 FROM dual # 数据库的状态检测test-while-idle: true # 判断连接是否可用test-on-borrow: false # 在获得连接之前是否要进行测试test-on-return: false # 归还连接前是否需要进行测试pool-prepared-statements: false # 不缓存PSTMTmax-pool-prepared-statement-per-connection-size: 20 # 配置PSTMT缓存个数mybatis-plus:config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路径type-aliases-package: com.yootk.vo  # 定义所有操作类的别名所在包mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件global-config: # 全局配置db-config: //logic-not-delete-value: 0 # 数据删除前logic-delete-value: 1 # 数据删除后

此时在member表中存在有一个isdel字段,那么这个字段的内容就是逻辑删除项,如果是O(false)表示未删除,如果是1 (true)表示删除操作。

3、【microboot-database子模块】修改 Member程序类,追加逻辑删除的配置项:

package com.yootk.vo;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.util.Date;@Data
@TableName("member") // 定义该VO类对应的数据表名称
public class Member {@TableId // 配置主键列private String mid;private String name;private Integer age;private Double salary;private Date birthday;private String content;@TableLogic // 逻辑删除处理private Integer isdel; // 逻辑删除字段
}

4、【microboot-database子模块】创建IMemberDAO接口实现member数据表的配置

package com.yootk.dao;import com.yootk.vo.Member;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface IMemberDAO { // 定义DAO接口public List<Member> findAll(); // 查询全部
}

5、 【microboot-database子模块】分页配置

package com.yootk.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig { // Mybatis拦截器配置@Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分页实现);return interceptor;}
}

6、 【microboot-database子模块】修改IMemberDAO数据接口,要存在有继承的父接口

package com.yootk.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yootk.vo.Member;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface IMemberDAO extends BaseMapper<Member> { // 定义DAO接口public List<Member> findAll(); // 查询全部,这个方法一定要存在有映射实现
}

7、【microboot-database子模块】修改IMemberService 业务接口,在该接口之中实现核心的CRUD数据处理操作

package com.yootk.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yootk.vo.Member;import java.util.List;
import java.util.Set;public interface IMemberService {public List<Member> list();public Member get(String mid); // 根据ID查询public boolean add(Member vo); // 增加数据public boolean delete(Set<String> ids); // 数据删除public Map<String, Object> listSplit(String column, String keyword,Integer currentPage, Integer lineSize); // 分页查询
}

8、【microboot-database子模块】MemberServiceImpl

package com.yootk.service.impl.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yootk.dao.IMemberDAO;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Set;@Service
public class MemberServiceImpl implements IMemberService {@Autowiredprivate IMemberDAO memberDAO;@Overridepublic List<Member> list() {return this.memberDAO.findAll();}@Overridepublic Member get(String mid) {return this.memberDAO.selectById(mid);}@Overridepublic boolean add(Member vo) {return this.memberDAO.insert(vo) > 0;}@Overridepublic boolean delete(Set<String> ids) {return this.memberDAO.deleteBatchIds(ids) == ids.size();}@Overridepublic Map<String, Object> listSplit(String column, String keyword, Integer currentPage, Integer lineSize) {QueryWrapper<Member> wrapper = new QueryWrapper<>();wrapper.like(column, keyword); // 设置模糊查询操作int count = this.memberDAO.selectCount(wrapper); // 统计个数// 实现数据的查询处理IPage<Dept> page = this.memberDAO.selectPage(new Page<>(currentPage, lineSize, count), wrapper);Map<String, Object> map = new HashMap<>(); // 包装返回结果map.put("allMembers", page.getRecords()); //数据记录map.put("allRecorders", page.getTotal());  //总数map.put("allPages", page.getPages());  //页数return map;}
}

9、【microboot-database子模块】编写一个测试类,对当前的业务接口的功能进行测试

package com.yootk.test;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yootk.StartSpringBootDatabaseApplication;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;import java.util.Date;
import java.util.Set;@ExtendWith(SpringExtension.class) // 使用JUnit5测试工具
@WebAppConfiguration // 启动WEB运行环境
@SpringBootTest(classes = StartSpringBootDatabaseApplication.class) // 配置程序启动类
public class TestMemberService { // 编写测试类@Autowiredprivate IMemberService memberService;@Testpublic void testFindAll() {System.out.println(this.memberService.list());}@Testpublic void testGet() {System.out.println(this.memberService.get("yootk"));}@Testpublic void testAdd() {Member vo = new Member();vo.setMid("yootk - " + Math.random());vo.setName("沐言科技");vo.setBirthday(new Date());vo.setSalary(865.0);vo.setContent("www.yootk.com");vo.setAge(16);System.out.println(this.memberService.add(vo));}@Testpublic void testSplit() {Map<String, Object> map = this.memberService.listSplit("name", "沐言", 1, 5);System.out.println("总页数:" + map.get(allPages));System.out.println("总记录数:" + map.get(allRecorders));System.out.println("响应内容:" + map.get(allMembers));}@Testpublic void testDelete() {Set<String> ids = Set.of("muyan", "yootk", "lixinghua");this.memberService.delete(ids);}
}

10、【microboot-database子模块】

package com.yootk.action;import com.yootk.common.action.abs.AbstractBaseAction;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;@RestController
@RequestMapping("/member/*")
@Slf4j
public class MemberAction extends AbstractBaseAction {@Autowiredprivate IMemberService memberService;@RequestMapping("list")public Object list() {log.info("查询全部Member数据。");return this.memberService.list();}@RequestMapping("get")public Object get(String mid) {log.info("查询用户数据:{}", mid);return this.memberService.get(mid);}@RequestMapping("add")public Object add(Member member) {log.info("增加新的用户数据:{}", member);return this.memberService.add(member);}@RequestMapping("delete")public Object delete(String ... id) {log.info("根据ID删除数据:{}", id);Set<String> ids = new HashSet<>();ids.addAll(Arrays.asList(id));return this.memberService.delete(ids);}@RequestMapping("split")public Map<String, Object> split(String column, String keyword, int currentPage, int lineSize) {log.info("数据分页显示,查询模糊列:{}、查询关键字:{}、当前页:{}、每页行数:{}");return this.memberService.listSplit(column, keyword, currentPage, lineSize);}
}

基于Bean方式

现在为止实现的Mybatis 整个的流程都是基于starter组件“mybatis-plus-boot-starter”实现的,所以所有的配置项只需要在 application.yml里面进行定义即可,但是除了这种操作之外,也可以直接基于Bean的模式手工配置。

1、【microboot项目】修改配置文件,引入所需要的相关依赖库:
dependences.gradle

ext.versions = [    // 定义所有要使用的版本号springboot                          : '2.4.3', // SpringBoot版本号junit                               : '5.7.1', // 配置JUnit测试工具的版本编号junitPlatformLauncher               : '1.7.1',  // JUnit测试工具运行平台版本编号lombok                              : '1.18.18', // Lombok插件对应的版本号mysql                               : '8.0.25', // MySQL驱动的版本druid                               : '1.2.6', // Druid版本mybatisplus                         : '3.4.3', // Mybatis-plus-SpringBoot整合依赖
]
ext.libraries = [   // 定义所有的依赖库'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",// 以下的配置为与项目用例测试有关的依赖'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",'junit-bom': "org.junit:junit-bom:${versions.junit}",// 以下的配置为Lombok组件有关的依赖'lombok': "org.projectlombok:lombok:${versions.lombok}",// 以下的配置为数据库开发所需要的依赖:'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",'druid': "com.alibaba:druid:${versions.druid}",// 以下的配置为MyBatis开发框架所需要的依赖:'mybatis-plus': "com.baomidou:mybatis-plus:${versions.mybatisPlus}",//'mybatis-plus-boot-starter': "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",
]
project('microboot-database') { // 子模块dependencies { // 配置子模块依赖compile(project(':microboot-common')) // 引入其他子模块compile(libraries.'druid') // 添加原始依赖compile(libraries.'mysql-connector-java')// compile(libraries.'druid-spring-boot-starter') // 删除掉此依赖库配置compile(libraries.'mybatis-plus')}
}

2、【microboot项目】如果要想进行Bean的配置,则一些相关的配置内容也应该定义在资源文件里面,那么本次就直接继续使用之前自动配置时所提供的配置项:

mybatis-plus:config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路径type-aliases-package: com.yootk.vo  # 定义所有操作类的别名所在包mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件global-config: # 全局配置db-config:logic-not-delete-value: 0 # 数据删除前logic-delete-value: 1 # 数据删除后

3、【microboot-database子模块】创建MyBatisPlusConfig 配置类,引入SqlSessionFactoryBean 实例,并且进行MyBatisPlus相关环境定义

package com.yootk.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;import javax.sql.DataSource;@Configuration
public class MybatisPlusConfig { // Mybatis拦截器配置private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();@Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分页实现);return interceptor;}@Bean("mybatisSqlSessionFactoryBean")public MybatisSqlSessionFactoryBean getMybatisSqlSessionFactoryBean(@Autowired DataSource dataSource, // 要使用的数据源@Value("${mybatis-plus.config-location}") Resource configLocation, // 资源文件路径@Value("${mybatis-plus.type-aliases-package}") String typeAliasesPackage, // 扫描别名@Value("${mybatis-plus.mapper-locations}") String mapperLocations, // Mapping映射路径@Value("${mybatis-plus.global-config.db-config.logic-not-delete-value}") String logicNotDeleteValue,@Value("${mybatis-plus.global-config.db-config.logic-delete-value:}") String logicDeleteValue) throws Exception {MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();mybatisPlus.setDataSource(dataSource); // 配置项目中要使用的数据源mybatisPlus.setVfs(SpringBootVFS.class); // 配置程序的扫描类mybatisPlus.setTypeAliasesPackage(typeAliasesPackage); // 扫描包的别名Resource[] mappings = this.resourcePatternResolver.getResources(mapperLocations);mybatisPlus.setMapperLocations(mappings);GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig(); // 数据配置dbConfig.setLogicNotDeleteValue(logicNotDeleteValue); // 未删除时的数据内容dbConfig.setLogicDeleteValue(logicDeleteValue); // 删除时的数据内容GlobalConfig globalConfig = new GlobalConfig(); // 定义全局配置globalConfig.setDbConfig(dbConfig); // 全局配置项mybatisPlus.setGlobalConfig(globalConfig);return mybatisPlus;}
}

此时已经成功的使用了自定义的MybatisPlus配置Bean代替了starter配置 (starter内部也只是封装了这样的一种配置类而已,本质上都是相同的)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj1013-GCD与LCM【数论】

正题 大意 给出某对数a,b的gcd和lcm&#xff0c;然后求b-a的最小值 解题思路 我们定义A为gcd(a,b)gcd(a,b)&#xff0c;B为lcm(a.b)lcm(a.b)首先我们拿出推lcm的公式 Bab/ABab/A然后移项得 abAB(A≤a,b≤B)abAB(A≤a,b≤B)之后我们就可以枚举了。首先因为只有AA的倍数gcd(a,…

解决Visual Studio For Mac Restore失败的问题

之前就了解到微软出了mac版的VS&#xff0c;没太多的关注&#xff0c;自己也就是使用 DotNet Core SDK VS Code 做一些小demo。 前两天发布了DotNet Core 2.0 &#xff0c;Visual Studio For Mac 7.1 之后&#xff0c;感觉可以装起来用用&#xff0c;把win下面的项目转到Core…

来之不易的美团面试,结果居然挂了...(附面试答案)

转载自 来之不易的美团面试&#xff0c;结果居然挂了...&#xff08;附面试答案&#xff09; 一面 自我介绍 答&#xff1a;自我介绍是面试中唯一的自己主动介绍自己的环节&#xff0c;一定要好好把握好&#xff0c;你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握…

三班的孩子们,你们现在还好吗?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。三班的孩子们&#xff0c;你们还好吗&#xff1f;虽然已经就业&#xff0c;但还是会时不时的想起你们来&#xff0c;希望你们过的一切都好&#xff0c;在公司中也能快速适应。上午拿着电脑准备去四班上…

AOP案例(日志)

Logs 实体类 Data NoArgsConstructor AllArgsConstructor ApiModel public class Logs implements Serializable {private static final long serialVersionUID -89998567097386518L;/*** 日志ID*/ApiModelProperty(hidden true)private Integer opid;/*** 操作时间*/ApiMod…

jzoj1164-求和【欧拉函数,数论】(筛欧拉函数模板)

正题 大意 给出一个nn,求1&#x223C;n" role="presentation" style="position: relative;">1∼n1∼n里面和nn互质的数的和。解题思路&#x03C6;(i)" role="presentation" style="position: relative;">φ(i)φ(…

升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

概述 容器&#xff0c;顾名思义是用来存放并容纳东西的器皿&#xff1b; 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘&#xff0c;它是一个抽象的概念&#xff0c;同时也是默默存在世上多年的技术&#xff0c;不仅能使应用程序间完全的隔离&#xff0c;而且还能在共享…

MySQL 大表优化方案(1)

转载自 干货&#xff01;&#xff01;&#xff01;MySQL 大表优化方案&#xff08;1&#xff09; 当MySQL单表记录数过大时&#xff0c;增删改查性能都会急剧下降&#xff0c;可以参考以下步骤来优化&#xff1a; 单表优化 除非单表数据未来会一直不断上涨&#xff0c;否则…

顺时针打印3*3矩阵

import java.util.ArrayList; public class Mytest { //剑指OFFer 顺时针打印n*m矩阵 //思路 模拟过程 以顺时针顺序打印几层 取决于行数与列数中最小的那一个 两层构成一圈 两个之中最小的那个除以2 // public static void main(String[] args) { String[][] a new String[][]…

Spring Data Elasticsearch

文章目录一、 ELK二、 Elasticsearch简介三、 Linux安装Elasticsearch四、SpringData Elasticsearchpom.xmlapplication.yml创建实体创建索引 设置映射简单增删改查搜索五、 LogStash六、 使用Logback向Logstash中输出日志七、 在Kibana中查看日志信息八、 搭建日志系统九、 在…

项目参与度较低怎么办?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。经过这两天做项目的表现&#xff0c;可以很明显的看的出来学生与学生之间掌握的还是有差距的&#xff0c;组内有的组员是可以为项目贡献代码的&#xff0c;但是有的组员可能只能是贡献素材&#xff0c;…

从 TFS 迁移源代码到 git

准备工具&#xff1a; https://github.com/git-tfs/git-tfs 具体的安装步骤上面的 readme.md 中有说明。通过 Chocolatey 安装&#xff0c;如果本地没有 git &#xff0c;会自动安装 git 到本地。 迁移步骤&#xff1a; 从 Visual Studio 里面进入 Source Control Explorer…

缓存穿透、缓存并发、缓存失效之思路变迁

转载自 缓存穿透、缓存并发、缓存失效之思路变迁 在用缓存的时候&#xff0c;基本上会通用遇到以下三个问题&#xff1a; 缓存穿透缓存并发缓存失效 一、缓存穿透 上面三个图会有什么问题呢&#xff1f; 我们在项目中使用缓存通常都是先检查缓存中是否存在&#xff0c;如果…

jzoj3792,P2062-分队问题【贪心】

前言 题解上说&#xff1a; 然而我的贪心不仅A了&#xff0c;而且 反例也A了 自己的洛谷题解链接&#xff1a;https://www.luogu.org/blog/user52918/solution-p2062 正题 大意 n个人&#xff0c;每个人有一个要求a[i]表示他所在的队伍里不可以少于a[i]个人&#xff0…

反射---

问题1&#xff1a; Exception in thread “main” java.lang.NoSuchMethodException: com.bjsxt. why.Dog.(java.lang.String, java.lang.String) 原因&#xff1a;getConstructor只能获取public方法&#xff0c;无法获取其他修饰符修饰的方法。 解决&#xff1a;调用getDeclar…

.net core 2.0学习笔记(二):Hello World amp;amp; 进阶

官网已经有一个.net core的入手教程&#xff08;https://www.microsoft.com/net/core#windowscmd&#xff09;&#xff0c;但这个教程完全没有顾及全宇宙第一IDE的感受。今天就跟大家体验一下在VS2017上开发.net core程序吧。VS2017开发环境的搭建请参考&#xff1a;http://www…

MyBatis】MyBatis一级缓存和二级缓存

转载自 MyBatis】MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。 也就是在同一个SqlSession中&#xff0c;执行相同的查询SQL&#xff…

jzoj3793,P2090-数字对【更相减损术,欧几里得算法,数论】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P2090 大意 一个数对(a,b)&#xff0c;每次可以变为(ab,b)或(a,ab)。然后要求一个数对中有n求从(1,1)变成这个数对的最小次数。 解题思路 更相减损法是gcd(a,b)gcd(a,b-a)/gcd(a-b,b) 证明&#xff1a; …

反射与注解

文章目录一、反射二、注解一、反射 1.1反射引入 • 编译时知道类或对象的具体信息&#xff0c;此时直接对类和对象进行操作即可&#xff0c;无需反射&#xff08;reflection&#xff09; • 如果编译不知道类或对象的具体信息&#xff0c;此时应该如何做呢&#xff1f;使用反射…

.net core 2.0学习笔记(一):开发运行环境搭建

期待已久的.net core 2.0终于发布了&#xff01;大家等的花儿都谢了。 不过比预期提前了一个多月&#xff0c;这在微软历史上还真的不多见。按照历史经验看&#xff0c;2.0版本应该比较靠谱&#xff0c;我猜这也是社区非常火爆的原因吧。下面就简单分享一下.net core2.0开发运行…