当前位置: 首页 > news >正文

建设自己的淘宝优惠券网站wordpress设定域名

建设自己的淘宝优惠券网站,wordpress设定域名,办公室设计图平面布置图,开发公司出纳收款制度1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库#xff0c;其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时#xff…1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时减少出错的可能性。 1.2特征 1.轻量除了 MyBatis没有任何第三方依赖、没有任何拦截器在执行的过程中没有任何的 Sql 解析Parse。 这带来了几个好处极高的性能、极易对代码进行跟踪和调试、把控性更高。         2.灵活支持 Entity 的增删改查、以及分页查询的同时MyBatis-Flex 提供了 Db Row 工具可以无需实体类对数据库进行增删改查以及分页查询。 与此同时MyBatis-Flex 内置的 QueryWrapper 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。         3.强大支持任意关系型数据库还可以通过方言持续扩展同时支持 多复合主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。 简单来说Mybatis-Flex 相比 Mybatis-Plus 等框架 速度更快、功能更多、代码更简洁~ 1.3Mybatis-Flex和同类框架对比 1功能对比 2性能对比 这里直接贴测试结果 MyBatis-Flex 的查询单条数据的速度大概是 MyBatis-Plus 的 5 ~ 10 倍。 MyBatis-Flex 的查询 10 条数据的速度大概是 MyBatis-Plus 的 5~10 倍左右。 Mybatis-Flex 的分页查询速度大概是 Mybatis-Plus 的 5~10 倍左右。 Mybatis-Flex 的数据更新速度大概是 Mybatis-Plus 的 5~10 倍。 2 准备工作 官方文档快速开始 - MyBatis-Flex 以 Spring Boot Maven  Mysql 项目做演示 2.1 数据库中创建表及插入数据 此处省略~ 2.2 Spring Boot 项目初始化 此时需要创建 Spring Boot 项目并添加 Maven 依赖此处我通过 IDEA 使用 Spring Initializer 快速初始化一个 Spring Boot 工程。 项目创建省略~ 2.3 添加 Maven 主要依赖 往 pom.xml 文件中添加以下依赖。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-spring-boot-starter/artifactIdversion1.7.3/version/dependencydependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-processor/artifactIdversion1.7.3/versionscopeprovided/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!----!-- MyBatis分页插件 --!----dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.3.0/versionoptionaltrue/optional/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.12.0/version/dependency 2.4 配置数据源 在 application.properties 或 application.yml 中配置数据源 server.port8999spring.application.namemybatisPlusspring.datasource.usernameroot spring.datasource.passwordroot3306 spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_plus?useSSLfalseuseUnicodetruecharacterEncodingutf-8serverTimezoneGMT%2B8 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver 3 Mybatis-Flex 实践 3.1 编写实体类和 Mapper 接口 User 实体类 使用 Table(flex_user) 设置实体类与表名的映射关系使用 Id(keyType KeyType.Auto) 标识主键为自增 package com.mybatisflex.flex.domain;import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Table; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable; import java.util.Date;/** */ Data Builder NoArgsConstructor AllArgsConstructor //使用 Table(tb_account) 设置实体类与表名的映射关系 Table(user) public class User implements Serializable {private Integer id;Column(value name)private String name;Column(value age)private Integer age;Column(value email)private String email;Column(value create_time, onInsertValue now())private Date createTime;Column(value update_time, onUpdateValue now())private Date updateTime;Column(value del_flag)private int delFlag;Column(value dept_code)private String deptCode; }Mapper 接口继承 BaseMapper 接口 package com.mybatisflex.flex.mapper;import com.mybatisflex.core.BaseMapper; import com.mybatisflex.flex.domain.User;/*** */ public interface UserMapper extends BaseMapperUser { } 3.2 在主启动类添加 MapperScan 注解 用于扫描 Mapper 文件夹 package com.mybatisflex.flex;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication MapperScan(com.mybatisflex.flex.mapper) public class FlexApplication {public static void main(String[] args) {SpringApplication.run(FlexApplication.class, args);}} 3.3 创建service package com.mybatisflex.flex.service;import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.flex.domain.User; import com.mybatisflex.flex.domain.UserDto; import com.mybatisflex.flex.domain.table.SysDeptTableDef; import com.mybatisflex.flex.domain.table.UserTableDef; import com.mybatisflex.flex.mapper.UserMapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.springframework.stereotype.Service;import java.util.List;/*** Description:* Date Create in 10:39 2023/11/22* Modified By:*/Service public class UserService extends ServiceImplUserMapper, User {/*** 查询全部* return*/public ListUser selectAll(){return this.getMapper().selectAll();}public ListUser selectList(){QueryWrapper wrapper QueryWrapper.create()// 这里可以指定查询字段.select()// sql from表名.from(User.class).where(User::getName).like(徐).or(UserTableDef.USER.ID.in(2,3).and(UserTableDef.USER.NAME.like(o)));return this.getMapper().selectListByQuery(wrapper);}/*** 根据userId获取User数据* param userId* return*/public User listById(Integer userId){QueryWrapper wrapper QueryWrapper.create()// 这里可以指定查询字段.select()// sql from表名.from(User.class).where(User::getId).eq(userId).and(User::getName).like(徐);return this.getMapper().selectOneByQuery(wrapper);}/*** 关联查询--链式查询*/public ListUserDto getInfo(Integer userId){QueryWrapper query QueryWrapper.create().select(UserTableDef.USER.ALL_COLUMNS).select(SysDeptTableDef.SYS_DEPT.DEPT_NAME).from(UserTableDef.USER).as(u).leftJoin(SysDeptTableDef.SYS_DEPT).as(d).on(UserTableDef.USER.DEPT_CODE.eq(SysDeptTableDef.SYS_DEPT.DEPT_CODE)).where(UserTableDef.USER.ID.eq(userId));return this.getMapper().selectListByQueryAs(query,UserDto.class);}/*** 新增* param user*/public void insert(User user){this.getMapper().insert(user);}/*** 更新User* param user*/public void updateEntity(User user){this.getMapper().update(user);}/*** 局部更新* param userId* param userName*/public void updateRow(Integer userId, String userName){UpdateChain.of(User.class).set(User::getName, userName).where(User::getId).eq(userId).update();}/*** 删除* param userName*/public void deleteByWrapper(String userName){QueryWrapper queryWrapper QueryWrapper.create().where(User::getName).eq(userName);this.getMapper().deleteByQuery(queryWrapper);}}3.4创建Controller接口测试 package com.mybatisflex.flex.controller;import com.mybatisflex.flex.domain.User; import com.mybatisflex.flex.domain.UserDto; import com.mybatisflex.flex.page.TableDataInfo; import com.mybatisflex.flex.service.UserService; import com.mybatisflex.flex.utils.ResponseUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource; import java.util.List;/*** Author: best_liu* Description:* Date Create in 10:33 2023/11/22* Modified By:*/ RestController RequestMapping(/user) public class SysUserController {Resourceprivate UserService userService;/*** 查询全部* return*/GetMapping(listall)public ListUser listall(){return userService.selectAll();}/*** 分页查询* return**/GetMapping(/page)public TableDataInfo findPage() {ResponseUtils.startPage();return ResponseUtils.getDataTable(userService.selectAll());}/*** 按条件查询* return*/GetMapping(getList)public ListUser selectList(){return userService.selectList();}/*** 按userId查询* return*/GetMapping(listById)public User listById(){return userService.listById(0);}/*** 按userId关联查询部门* return*/GetMapping(getInfo)public ListUserDto getInfo(){return userService.getInfo(0);}/*** 新增* return*/GetMapping(insert)public Boolean insert(){User user User.builder().id(10).name(张三).age(100).email(zhangsan163.com).build();userService.insert(user);return Boolean.TRUE;}/*** 更新* return*/GetMapping(update)public Boolean update(){userService.updateRow(10, 张三三);return Boolean.TRUE;}/*** 删除* return*/GetMapping(delete)public Boolean delete(){userService.deleteByWrapper(张三三);return Boolean.TRUE;} }4 链式查询 若想使用链式查询还得需要 APT 配置MyBatis-Flex 使用了 APTAnnotation Processing Tool技术在项目编译的时候会自动根据 Entity/pojo 类定义的字段帮你生成 USER 类可用于链式查询 通过开发工具构建项目如下图或者执行 maven 编译命令: mvn clean package 都可以自动生成。 正常情况下会在 target 包下生成如下资源 若生成该资源并导入成功那么此时可使用链式查询 /*** 关联查询*/public ListUserDto getInfo(Integer userId){QueryWrapper query QueryWrapper.create().select(UserTableDef.USER.ALL_COLUMNS).select(SysDeptTableDef.SYS_DEPT.DEPT_NAME).from(UserTableDef.USER).as(u).leftJoin(SysDeptTableDef.SYS_DEPT).as(d).on(UserTableDef.USER.DEPT_CODE.eq(SysDeptTableDef.SYS_DEPT.DEPT_CODE)).where(UserTableDef.USER.ID.eq(userId));return this.getMapper().selectListByQueryAs(query,UserDto.class);} 总的来说MyBatis-Flex 的链式查询相比 MyBatis-Plus 多了一步配置环节目前来看其他步骤类似。 5 MyBatis-Flex/Plus 代码对比 接下来看一下MyBatis-Flex 和 MyBatis-Plus 各部分功能代码的差别Employee、Account、Article 都是实体类。 5.1 基础查询 MyBatis-Flex QueryWrapper query QueryWrapper.create().where(EMPLOYEE.LAST_NAME.like(searchWord)) //条件为null时自动忽略.and(EMPLOYEE.GENDER.eq(1)).and(EMPLOYEE.AGE.gt(24)); ListEmployee employees employeeMapper.selectListByQuery(query); MyBatis-Plus QueryWrapperEmployee queryWrapper Wrappers.query().like(searchWord ! null, last_name, searchWord).eq(gender, 1).gt(age, 24); ListEmployee employees employeeMapper.selectList(queryWrapper);//lambda 写法 LambdaQueryWrapperEmployee queryWrapper Wrappers.EmployeelambdaQuery().like(StringUtils.isNotEmpty(searchWord), Employee::getUserName,B).eq(Employee::getGender, 1).gt(Employee::getAge, 24); ListEmployee employees employeeMapper.selectList(queryWrapper); 5.2 集合查询 MyBatis-Flex QueryWrapper query QueryWrapper.create().select(ACCOUNT.ID,ACCOUNT.USER_NAME,max(ACCOUNT.BIRTHDAY),avg(ACCOUNT.SEX).as(sex_avg)); ListEmployee employees employeeMapper.selectListByQuery(query); MyBatis-Plus QueryWrapperEmployee queryWrapper Wrappers.query().select(id,user_name,max(birthday),avg(birthday) as sex_avg); ListEmployee employees employeeMapper.selectList(queryWrapper); 缺点字段硬编码容易拼错。无法使用 IDE 的字段进行重构无法使用 IDE 自动提示发生错误不能及时发现不过MyBatis-Plus的 lambdawrapper 也是能解决这个问题。 5.3 and(...) 和 or(...) 假设我们要构建如下的 SQL 进行查询需要在 SQL 中添加括号。 SELECT * FROM tb_account WHERE id 100 AND (sex 1 OR sex 2) OR (age IN (18,19,20) AND user_name LIKE %michael% ) MyBatis-Flex QueryWrapper query QueryWrapper.create().where(ACCOUNT.ID.ge(100)).and(ACCOUNT.SEX.eq(1).or(ACCOUNT.SEX.eq(2))).or(ACCOUNT.AGE.in(18, 19, 20).and(ACCOUNT.USER_NAME.like(michael))); MyBatis-Plus QueryWrapperEmployee query Wrappers.query().ge(id, 100).and(i - i.eq(sex, 1).or(x - x.eq(sex, 2))).or(i - i.in(age, 18, 19, 20).like(user_name, michael)); // or lambda LambdaQueryWrapperEmployee query Wrappers.EmployeelambdaQuery().ge(Employee::getId, 100).and(i - i.eq(Employee::getSex, 1).or(x - x.eq(Employee::getSex, 2))).or(i - i.in(Employee::getAge, 18, 19, 20).like(Employee::getUserName, michael)); 5.4 多表查询 MyBatis-Flex QueryWrapper query QueryWrapper.create().select().from(ACCOUNT).leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)).where(ACCOUNT.AGE.ge(10));ListAccount accounts mapper.selectListByQuery(query); QueryWrapper query new QueryWrapper() .select(ACCOUNT.ID, ACCOUNT.USER_NAME, ARTICLE.ID.as(articleId), ARTICLE.TITLE) .from(ACCOUNT.as(a), ARTICLE.as(b)) .where(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID)); MyBatis-Plus不支持 5.5 部分字段更新 假设一个实体类 Account 中我们要更新其内容如下 userName 为 michaelage 为 18birthday 为 null 其他字段保持数据库原有内容不变要求执行的 SQL 如下 update tb_account set user_name michael, age 18, birthday null where id 100 MyBatis-Flex 代码如下 Account account UpdateEntity.of(Account.class); account.setId(100); //设置主键 account.setUserName(michael); account.setAge(18); account.setBirthday(null);accountMapper.update(account); MyBatis-Plus 代码如下或可使用 MyBatis-Plus 的 LambdaUpdateWrapper但性能没有 UpdateWrapper 好 UpdateWrapperAccount updateWrapper new UpdateWrapper(); updateWrapper.eq(id, 100); updateWrapper.set(user_name, michael); updateWrapper.set(age, 18); updateWrapper.set(birthday, null);accountMapper.update(null, updateWrapper); 如上MyBatis-Flex 在代码编写来说更加灵活编写方式更多一些还是有些优势。 源码地址https://download.csdn.net/download/askuld/88561026
http://www.pierceye.com/news/228286/

