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

php响应式网站开发教程柳州网站建设

php响应式网站开发教程,柳州网站建设,女性时尚网站带论坛php程序,阿玛尼高仿手表网站一 概述 MyBatis-Plus(简称 MP)是一款基于 MyBatis 的增强工具,旨在简化开发、提高效率。它在保留 MyBatis 所有特性的基础上,提供了丰富的功能,减少了大量模板代码的编写。 1 核心特性: ① 无侵入增强&am…

一 概述

  MyBatis-Plus(简称 MP)是一款基于 MyBatis 的增强工具,旨在简化开发、提高效率。它在保留 MyBatis 所有特性的基础上,提供了丰富的功能,减少了大量模板代码的编写。

1 核心特性:

  ① 无侵入增强:完全兼容原生 MyBatis,仅通过插件和工具类进行功能扩展,无需修改现有 MyBatis 代码。
  ② 强大的 CRUD 接口:内置通用 Mapper 和 Service,通过继承即可获得单表大部分 CRUD 方法(如 selectById, insert, update 等),无需编写 XML。
  ③ 条件构造器(Wrapper):提供 QueryWrapper、UpdateWrapper 和 LambdaQueryWrapper 等,支持链式调用,以面向对象的方式构建 SQL 条件,避免手写字符串。
  ④ 代码生成器:自动生成 Entity、Mapper、Service、Controller 等代码,支持自定义模板,显著提升开发效率。
  ⑤ 分页插件:简单配置即可实现物理分页,支持多种数据库(如 MySQL、Oracle)。
  ⑥ 乐观锁支持:通过 @Version 注解实现乐观锁,避免并发更新冲突。
  ⑦ 逻辑删除:使用 @TableLogic 注解标记逻辑删除字段,删除操作自动变为更新,查询自动过滤已删除数据。
  ⑧ 自动填充功能:通过 @TableField(fill = FieldFill.INSERT) 注解,实现插入或更新时自动填充字段(如创建时间、更新时间)。
  ⑨动态表名:支持运行时动态替换表名,适用于分表场景。
  ⑩SQL 性能分析:内置插件可输出 SQL 执行时间,帮助优化性能

2 核心优势

  ① 开发效率高:减少 80% 的 CRUD 代码,专注于业务逻辑。
  ② 功能全面:覆盖常见数据库操作需求,如分页、乐观锁、逻辑删除等。
  ③ 灵活性与扩展性:支持自定义全局操作、SQL 注入器,可深度定制。
  ④ 社区活跃:文档齐全,中文支持友好,更新迭代快。

二 入门demo

 ① 数据库表

# 数据库mp_test 表tb_user
create table tb_user
(id        int auto_incrementprimary key,username  varchar(15) not null,`order`   int(40)     not null,is_player bit         not null
)comment '用户';

 ② 导入依赖mybatis-plus-boot-starter
 其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。因此可用MybatisPlus的starter代替Mybatis的starter:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.tj.mp</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.11</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.tj.mp.DemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

 ③ 启动类

