MyBatis Plus 教程(人人便成为)

https://www.cnblogs.com/chch213/p/16320820.html

前言

ORM框架:对象关系映射  object relational mapping  半自动ORM映射工具(自己编写sql语句)    Hibernater属于全自动
映射规则:数据库表 > 类 | 表字段 > 类的属性 | 表数据 > 对象
 
JDBC操作数据库
public class JDBCTest {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 1、数据库连接参数
String url = "jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
String username = "123";
String password = "123";
// 2、获加载数据库连接驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 3、创建数据库连接对象
connection = DriverManager.getConnection(url, username, password);
// 4、预处理sql语句
preparedStatement = connection.prepareStatement("select * from user");
// 5、执行sql语句
resultSet = preparedStatement.executeQuery();
// 6、解析结果集
while (resultSet.next()) {
User user = new User();
user.setUserName(resultSet.getString("username"));
System.out.println(user.toString());
}
// 7、关闭资源
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
resultSet.close();
preparedStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

Mybatis操作数据库

官网

mybatis – MyBatis 3 | 简介

// 加载核心配置文件
String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 获取sqlsession工厂对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
// 通过工厂对象获取sqlsession对象
sqlSession = factory.openSession(true);
// 获取接口的实现类代理对象
Mapper mapper = sqlSession.getMapper(T.class);
// 通过实现类对象调用方法
User user = mapper.queryUser(id);
Mybatis接口的动态代理实现DAO

Mapper 接口开发需要遵循以下规范:

1) Mapper.xml文件中的namespace与mapper接口的全限定名(包名.类名)相同

2) Mapper接口方法名和Mapper.xml中定义的每个statement的id(唯一标识)相同

3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

 怎么实现动态代理的?

    public static void mapperTest() {
InputStream is = null;
SqlSession sqlSession = null;
try {
// 加载核心配置文件
is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 获取sqlSession对象
sqlSession = sqlSessionFactory.openSession();
// 获取代理对象
IUserServiceDao mapper = sqlSession.getMapper(IUserServiceDao.class);
// 调用方法
List<String> list = new ArrayList<>(1);
list.add("12");
List<UserVO> userVOList = mapper.queryUserList(list);
System.out.println(userVOList.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
sqlSession.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
getMapper() 方法最终获取到 org.apache.ibatis.binding.MapperProxy 代理对象
 
-  <sql>:抽取 SQL 语句标签。
- <include>:引入 SQL 片段标签。
<sql id=“片段唯一标识”>抽取的 SQL 语句</sql> <include refid=“片段唯一标识”/>
PageHelper分页插件
 
 

    <plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
<property name="reasonable" value="true"/>
</plugin>
</plugins>

PageHelper.startPage(1, 2); // 开启分页

 

PageHelper源码解析:

public class PageHelper extends PageMethod implements Dialect, Chain {
private PageParams pageParams; // 分页参数
private PageAutoDialect autoDialect; // 数据源
private PageBoundSqlInterceptors pageBoundSqlInterceptors; // sql处理
 
Mybatis常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
 

public interface IUserServiceDao {
//查询全部
@Select("SELECT * FROM user")
@Results({
@Result(column = "id",property = "id"),
@Result(column = "name",property = "name"),
@Result(
property = "phone", // 被包含对象的变量名
javaType = List.class, // 被包含对象的实际数据类型
column = "id", // 根据查询出的user表的id字段来查询phone表
/*
many、@Many 一对多查询的固定写法
select属性:指定调用哪个接口中的哪个查询方法
*/
many = @Many(select = "com.exmple.demo.IPhoneDao.selectByCid")
)
})
public abstract List<Classes> selectAll();
}
 Mybatis-Plus使用
官网
 
POM文件依赖配置:
        <!-- mybatis-plus 插件依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.0</version>
</dependency>

Dao层定义接口:

public interface IUserServicePlusDao extends BaseMapper<PhoneNumber> {
}
 
实体类映射表:

@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
@EqualsAndHashCode
@TableName("phone_number")
public class PhoneNumber {
// id
private String id;
// 地址
private String address;
// 用户
private String userId;
// 有效标志
private String isValid;
// 创建时间
private Date createDate;
}
 

Mybatis之数据库连接+PageHelper分页插件+Mybatis-Plus插件的更多相关文章

  1. Mybatis Plus整合PageHelper分页的实现示例

    1.依赖引入 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pag ...

  2. MyBatis学习总结_17_Mybatis分页插件PageHelper

    如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...

  3. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  4. MyBatis学习总结(17)——Mybatis分页插件PageHelper

    如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...

  5. Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程

    Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...

  6. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  7. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页

    SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...

  8. mybatis pagehelper分页插件使用

    使用过mybatis的人都知道,mybatis本身就很小且简单,sql写在xml里,统一管理和优化.缺点当然也有,比如我们使用过程中,要使用到分页,如果用最原始的方式的话,1.查询分页数据,2.获取分 ...

  9. SpringBoot+MyBatis多数据源使用分页插件PageHelper

    之前只用过单数据源下的分页插件,而且几乎不用配置.一个静态方法就能搞定. PageHelper.startPage(pageNum, pageSize); 后来使用了多数据源(不同的数据库),Page ...

  10. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

随机推荐

  1. ✨生物大语言模型Evo2——解码基因密码的AI革命🚀

    2025:生物AI的"DeepSeek时刻" 当整个中文互联网为国产大语言模型DeepSeek欢呼时,生命科学界正悄然掀起一场静默革命--由Arc Institute领衔,斯坦福. ...

  2. codeup之C语言10.15(指针

    Description 输入3个字符串,按从小到大的顺序输出.要求使用指针的方法进行处理. Input 3行,每行一个用字符串.保证每个字符串的长度不超过20. Output 按从小到大的顺序输出这3 ...

  3. Chester1011的疑问

    题目背景 一天,\(\texttt{Chester}\)和\(\texttt{hsh}\)在写数据结构题. 他们开始刷起了羊毛地毯.在羊毛地毯的落地点,有一个漏斗.漏斗下面会经过漏斗矿车,每次只能吸走 ...

  4. Opencv学习:回到原点!关于一些基础的函数

    opencv简单的图片读取和显示 1.图像读取  Mat img = imread("C:/clip.png", 1); imshow("fang2", img ...

  5. 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?

    原文链接:三分钟走进袋鼠云一站式全自动化全生命周期运维管家ChengYing(承影) 课件获取:关注公众号 ** "数栈研习社",后台私信 "ChengYing" ...

  6. C# 设置dll 别名

    extern alias VideoFFMPEGX64;using VideoFFMPEGX64::Accord.Video.FFMPEG;

  7. JS ES6数组中删除指定元素

    https://www.cnblogs.com/linsx/p/8331623.html arr.splice(arr.findIndex(item => item.id === data.id ...

  8. Web前端入门第 76 问:JavaScript 鼠标事件(mouse) enter/leave 和 over/out 区别

    题外话 在考察事件基础的时候,会经常被问及 click.mousedown.mouseup 它们三者执行的先后顺序是怎样的? 如果平时没太注意,这细节可能就会忽略,毕竟很少会在同一个元素上面同时绑定这 ...

  9. R语言包学习之dplyr包:数据处理

    dplyr简介 dplyr是R语言的数据分析包,类似于python中的pandas,能对dataframe类型的数据做很方便的数据处理和分析操作. 安装并导入dplyr包 install.packag ...

  10. 在esm中优雅的使用__dirname

    在esm中没有这些 __dirname.require,因为这是cjs的规范. 但是通过如下代码,你即可使用上 import path from "node:path"; impo ...