相关文章:

  • php网站换服务器最超值的手机网站建设
  • seo整站优化技术培训wordpress博客编辑器
  • 一家专做灯的网站招聘wordpress 欲思
  • 山西省建设主管部门网站app备案号查询平台官网
  • 百度网站收录链接提交做购物网站的开题报告
  • 迷你主机做网站服务器南京龙媒网络科技有限公司
  • 网站重构给一个网站如何做推广
  • 温州网站推广价钱左侧导航栏网站模板
  • 网站建设朝阳南昌房地产网站建设
  • 大连网络建站公司分析wordpress漫画主题推荐
  • 纪检监察网站建设 讲话制作书签的感受心得
  • 宁波网站建设公司优选亿企邦上海网站快速备案
  • 贵阳有做网站的公司吗微信营销软件免费版
  • 打开网站乱码怎么做河南平台网站建设
  • 物流网站源代码安平县网站建设
  • 自助服务器网站建设修改wordpress的库名
  • 惠州做网站乐云seo网站建设如何插音乐
  • 自媒体图片素材网站东莞网站建设推广技巧
  • 新浪网站是什么程序做的六安网站关键词排名优化地址
  • 手机网站大全123456镇江手机网站建设
  • 企业网站模板下载哪家公司强服装设计就业前景如何
  • 婚纱网站源代码网站制作专业的公司
  • 公司经营范围 网站开发网络工程好就业吗
  • 企业网站建设与管理试题wordpress设置页面访问权限
  • 中国顺德手机网站设计安居客做网站
  • 网站运营的含义百度地图轨迹导航
  • 网站开发时创业中文网站模板
  • 男人最爱的做网站网站建设合作合同范文
  • 我和你99谁做的网站做润滑油网站图片
  • 基于wordpress门户网站wordpress可以自己写代码吗