Mybatis之数据库连接+PageHelper分页插件+Mybatis-Plus插件
https://www.cnblogs.com/chch213/p/16320820.html
前言

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操作数据库
官网

// 加载核心配置文件
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);

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();
}
}
}

- <sql>:抽取 SQL 语句标签。
- <include>:引入 SQL 片段标签。
<sql id=“片段唯一标识”>抽取的 SQL 语句</sql> <include refid=“片段唯一标识”/>
<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处理
@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 插件依赖 -->
<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插件的更多相关文章
- Mybatis Plus整合PageHelper分页的实现示例
1.依赖引入 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pag ...
- MyBatis学习总结_17_Mybatis分页插件PageHelper
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- MyBatis学习总结(17)——Mybatis分页插件PageHelper
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...
- Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程
Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...
- Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件
前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...
- SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页
SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...
- mybatis pagehelper分页插件使用
使用过mybatis的人都知道,mybatis本身就很小且简单,sql写在xml里,统一管理和优化.缺点当然也有,比如我们使用过程中,要使用到分页,如果用最原始的方式的话,1.查询分页数据,2.获取分 ...
- SpringBoot+MyBatis多数据源使用分页插件PageHelper
之前只用过单数据源下的分页插件,而且几乎不用配置.一个静态方法就能搞定. PageHelper.startPage(pageNum, pageSize); 后来使用了多数据源(不同的数据库),Page ...
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
随机推荐
- ✨生物大语言模型Evo2——解码基因密码的AI革命🚀
2025:生物AI的"DeepSeek时刻" 当整个中文互联网为国产大语言模型DeepSeek欢呼时,生命科学界正悄然掀起一场静默革命--由Arc Institute领衔,斯坦福. ...
- codeup之C语言10.15(指针
Description 输入3个字符串,按从小到大的顺序输出.要求使用指针的方法进行处理. Input 3行,每行一个用字符串.保证每个字符串的长度不超过20. Output 按从小到大的顺序输出这3 ...
- Chester1011的疑问
题目背景 一天,\(\texttt{Chester}\)和\(\texttt{hsh}\)在写数据结构题. 他们开始刷起了羊毛地毯.在羊毛地毯的落地点,有一个漏斗.漏斗下面会经过漏斗矿车,每次只能吸走 ...
- Opencv学习:回到原点!关于一些基础的函数
opencv简单的图片读取和显示 1.图像读取 Mat img = imread("C:/clip.png", 1); imshow("fang2", img ...
- 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
原文链接:三分钟走进袋鼠云一站式全自动化全生命周期运维管家ChengYing(承影) 课件获取:关注公众号 ** "数栈研习社",后台私信 "ChengYing" ...
- C# 设置dll 别名
extern alias VideoFFMPEGX64;using VideoFFMPEGX64::Accord.Video.FFMPEG;
- JS ES6数组中删除指定元素
https://www.cnblogs.com/linsx/p/8331623.html arr.splice(arr.findIndex(item => item.id === data.id ...
- Web前端入门第 76 问:JavaScript 鼠标事件(mouse) enter/leave 和 over/out 区别
题外话 在考察事件基础的时候,会经常被问及 click.mousedown.mouseup 它们三者执行的先后顺序是怎样的? 如果平时没太注意,这细节可能就会忽略,毕竟很少会在同一个元素上面同时绑定这 ...
- R语言包学习之dplyr包:数据处理
dplyr简介 dplyr是R语言的数据分析包,类似于python中的pandas,能对dataframe类型的数据做很方便的数据处理和分析操作. 安装并导入dplyr包 install.packag ...
- 在esm中优雅的使用__dirname
在esm中没有这些 __dirname.require,因为这是cjs的规范. 但是通过如下代码,你即可使用上 import path from "node:path"; impo ...