@SpringBootApplication
@MapperScan("com.tj.mp.demo.mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

 ④ 配置文件 – application.yaml

server:port: 8081
spring:application:name: demodatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mp_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: root
logging:level:com.tj.mp.demo: debugpattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
# mapper/**/表示mapper下的xml与其子目录下的xml都进行加载(默认)
mybatis-plus:# 因mp不善于多表查询,故多表查询仍需手写type-aliases-package: com.tj.mp.demo.domainmapper-locations: classpath*:mapper/**/*.xml

 ⑤ 实体类 – User
 mp通过扫描实体类,基于反射获取实体类信息,约定类名驼峰转下划线做表名,id字段为主键,变量名驼峰转下划线作为表字段名,当实体与表的对应关系不符合时,需使用注解

@Data
@AllArgsConstructor
@NoArgsConstructor
// 可解决类与表不同名的问题,相同可省
@TableName("tb_user")
public class User {// 指定表中主键字段信息,一定要有主键,对应自增长需设置type属性// auto:数据库自增长,INPUT:通过set方法自行输入// ASSIGN_ID:分配ID,接口IdentifierGenerator的方法nextId生成id(MP雪花算法生成ID)// 若不设置主键类型则默认为ASSIGN_ID@TableId(value = "id",type = IdType.AUTO)private Integer id;// 当成员变量与数据库字段名不一致时@TableField("username")private String name;// 当成员变量名以is开头,且是布尔值(反射机制会去掉is,导致成员变量与数据库字段对应不上)@TableField("is_player")private Boolean isPlayer;// 当成员变量名与数据库关键字冲突需要加反引号@TableField("`order`")private Integer order;// 当成员变量不是数据库字段时,需标记为非数据库字段@TableField(exist = false)private String address;
}

 ⑥ mapper – UserMapper 自定义的Mapper继承MybatisPlus提供的BaseMapper接口(crud)

// 继承后底层已封装好crud
public interface UserMapper extends BaseMapper<User> {
}

 ⑦ Controller – UserController

@RestController
@CrossOrigin
public class UserController {@AutowiredUserMapper userMapper;// 测试方法@RequestMapping("/insert")public String insert(Integer id,String name,Boolean isplayer,Integer order,String address){return userMapper.insert(new User(id,name,isplayer,order,address))>0?"success":"fail";}
}

 ⑧ 浏览器地址栏测试

http://localhost:8081/insert?id=2&name=Yellow&iplayer=true&order=1&address=3366

三 常用功能

1 条件构造器 – Wrapper

 crud方法的参数统一为Wrapper,构造复杂的sql语句。

// 基于QueryWrapper的查询
@SpringBootTest
class DemoApplicationTests {@AutowiredUserMapper userMapper;// select id,username// from tb_user// where username like ? and order >= ?@Testvoid testQueryWrapper() {// 1.构造查询条件 select与where// 查名字含有ow且order大于10的用户ID与姓名QueryWrapper<User> wrapper = new QueryWrapper<User>().select("id","username").like("username","ow").ge("`order`",10);// 2.查询List<User> users = userMapper.selectList(wrapper);users.forEach(System.out::println);}// update user// set order = 15// where (username = "yellow")@Testvoid testUpdateQueryWrapper() {// 1.更新数据User user = new User();user.setOrder(15);// 2.条件QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username","yellow");// 3.更新userMapper.update(user,wrapper);}
}
// 基于UpdateWrapper的更新,解决特殊语句
@SpringBootTest
class DemoApplicationTests {@AutowiredUserMapper userMapper;// update user// set order = order - 2// where id in(1,2,3)@Testvoid testUpdateWrapper() {// 1.更新数据List<Long> ids = Arrays.asList(1L, 2L, 3L);// 2.条件UpdateWrapper<User> wrapper = new UpdateWrapper<User>()// setsql可直接写入sql片段,但这相当于将sql代码写到业务层中.setSql("`order`=`order`-2").in("id",ids);// 3.更新,更新内容为null,表示不使用实体对象来指定更新内容,// 更新逻辑已经完全由 UpdateWrapper 控制,不需通过实体对象来指定更新字段的值userMapper.update(null,wrapper);}
}
// 基于LambdaQueryWrapper的查询
@SpringBootTest
class DemoApplicationTests {@AutowiredUserMapper userMapper;@Testvoid testLambdaQueryWrapper() {// 1.构建查询条件LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper<User>()// 传递对应字段的get函数,利用反射得字段名字,此后不用写死字段名硬编码.select(User::getId, User::getUsername).like( User::getUsername,"ow").ge(User::getOrder,10);// 2.查询List<User> users = userMapper.selectList(wrapper);users.forEach(System.out::println);}
}

2 自定义sql

 利用Wrapper构建where条件后,自定义sql仍需处理的部分,把mp构建好的条件传递给mapper层,在mapper或mapper.xml中实现sql的组装,不在业务层编写sql遵守企业规范,在mapper方法参数中Param声明Wrapper变量名称必须是ew
 ① 基于Wrapper构建where条件

// 基于原有基础批量更新
@Test
void testCustomSql() {// 1.更新数据List<Long> ids = Arrays.asList(1L, 2L, 3L);int amount=2;// 2.构建查询条件QueryWrapper<User> wrapper=new QueryWrapper<User>().in("id",ids);// 3.自定义sql,方法参数中Param声明Wrapper变量名称必须是ewuserMapper.updateOrderByIds(wrapper,amount);
}

 ② Usermapper接口

public interface UserMapper extends BaseMapper<User> {void updateOrderByIds(@Param("ew")QueryWrapper<User> wrapper, @Param("amount")int amount);
}

 ③ Usermapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tj.mp.demo.mapper.UserMapper">
<!--只写前半部分即可,mp会自动解析拼接--><update id="updateOrderByIds">UPDATE tb_user SET `order`=`order` - #{amount} ${ew.customSqlSegment}</update>
</mapper>
http://www.dtcms.com/wzjs/145378.html

相关文章:

  • 三亚网站怎么制作常用的搜索引擎有哪些?
  • 淘宝客怎么做自己网站推广seo综合查询 站长工具
  • 新闻视频网站开发网络策划与营销
  • 政府网站开发中山网站建设公司
  • 网站开发怎么报价十大seo免费软件
  • 你自己做的网站怎么发布到网上企业网站怎么优化
  • wordpress文章备份北海百度seo
  • 呼家楼做网站的公司哪家好百度浏览器app
  • 做肯德基玻璃门网站软件开发网站
  • 酒网站模板百度seo营销公司
  • 东营招标信息网官网seo搜索引擎优化原理
  • 圆通速递我做网站网页设计免费模板
  • 孟村县网站建设推广软文300字范文
  • 网站设计就业形势北京发生大事了
  • 龙岗网站建设报价百度小说排行榜第一名
  • 开封府景点网站及移动端建设情况怎样做企业推广
  • 做软件营销网站怎么样培训机构管理系统
  • 深圳各区房价一览表公司seo是指什么意思
  • 开个小网站要怎么做页面seo优化
  • 一级a做爰全过程片老鸭子网站河南郑州最新事件
  • 铜川网站建设公司电话win7优化大师好不好
  • 个人网站备案号被注销了青岛谷歌优化公司
  • 绵阳吉工建设seo站长常用工具
  • 国企网站建设要求百度热门
  • 制作网站作品seo优化及推广如何运营
  • 大连哪有做网站的网页设计怎么做
  • 北京天仪建设工程质量检测所网站国内专业seo公司
  • 网站建设与推广话术seo服务外包客服
  • 菏泽市建设职工培训中心网站网址搜索域名查询
  • 网址经营是什么搜索引擎优化公司排行