一,初始 MyBatis-Plus

@


1. MyBatis-Plus 的概述

学习 MyBatis -Plus 之前,我们可以先来简单的,稍微的,回顾一下,MyBatis 框架的一些问题:

这里只是简单的回顾,关于MyBatis 的更多详细内容大家可以移步至:️️️ MyBatis_ChinaRainbowSea的博客-CSDN博客

我们来简单思考一下,MyBatis 框架的开发效率怎么样?

开发效率也就是我们使用这款框架开发的速度快不快,是否简单好用易上手。从这个角度思考,每当我们需要编写一个SQL需求的时候,我们需要做几步:

  1. Mapper 接口提供一个抽象方法。
  2. Mapper 接口对应的映射配置文件提供对应的标签和SQL语句
  3. 在 Service 中依赖 Mapper 实例对象
  4. 调用 Mapper 实例中的方法
  5. 在Controller 中依赖 Service 实例对象
  6. 调用 Service 实例中的方法

通过上面的发现,对于一个SQL需求,无论是单表还是多表,我们是需要完成如上几步,才能实现SQL需求的开发。


但是在开发中,有一些操作是通过逻辑,这些通用逻辑是可以被简化的,例如:

  1. 对于 dao ,是否可以由框架帮我们提供好单表的 Mapper 抽象方法,和对应的SQL实现,不需要程序员去实现这些。
  2. 对于 service,使用可以有框架直接帮我们提供好一些 serivce 的抽象方法,和对应的实现,不需要程序员去实现这些。
  3. 一些其它的企业开发中所需要的操作

分析到这里我们发现,其实核心框架并没有发生变化,依赖还是 Mybatis,只不过我们希望对于 MyBatis 进行一些封装和优化,让他更加的好用,更加的易用。

所以:MyBatis Plus 它就来了,它是 MyBatis 的一款增强工具。

MybatisPlus,从名称上来看,我们就发现,他和Mybatis长得很像,其实MybatisPlus就是Mybatis的孪生兄弟。学习MyBatis-Plus 首先,我们来看看它的官网地址是:https://baomidou.com/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

MyBatis-Plus的特性说明:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

MyBatis-Plus 的框架结构:

什么是Mybatis框架呢,他是一个持久层框架,目的是简化持久层的开发。在这里我们就使用springboot整合Mybatis,实现Mybatis框架的搭建。

特别说明:这里这个是 IDEA 2021 创建项目的操作步骤:

我们首先创建一个空的工程

工程名称是mp

创建springboot模块

这里我们选择springboot2.7.8的版本,并不勾选依赖,随后通过pom.xml手动添加




特别说明:下面这个是:IDEA 2024 的操作配置


2. 入门配置第一个 MyBatis-Plus 案例

第一步: 创建数据库 mybatisplus

这些测试表,是来自于 MyBatis-Plus 官网教学的内容,大家也可以移步去看看:️️️ https://baomidou.com/getting-started/

现有一张 User 表,其表结构如下:

id name age email
1 Jone 18 test1@baomidou.com
2 Jack 20 test2@baomidou.com
3 Tom 28 test3@baomidou.com
4 Sandy 21 test4@baomidou.com
5 Billie 24 test5@baomidou.com

