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

MyBatis框架的入门

目录

  • MyBatis
    • 第一章:框架的概述
      • 1. MyBatis框架的概述
    • 第二章:MyBatis的入门程序
      • 1. 创建数据库和表结构
      • 2. MyBatis的入门步骤

MyBatis

第一章:框架的概述

1. MyBatis框架的概述

  1. MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
  2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
  3. 采用了ORM的思想。

第二章:MyBatis的入门程序

1. 创建数据库和表结构

create database mybatis_db;
use mybatis_db;CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(32) NOT NULL COMMENT '用户名称',`birthday` datetime default NULL COMMENT '生日',`sex` char(1) default NULL COMMENT '性别',`address` varchar(256) default NULL COMMENT '地址',PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'老王','2018-02-27 17:47:08','男','北京'),(2,'熊大','2018-03-02 15:09:37','女','上海'),(3,'熊二','2018-03-04 11:34:34','女','深圳'),(4,'光头强','2018-03-04 12:04:06','男','广州');

2. MyBatis的入门步骤

  1. 创建maven的项目,创建Java工程即可。

  2. 引入坐标

    1. 引入MyBatis的3.4.5的版本的坐标

    2. 引入MySQL驱动的jar包,5.1.6版本

    3. 引入Junit单元测试的jar包

    4. 引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件)

          <dependencies><!--mybatis核心包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
      
  3. 编写User的实现类,属性尽量使用包装类型,具体的代码如下

    package cn.tx.domain;import java.io.Serializable;
    import java.util.Date;/***** */
    public class User implements Serializable{private static final long serialVersionUID = 525400707336671154L;private Integer id;private String username;private Date birthday;private String sex;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
    }
    
  4. 编写UserMapper的接口和方法(就是咱们以前的UserDao接口)

    package cn.tx.mapper;import java.util.List;
    import cn.tx.domain.User;public interface UserMapper {/*** 查询所有的用户* @return*/public List<User> findAll();}
    
  5. 在resources目录下,创建mapper文件夹。编写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.qcbyjy.mapper.UserMapper"><select id="findAll" resultType="com.qcbyjy.domain.User">select * from user;</select>
    </mapper>
    
    1. mapper namespace=“com.qcbyjy.mapper.UserMapper”,叫名称空间,表明以后查找UserMapper接口中的findAll的方法。
    2. select id="findAll"中的id属性编写的UserMapper接口中的方法的名称,固定的。
    3. resultType="com.qcbyjy.domain.User"表明的是findAll方法的返回值类型。
  6. 编写主配置文件,在resources目录下创建SqlMapConfig.xml的配置文件(其实名称可以任意),导入对应的约束,编写主配置文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><!-- 配置环境们 --><environments default="mysql"><!-- 配置具体的环境 --><environment id="mysql"><!-- 配置事务管理类型 --><transactionManager type="JDBC"/><!-- 配置是否需要使用连接池,POOLED使用,UNPOOLED不使用 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis_db"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加载映射的配置文件 --><mappers><mapper resource="mappers/UserMapper.xml"/></mappers>
    </configuration>
    

    1.配置环境(environments)

    default=“mysql”:指定默认使用的数据库环境。

    子标签 定义了名为 mysql 的环境。

    transactionManager type=“JDBC”:声明使用 JDBC 事务管理方式。

    配置数据源,类型为连接池(POOLED)。

    包括数据库驱动类、连接 URL、用户名和密码。

    2.加载映射文件(mappers)

    :加载位于 resources/mappers/ 目录下的 UserMapper.xml 文件,定义 SQL 语句和接口映射关系

  7. 编写入门程序

    1.加载配置文件

    使用 MyBatis 提供的 Resources 工具类加载 SqlMapConfig.xml。

    2.构建 SqlSessionFactory

    通过 SqlSessionFactoryBuilder 构建 SqlSessionFactory 工厂,用于创建 SqlSession。

    3.获取 SqlSession

    调用 openSession() 方法创建 SqlSession,用于执行 SQL 语句。

    4.调用 Mapper 接口

    使用 getMapper(UserMapper.class) 获取 UserMapper 接口的动态代理对象。

    调用 findAll() 方法执行 SQL 查询。

    5.输出结果

    遍历查询结果,打印用户信息。

    6.释放资源

    关闭 SqlSession 和 InputStream,避免资源泄漏。

    package cn.tx.test;import java.io.InputStream;
    import java.util.List;import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import cn.tx.domain.User;
    import cn.tx.mapper.UserMapper;public class UserTest {/*** 测试查询所有的方法* @throws Exception */@Testpublic void testFindAll() throws Exception {// 加载主配置文件,目的是构建SqlSessionFactory的对象InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 创建SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 使用SqlSessionFactory工厂对象创建SqlSession对象SqlSession session = factory.openSession();// 通过session创建UserMapper接口的代理对象UserMapper mapper = session.getMapper(UserMapper.class);// 调用查询所有的方法List<User> list = mapper.findAll();// 遍历集合for (User user : list) {System.out.println(user);}// 释放资源session.close();in.close();}@Testpublic void run2() throws Exception {// 加载配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 构建SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);// 获取到session对象SqlSession session = factory.openSession();// 查询所有的数据List<User> list = session.selectList("com.qcbyjy.mapper.UserMapper.findAll");// 变量集合for (User user : list) {System.out.println(user);}// 关闭资源session.close();inputStream.close();} 
    }
    

相关文章:

MyBatis框架的入门

目录 MyBatis第一章&#xff1a;框架的概述1. MyBatis框架的概述 第二章&#xff1a;MyBatis的入门程序1. 创建数据库和表结构2. MyBatis的入门步骤 MyBatis 第一章&#xff1a;框架的概述 1. MyBatis框架的概述 MyBatis是一个优秀的基于Java的持久层框架&#xff0c;内部对…...

代码随想录D22-23 回溯算法01-02 Python

理论回顾 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff0c;如果想让回溯法高效一些&#xff0c;可以加一些剪枝…...

【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析

文章目录 1. 计算1到100的和2. 列出当前目录下所有文件和文件夹3. 检查文件是否存在4. 备份文件到指定目录&#xff08;简单示例&#xff09;5. 打印系统当前日期和时间6. 统计文件中的行数7. 批量重命名文件&#xff08;将.txt后缀改为.bak&#xff09;8. 查找进程并杀死&…...

MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子

1. MATLAB 中的 FFT 和 IFFT 在 MATLAB 中&#xff0c;fft 和 ifft 函数具有以下缩放行为&#xff1a; fft&#xff1a;执行快速傅里叶变换&#xff08;FFT&#xff09;&#xff0c;不进行缩放。ifft&#xff1a;执行逆快速傅里叶变换&#xff08;IFFT&#xff09;&#xff0c;…...

轻松上手:使用 Vercel 部署 HTML 页面教程

&#x1f600; 在学习前端的过程中&#xff0c;部署项目往往是一个令人头疼的问题。然而&#xff0c;Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台&#xff0c;专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…...

如何运用 HTM?

一、HTM 概述 HTM&#xff08;Hierarchical Temporal Memory&#xff0c;分层时序记忆&#xff09;是一种基于神经科学原理构建的计算模型&#xff0c;旨在模拟大脑的学习和记忆机制&#xff0c;以处理复杂的时间序列数据和模式识别任务。它具有独特的架构和算法&#xff0c;能…...

12.16【net】【study】

路由表是路由器或者其他互联网网络设备上存储的一张表&#xff0c;它记录了到达特定网络目的地的路径。路由表中的每一行&#xff08;即一个路由条目&#xff09;包含了目的地网络地址、子网掩码、下一跳地址、出接口等信息。 Destinations&#xff08;目的地&#xff09;和 R…...

2023和2024历年美赛数学建模赛题,算法模型分析!

文末获取历年优秀论文解析&#xff0c;可交流解答 2023年题目分析 MCM&#xff08;Mathematical Contest in Modeling&#xff09; 问题 A&#xff1a;遭受旱灾的植物群落 概述&#xff1a;要求建立预测模型&#xff0c;模拟植物群落在干旱和降水充裕条件下随时间的变化。类…...

Node.js内置模块

1.内置模块 Node.js的中文网参考手册:https://nodejs.cn//api 帮助文档 API文档:查看对应的模块,左边是模块,右边是模块的成员 源码:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 创建web服务器的模块 -->进入源码中,搜索…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略

携程集团社招入职测评北森题库主要考察以下几个方面&#xff1a; 1. **言语理解**&#xff1a;这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**&#xff1a;包括文字题和图表题&#xff0c;考察应聘者快速找出关键信息…...

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统

Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…...

数据分流:优化数据处理流程的关键策略

引言 在大数据时代&#xff0c;企业面临着数据量的激增和数据类型的多样化。为了有效地管理和分析这些数据&#xff0c;数据分流成为了一个重要的策略。数据分流指的是将数据按照特定的规则和流程分配到不同的处理路径&#xff0c;以优化数据处理效率和准确性。本文将探讨数据…...

RabbitMQ如何构建集群?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ如何构建集群&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ如何构建集群&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;集群&#xff08;Cluster&#x…...

RNN LSTM Seq2Seq Attention

非端到端&#xff1a; data -》 cleaning -》 feature Engining &#xff08;70%-80%工作 设计特征&#xff09;-》 分类器 -》预测 端到端 End-to-End&#xff1a; data -》 cleaning -》Deep learning&#xff08;表示学习&#xff0c;从数据中学习特征&#xff09; -》…...

硬件设计-ADC和低本底噪声为何至关重要

简介 在工程领域&#xff0c;精度是核心要素。无论是对先进电子设备执行质量和性能检测&#xff0c;还是对复杂系统进行调试&#xff0c;测量精度的高低都直接关系到项目的成功与否。这时&#xff0c;示波器中的垂直精度概念就显得尤为重要&#xff0c;它衡量的是电压与实际被…...

个性化域名配置

1 申请免费SSL证书 访问 https://certbot.eff.org &#xff0c;可申请 通配符证书&#xff0c;每次申请可以使用3个月&#xff0c;到期可以免费续期。 2 配置nginx server index.conf 配置如下&#xff1a; server {listen 80;server_name biwow.com www.biwow.com;return …...

uniapp中打包应用后,组件在微信小程序和其他平台实现不同的样式

今天&#xff0c;我们来介绍一下&#xff0c;uniapp中如何实现打包应用后&#xff0c;组件在微信小程序和其他平台不同的样式&#xff0c;在这里&#xff0c;我们使用背景颜色进行演示&#xff0c;使用 UniApp 提供的 uni.getSystemInfoSync() 方法来获取系统信息&#xff0c;包…...

MRI脑肿瘤检测数据集,使用500张原始图片标注,支持yolo,coco,voc格式

MRI脑肿瘤检测数据集&#xff0c;使用500张原始图片标注&#xff0c;支持yolo&#xff0c;coco&#xff0c;voc格式 数据集下载&#xff1a; https://download.csdn.net/download/pbymw8iwm/90125474 https://download.csdn.net/download/pbymw8iwm/90125473 https://downl…...

JumpServer开源堡垒机搭建及使用

目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…...

Java 编程旅程(二)

在前一篇博客中&#xff0c;我们介绍了 Java 编程的基础知识和入门步骤。现在&#xff0c;我们将继续深入探讨 Java 的一些高级特性&#xff0c;以帮助你进一步提升编程技能。通过这篇博客&#xff0c;你将学习到更复杂的概念和技术&#xff0c;比如面向对象编程&#xff08;OO…...

一、springcloud 入门——笔记

1. 学习之前要知道的 springcloud 应用的技术 2. springboot 和 springcloud 的版本选型 官网介绍&#xff1a;https://spring.io/projects/spring-cloud/#overview 生成新的Spring Cloud项目 最简单的入门方法是访问start.spring.io&#xff0c;选择您的Spring Boot版本和要使…...

思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)

