外贸网站建设的意义怎么制作网站主页

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

外贸网站建设的意义,怎么制作网站主页,什么是工业互联网,云网站 制作Mybatis 作为头部的 ORM 框架#xff0c;他的增强工具可谓层出不穷#xff0c;比如出名的 Mybatis-Plus 和 阿里云开源的 Fluent-MyBatis#xff0c;如今出了一款 Mybatis-Flex #xff0c;相比前两款功能更为强大、性能更为强悍#xff0c;不妨来了解一下。 目录 1 Myba… Mybatis 作为头部的 ORM 框架他的增强工具可谓层出不穷比如出名的 Mybatis-Plus 和 阿里云开源的 Fluent-MyBatis如今出了一款 Mybatis-Flex 相比前两款功能更为强大、性能更为强悍不妨来了解一下。 目录 1 Mybatis-Flex 介绍 2 准备工作 2.1 数据库中创建表及插入数据 2.2 Spring Boot 项目初始化 2.3 添加 Maven 主要依赖 2.4 配置数据源 3 Mybatis-Flex 实践 3.1 编写实体类和 Mapper 接口 3.2 在主启动类添加 MapperScan 注解 3.3 Test 测试 ① 普通查询 ② 链式查询 4 MyBatis-Flex/Plus 代码对比 4.1 基础查询 4.2 集合查询 4.3 and(…) 和 or(…) 4.4 多表查询 4.5 部分字段更新 1 Mybatis-Flex 介绍 MyBatis-Flex 是一个优雅的 MyBatis 增强框架它非常轻量、同时拥有极高的性能与灵活性。 特征 轻量除了 MyBatis没有任何第三方依赖、没有任何拦截器在执行的过程中没有任何的 Sql 解析Parse。 这带来了几个好处极高的性能、极易对代码进行跟踪和调试、把控性更高。灵活支持 Entity 的增删改查、以及分页查询的同时MyBatis-Flex 提供了 Db Row 工具可以无需实体类对数据库进行增删改查以及分页查询。 与此同时MyBatis-Flex 内置的 QueryWrapper 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。强大支持任意关系型数据库还可以通过方言持续扩展同时支持 多复合主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。 简单来说Mybatis-Flex 相比 Mybatis-Plus 等框架 速度更快、功能更多、代码更简洁~ 2 准备工作 官方文档快速开始 - MyBatis-Flex 以 Spring Boot Maven  Mysql 项目做演示
2.1 数据库中创建表及插入数据 首先往 Mysql 数据库中添加数据表和对应的数据脚本如下 CREATE TABLE IF NOT EXISTS flex_user (id INTEGER PRIMARY KEY auto_increment,user_name VARCHAR(100),age INTEGER,birthday DATETIME );INSERT INTO flex_user(id, user_name, age, birthday) VALUES (1, 张三, 18, 2020-01-11),(2, 李四, 19, 2021-03-21); 我使用的是 DBeaver 工具执行完该语句后效果如下 2.2 Spring Boot 项目初始化 此时需要创建 Spring Boot 项目并添加 Maven 依赖此处我通过 IDEA 使用 Spring Initializer 快速初始化一个 Spring Boot 工程。 创建新项目以下是相关参数 指定 spring boot 版本和勾选 web 依赖 删除不需要的文件项目如图 2.3 添加 Maven 主要依赖 往 pom.xml 文件中添加以下依赖由于本项目是通过 Spring Initializer 搭建因此已存在 spring-boot-starter-web 和 spring-boot-starter-test 依赖。 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!–1.数据库驱动–dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!– 数据库连接池组件–dependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactId/dependency!–2.lombok–dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency!–3.mybatis-flex–dependencygroupIdcom.mybatis-flex/groupIdartifactIdmybatis-flex-spring-boot-starter/artifactIdversion1.5.4/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies 2.4 配置数据源 在 application.properties 或 application.yml 中配置数据源 #数据库连接配置 spring.datasource.usernameroot spring.datasource.passwordroot #mysql58 驱动不同driver-class-name 8需要增加时区的配置serverTimezoneUTC放在url最后 #useSSLfalse 安全连接 spring.datasource.urljdbc:mysql://localhost:3306/mybatis_plus?serverTimezoneUTCuseUnicodetruecharacterEncodingutf-8 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver 3 Mybatis-Flex 实践 3.1 编写实体类和 Mapper 接口 路径src/main/java/com/yinyu/flex/pojo/User.java User 实体类 使用 Table(flex_user) 设置实体类与表名的映射关系使用 Id(keyType KeyType.Auto) 标识主键为自增 package com.yinyu.flex.pojo;import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; import lombok.Data; import java.util.Date;Data Table(flex_user) public class User {Id(keyType KeyType.Auto)private Long id;private String userName;private Integer age;private Date birthday; } Mapper 接口继承 BaseMapper 接口 路径src/main/java/com/yinyu/flex/mapper/UserMapper.java package com.yinyu.flex.mapper;import com.mybatisflex.core.BaseMapper; import com.yinyu.flex.pojo.User; import org.springframework.stereotype.Repository;Repository//代表持久层 public interface UserMapper extends BaseMapperUser {//所有CRUD操作都编写完成了 } 这部分也可以使用 MyBatis-Flex 的代码生成器来生功能非常强大的。详情进入代码生成器章节 了解。 3.2 在主启动类添加 MapperScan 注解 路径src/main/java/com/yinyu/flex/MybatisFlexApplication.java 用于扫描 Mapper 文件夹 package com.yinyu.flex;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication MapperScan(com.yinyu.flex.mapper) public class MybatisFlexApplication {public static void main(String[] args) {SpringApplication.run(MybatisFlexApplication.class, args);}} 3.3 Test 测试 路径src/test/java/com/yinyu/flex/MybatisFlexApplicationTests.java 使用测试类进行测试 ① 普通查询 package com.yinyu.flex;import com.yinyu.flex.mapper.UserMapper; import com.yinyu.flex.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List;SpringBootTest class MybatisFlexApplicationTests {//继承了BaseMapper所有的方法都来自父类我们也可以编写自己的扩展方法Autowiredprivate UserMapper userMapper;Testvoid contextLoads() {// 查询所有的记录ListUser users userMapper.selectAll();users.forEach(System.out::println);} } 输出成功 可以看到完成了查询数据表的操作展示准确 ② 链式查询 若想使用链式查询还得需要 APT 配置MyBatis-Flex 使用了 APTAnnotation Processing Tool技术在项目编译的时候会自动根据 Entity/pojo 类定义的字段帮你生成 USER 类可用于链式查询 通过开发工具构建项目如下图或者执行 maven 编译命令: mvn clean package 都可以自动生成。 正常情况下会在 target 包下生成如下资源 若导入该资源失败可点击项目目录注意是项目的根目录右键 Maven 先点击 Generate Sources and Update Folders再点击 Reload project 若生成该资源并导入成功那么此时可使用链式查询
import static com.yinyu.flex.pojo.table.UserTableDef.USER; … Testvoid testWrapper() {// 测试链式查询QueryWrapper queryWrapper QueryWrapper.create().select().where(USER.AGE.eq(18));User account userMapper.selectOneByQuery(queryWrapper);System.out.println(account);} … 总的来说MyBatis-Flex 的链式查询相比 MyBatis-Plus 多了一步配置环节目前来看其他步骤类似。 4 MyBatis-Flex/Plus 代码对比 接下来看一下MyBatis-Flex 和 MyBatis-Plus 各部分功能代码的差别Employee、Account 4.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); 4.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 自动提示发生错误不能及时发现。 4.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)); 4.4 多表查询 情况1 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); MyBatis-Plus不支持 情况2 假设查询的 SQL 如下 SELECT a.id, a.user_name, b.id AS articleId, b.title FROM tb_account AS a, tb_article AS b WHERE a.id b.account_id MyBatis-Flex 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不支持 4.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 在代码编写来说还是有些优势。