其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`
(
id BIGINT NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

DELETE FROM `user`;

INSERT INTO `user` (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

第二步: 引入相关依赖,在 pom.xml 文件当中配置我们所需要的 jar 依赖。

<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rainbowsea</groupId>
<artifactId>mp02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mp02</name>
<description>mp02</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!-- spring boot web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- mysql 驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!-- lombok 的依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <!-- druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency> <!-- mybatis-plus 的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories> </project>

特别说明:这里我们,将 Spring boot 改为:2.5.3 版本的。

在:MyBatis-Plus 当中是包含了MyBatis 的依赖的。所以,引入了 MyBatis-Plus 也就引入了MyBatis了。

第三步: 编写该项目/模块的场景启动器:

第四步: 根据数据表创建对应的实体类:

package com.rainbowsea.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; @Data
@NoArgsConstructor
@AllArgsConstructor
public class User { private Long id;
private String name;
private Integer age;
private String email;
}

第五步: 切换数据库连接池为 Druid 。这里我们编写配置类的方式,切换数据库连接池。

  1. 在 resoucre 类路径下,创建名为 applicaiton.yaml 的配置文件,其中编写连接数据库的配置信息。

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
username: root
password: MySQL123
  1. 编写配置类,切换数据库为 Druid

package com.rainbowsea.config;

import com.alibaba.druid.pool.DruidDataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; /**
* 配置切换,Druid 数据库连接池
*/
@Configuration // 标志配置类
public class DruidDataSourceConfig { @Bean // 被 Spring ioc 容器管理起来
@ConfigurationProperties(value = "spring.datasource")
public DataSource getDataSource() {
DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource;
}
}

特别说明:关于spring boot 中切换数据库连接池的详细内容,大家可以移步至:️️️ 十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能-CSDN博客

测试:看看我们是否成功切换为了 Druid 数据库连接池。



import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests { @Resource
private JdbcTemplate jdbcTemplate; @Test
void contextLoads() {
System.out.println(jdbcTemplate.getDataSource().getClass()); }
}

第六步: 后面的都是对应 MyBatis-Plus 的内容上的重点内容。

编写 Mapper接口

package com.rainbowsea.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rainbowsea.bean.User;
import org.apache.ibatis.annotations.Mapper; @Mapper // 被Spring Boot 扫描到
public interface UserMapper extends BaseMapper<User> { }

我们的自己编写的 Mapper 接口 extends(继承) BaseMapper 接口就会拥有了其该接口下的方法。

第七步: 编写 Service 接口

package com.rainbowsea.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.rainbowsea.bean.User; import java.util.List; public interface UserService extends IService<User> { // 当 IService 当中提供的方法,不能满足我们的业务需要的时候,
// 我们可以自定义方法。
// 自定义的方法
List<User> selectAll();
}

第八步: 编写ServiceImpl

package com.rainbowsea.service.Impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.Collections;
import java.util.List; @Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User>
implements UserService { //@Resource
@Autowired // 自动装配
private UserMapper userMapper; // 对自定义方法的,重写实现
@Override
public List<User> selectAll() {
return userMapper.selectList(null);
}
}

它们之间的关系结构如下:

第九步:编写Controller 控制器:

package com.rainbowsea.controller;

import com.rainbowsea.bean.User;
import com.rainbowsea.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.util.List; @RestController
public class UserController { @Resource
private UserService userService; @GetMapping(value = {"/selectList"})
public List<User> selectList() {
return userService.selectAll();
}
}

第十一步 :打开浏览器运行测试。

3. 补充说明:

3.1 通用 Mapper 接口介绍

有关于 Mapper 接口,之前我们已经看到了,我们自己编写的Mapper接口继承 自己 BaseMapper 接口,由 BaseMapper 接口提供了很多单表的增删改查 相关的操作方法,在入门案例种,我们测试了查询所有的操作。我们介绍一些简单的Mapper 接口中的方法,主要是感觉一下。Mapper接口中对于单表的增删改查的操作都有涉及,更加高级的一些操作。

3.1.1 Mapper 接口的 “增删改查”

3.1.1.1 查询所有记录


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests { @Resource
private UserMapper userMapper; // 查询所有
@Test
void selectList() {
List<User> users = userMapper.selectList(null); for (User user : users) {
System.out.println(user);
}
}
}

3.1.1.2 插入一条数据


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests { @Resource
private UserMapper userMapper; // 简单添加
@Test
void insert() { User user = new User();
user.setId(6L);
user.setAge(18);
user.setName("Lihua");
user.setEmail("test6@baomidou.com");
userMapper.insert(user);
}
}

3.1.1.3 删除一条数据



import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests { @Resource
private UserMapper userMapper; // 简单删除
@Test
void deleteOne() {
userMapper.deleteById(4L); } }

3.1.1.4 更新一条数据


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Resource
private UserMapper userMapper; // 简单更新
@Test
void updateById() {
User user = new User();
user.setId(2L);
user.setAge(18);
user.setName("李华");
user.setEmail("lihua@baomidou.com"); userMapper.updateById(user);
} }

3.1.1.5 查询一条数据


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Resource
private UserMapper userMapper; // 简单查询
@Test
void selectById() {
User user = userMapper.selectById(6L);
System.out.println(user);
} }

3.2 通用 service接口介绍

除了Mapper接口,MybatisPlus还提供了IService接口和对应的实现类ServiceImpl,该实现类已经提供好了一些对应的Service相关的方法,在某些场景下,我们可以直接使用ServiceImpl提供的方法,实现对应的功能。

IService接口

IService接口中包含了service相关的一些增删改查方法



ServiceImpl实现类

ServiceImpl实现类提供了service相关的增删改查方法的实现

UserService接口继承自IService接口

UserServiceImpl类继承ServiceImpl<UserMapper,User>

注入UserService对象,测试相关方法

3.2.1 Service 接口的“增删改查”

3.2.1.1 添加一条记录


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Autowired
private UserService userService; // UserService 添加
@Test
void insertService() {
User user = new User();
user.setId(7L);
user.setAge(18);
user.setName("Tom");
user.setEmail("Tom@baomidou.com"); userService.save(user); } }

3.2.1.2 删除一条记录


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Autowired
private UserService userService; // UserService 删除
@Test
void deleteServie() {
userService.removeById(2L);
}
}

3.2.1.3 修改一条记录


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Autowired
private UserService userService; // userService 修改
@Test
void updateService() {
User user = new User();
user.setId(3L);
user.setAge(22); userService.updateById(user);
} }

3.2.1.4 查询一条记录


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests {
@Autowired
private UserService userService; // UserService 查询
@Test
void selectService() {
List<User> users = userService.selectAll();
for (User user : users) {
System.out.println(user);
}
}
}

3.3 自定义方法

MybatisPlus除了给我们提供了这些丰富的接口方法以外,对于我们自己的需求,也可以编写自定义的接口方法,我们通过自己编写SQL语句的形式,实现想要的SQL需求

3.3.1 自定义Mapper接口方法

Mapper接口中提供抽象方法

package com.rainbowsea.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rainbowsea.bean.User;
import org.apache.ibatis.annotations.Mapper; @Mapper // 被Spring Boot 扫描到
public interface UserMapper extends BaseMapper<User> { // 自定义方法
User selectByName(String name); }

提供映射配置文件,提供对应的SQL语句

注意:对应的映射的 SQL 配置文件的路径/包要一致,以及名称也要一致,才行。

<?xml version="1.0" encoding="UTF-8"?> <!-- 这句不要动,表示xml的版本,以及读取的编码 -->

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.rainbowsea.mapper.UserMapper" > <select id="selectByName" resultType="com.rainbowsea.bean.User" parameterType="string">
select id,age,name,email
from user
where name = #{value} </select>
</mapper>

测试自定义的Mapper接口方法


import com.rainbowsea.bean.User;
import com.rainbowsea.mapper.UserMapper;
import com.rainbowsea.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource;
import java.util.List; @SpringBootTest(classes = Mp02Application.class) // Spring Boot 当中的测试,必须要有 项目的启动场景,不然无法测试报错
class Mp02ApplicationTests { @Resource
private UserMapper userMapper; // 测试自定义方法
@Test
void myMethod() {
User tom = userMapper.selectByName("Lihua");
System.out.println(tom);
}
}

4. 总结:

  1. MyBatis-Plus官网地址:https://baomidou.com/
  2. MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
  3. 记忆理解 MyBatis-Plus 内置的 Mapper 接口,和 Service 接口

6. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

一,初始 MyBatis-Plus的更多相关文章

  1. 初始MyBatis

    初始MyBatis 框架的概念: 框架是一个提供可重复的功用结构的半成品.它为我们构建新的应用程序提供了极大的便利,一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计.D 框架技术的优势: ...

  2. 初始MyBatis、SQL映射文件

    MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...

  3. 初始Mybatis,好累,自己感觉自己快坚持不了了

    Mybatis1.持久化 持久化,就是内存数据和硬盘数据状态的转换 2.ORM思想Object Relation Mapping 对象关系映射 3.MyBatis入门案例 3.1导入jar包 依赖 & ...

  4. Mybatis学习——初始MyBatis

    什么是MyBatis框架? MyBatis框架是一种ORM(既对象关系映射)框架. 什么是ORM框架? 是一种为了解决面向对象与关系数据库之间数据不匹配的技术,它通过描述Java对象和关系数据库表之间 ...

  5. MyBatis别名与util类技能了解

    1.别名 在java中String类型就是String类型,但是在MyBatis中可不会识别java中的类型,在MyBatis中String类型的别名是'string',小写的String,或者也可以 ...

  6. MyBatis(介绍和环境配置)

    ORM(Object Relational Mapping)  设计模式,思想 对象关系映射,是一种数据持久化技术.它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBea ...

  7. MyBatis 框架系列之基础初始

    1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只 ...

  8. mybatis 初始

    接下来带着大家建立一个mybatis的初级项目 首先我们利用idea利用maven建立一个空项目 然后输入名称什么的就会创建一个空的maven项目了 然后我们需要在项目总得pom.xml中进行配置信息 ...

  9. Mybatis初始

    1.Mybatis 的作用 完成基本的sql语句 和 存储过程 高级的对象关系映射(ORM) 框架 封装了几乎所有的 JDBC 代码 参数的手工设置 结果集的遍历 2.Mybatis 框架的主体构成 ...

  10. mybatis笔记 - 初始配置及dao的封装

    1.用户实体类 package com.javasm.entity; /** * *TODO 用户表实体类 * @author CaoLei 2018年6月26日上午10:50:12 * Manage ...

随机推荐

  1. oeasy教您玩转vim - 25 - 更多颜色

    ​ 更多颜色 回忆上节课内容 我们上次深入了配色方案 定义了自己的配色方案 oeasy 建立了自己的配色 oeasy 在状态栏应用了自己的配色 ​ 明确能用的颜色 先胡乱地尝试一下修改颜色代码 hi ...

  2. Python 使用rsa类库基于RSA256算法生成JWT

    JWT简介 JWT(Json web token),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.JWT提供了一种简单.安全的身份认证方法,特别适合分布式站点单点登录.或者是签名. ...

  3. Qt+OpenCascade开发笔记(二):windows开发环境搭建(二):Qt引入occ库,搭建基础工程模板Demo和发布Demo

    前言   Open CASCADE是由Open Cascade SAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计.它是一个面向对象的C++类库,提供了丰富的几何造型.数据交换和 ...

  4. 我用Awesome-Graphs看论文:解读PowerGraph

    PowerGraph论文:<PowerGraph: Distributed Graph-Parallel Computation on Natural Graphs> 上次通过文章< ...

  5. 【Java-GUI】07 Swing01 入门案例

    Swing是Java自己开发出的一套GUI组件,不同于AWT去调用操作系统的GUI 正是因为非系统平台的GUI,所以程序运行的要慢一些 涉及的设计模式:MVC模式 Model(组件对象状态) View ...

  6. python版本的“共轭梯度法”算法代码

    在看代码的过程中遇到了共轭梯度法这个概念,对这个算法的数学解释看过几遍,推导看过了,感觉懂了,然后过上一些日子就又忘记了,然后又看了一遍推导,然后过了一些日子也就又忘记了,最后想想这个算法的数学解释就 ...

  7. vue router动态添加路由报警告:router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.

    原因: 新版本router.addRoutes已废弃:使用 router.addRoute() 代替. //addRoutes的使用方法: router.addRoutes(newRoutes) // ...

  8. Namomo Summer Camp 23 Day 1(GCPC2021)

    Namomo Summer Camp 23 Day 1(GCPC2021) Problem B: Brexiting and Brentering 签到 #include<bits/stdc++ ...

  9. 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别

    跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令. (2) 直接向程序计数器 PC 写入跳转地址值. 通过向程序计数器 PC 写入跳转地 ...

  10. dfs剪枝与优化

    搜索树 剪枝方法 1.优化搜索顺序 2.排除等效冗余 3.可行性 4.最优性(估价) 5.记忆化(树形不会重复计算时不需要) A.针对每个维度边界信息缩放.推倒 B.计算未来最少花费 C.结合各维度的 ...