23个常用的VSCode快捷键&#xff08;动图演示&#xff09;> https://www.php.cn/faq/441696.html VSCodium AppImage 版 使用记录 https://blog.csdn.net/ken2232/article/details/143591323 **** 初步比较&#xff1a;VSCode > pk < VSCodium << 在下…...

C++ day8——模版

笔记脑图 作业 template <class T> class mylist{ public:// 这是一个链表的节点struct Link{T val;Link* next; } 增 &#xff1a;insert(T val) 在链表中创建新节点&#xff0c;节点上保存的数据为 val删&#xff1a;remove(T val) 移除链表中数据为 val 的节点改…...

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;上&#xff09;13.1.2 颜色插值方法&#xff08;中&#xff09; ✔️13.1…...

红日靶场1(搭建打靶)

搭建 靶场下载&#xff1a; http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G&#xff0c;需要百度网盘会员) 下载好靶场文件后直接解压 直接用虚拟机打开靶场 更改网络ip 需要模拟内网和外网两个网段&#xff0c; Win7 虚拟机相当于网关服务器&#xff0c;所以需要…...

LivePortrait 部署笔记

LivePortrait 开源地址&#xff1a; https://github.com/KwaiVGI/LivePortrait 模型下载&#xff1a; export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resume-download KwaiVGI/LivePortrait --local-dir models--KwaiVGI--LivePortrait...

Greenhills Lib操作-查看Lib信息与将lib中的data段link到指定区域

文章目录 前言Greenhillls中gsize的用法修改ld文件将lib中的data段指定区域示例定义与链接总结 前言 项目开发过程中&#xff0c;遇到客户开发ASW&#xff0c;提供Lib进行集成&#xff0c;但ASW中的标定量没有定义对应的data段&#xff0c;导致无法将标定量指定到特定的内存。…...

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法&#xff0c;详见&#xff1a;用贪心算法计算十进制数转二进制数&#xff08;整数部分&#xff09;_短除法求二进制-CSDN博客 经过一段时间的研究&#xff0c;本人又发现两个规律&#xff1a; 1、不仅仅十进制整数转二进制可…...

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff1b;当然&#xff0c;我们只要满足进程不同就行&#xff0c;所以即便是同一个主机&#xff0c;只要是不同进程&#xff0c;基于网络来传…...

AI for Science 的完美实践——科研文献的智慧化提取获得“综述性文摘”的软件开发

实践是检验真理的唯一标准&#xff01;show your codes! 1 综述性文摘的需求 再简单不过了。 甲方&#xff08;综述性文摘&#xff09;需求&#xff1a;针对项目特征或描述&#xff0c;从几百篇相关的科研论文&#xff08;PDF&#xff09;中智能提取相关内容&#xff0c;包括…...