Mybatis是什么?Mybatis入门程序

news2024/11/18 23:34:51

一、框架是什么?

1.java常见框架:   
        SSM三大框架:Spring+Mybatis+SpringMvc

2.什么是框架?
        框架本身就是对于通用代码的封装,提前写好的类和方法,我们在做项目的时候直接引入这些框架(本质就是引入类和接口),基于这些框架,简化我们的开发。框架一般都以jar包的形式存在。

3.mvc三层架构
        这里引用动力节点的一张图

 

表现层:它直接和前端打交道,一方面接收ajax请求,一方面返回json数据给前端。
业务逻辑层:它一方面处理表现层转发过来的请求,一方面将持久层处理的数据返回给表现层。
持久层:它直接和数据库打交道,就是完成crud操作的,并且将数据返回给业务逻辑层。
我们的mybatis就属于Java持久层框架。

二.JDBC有哪些不足/为什么开发中用Mybatis而不是JDBC?

1.sql语句写死在Java程序中,修改sql文件就要去修改java文件,这明显违背了开闭原则。
2.给占位符?传值操作是繁琐的,而Mybatis可以帮我们自动传值
3.JDBC将查询结果集封装成Java对象繁琐,Mybatis帮我们将结果集自动封装成对象。

三.Mybatis本质?

1.可以理解为Mybatis是升级版的JDBC,它本质上就是对JDBC的封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。

2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。

3. 采用了半个ORM的思想。hibernate 完全的ORM思想

四.Mybatis入门程序

1.创建数据库和表结构

create database mybatis_demo;
use mybatis_demo;
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.创建Maven工程,创建java项目即可。

3.引入坐标

        3.1引入Mybatis的jar包 
        3.2引入MySQL驱动的jar包
        3.3引入Junit单元测试的jar包
        3.4引入log4j的jar包

<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>

4.在rescources下新建mybatis-config.xml,这个是mybatis的核心配置文件
        这里mybatis-config.xml名字不是必须的,但是最好遵循规范。
        这里创建在rescources目录下,表示mybatis-config.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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--这里写自己的数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="2020"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
        <mapper resource=""/>
    </mappers>
</configuration>

5.在rescources下新建CarMapper.xml文件,这里写我们的sql语句
        这里sql语句结尾可以不写";" 
        CarMapper.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">
<!--namespace先随意写一个-->
<mapper namespace="car">
    <!--insert sql:保存一个汽车信息-->
    <insert id="insertCar">
        insert into t_car
            (id,car_num,brand,guide_price,produce_time,car_type) 
        values
            (null,'102','丰田mirai',40.30,'2014-10-05','氢能源')
    </insert>
</mapper>

6.将CarMapper.xml文件路径配置到mybatis-config.xml文件中
        <mapper resource="CarMapper.xml"/>

7.编写测试文件
 

public class MyBatisIntroductionTest {
    public static void main(String[] args) {
        // 1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 创建SqlSessionFactory对象
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        // 3. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 4. 执行sql
        int count = sqlSession.insert("insertCar"); // 这个"insertCar"必须是sql的id
        System.out.println("插入几条数据:" + count);
        // 5. 提交(mybatis默认采用的事务管理器是JDBC,默认是不提交的,需要手动提交。)
        sqlSession.commit();
        // 6. 关闭资源(只关闭是不会提交的)
        sqlSession.close();
    }
}

运行即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 最远点采样(FPS,二维版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 简而言之,该方法是通过迭代、增量的方式来选择距离前一个点集最远的点从而实现数据的采样过程。其算法步骤如下所述: (1)从点集 S S S中随机选择一个点

【Linux基本指令和权限(1)】

本文思维导图&#xff1a; 文章目录 一、Linux操作的特点二、使用指令从Xhell登录云服务器三、基本指令1.ls指令2. pwd指令&#xff1a;3.cd指令4. touch指令5. rm指令 写在最后 Linux是一个操作系统&#xff0c;操作系统是一款做软硬件管理的软件。 一、Linux操作的特点 Li…

报错解决:关于swagger的Caused by: java.lang.NullPointerException: null

目录 一、遇到问题 二、解决办法 方法一 方法二 方法二中导入依赖报错的解决方案 一、遇到问题 在往springboot项目里面添加swagger时候&#xff0c;启动的时候就报了如下null了的错误 遇到问题的报错提示&#xff1a; Error starting ApplicationContext. To display the…

200人 500人 园区网设计

实验要求&#xff1a; ① 设置合理的STP优先级、边缘端口、Eth-trunk ② 企业内网划分多个vlan &#xff0c;减少广播域大小&#xff0c;提高网络稳定性 ③ 所有设备&#xff0c;在任何位置都可以telnet远程管理 ④ 出口配置NAT ⑤ 所有用户均为自动获取ip地址 ⑥ 在企业…

bitset(位图)的使用与模拟实现

bitset&#xff08;位图&#xff09; 位图引入bitset的使用bitset&#xff08;位图&#xff09;的模拟实现bitset类各函数接口总览bitset类的实现构造函数set、reset、flip、testsize、countany、none、all打印函数 位图引入 问&#xff1a;给40亿个不重复的无符号整数&#xf…

Cell Reports:任栓成/高东/胡志安/唐玲团队合作揭示压力性失眠发生的神经机制

良好的觉醒与睡眠是幸福生活和高效工作的前提。然而&#xff0c;随着现代社会生活节奏的加快&#xff0c;觉醒睡眠障碍&#xff0c;特别是失眠&#xff0c;已成为不容忽视的健康问题。据中国睡眠研究会发布的《2022中国国民健康睡眠白皮书》显示&#xff0c;约3/4人群曾存在觉醒…

Tpflow V7.0.2 PHP 工作流引擎新版发布

欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统&#xff0c;基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力&#xff0c;让系统更具可用性&#xff0c;智能应用型&#xff0c;便捷设计性。Tpflow 团队致力于打造中国…

如何提高企业运转效率?

企业运转效率是企业成功的重要因素之一&#xff0c;随着市场竞争的加剧和客户需求的不断提高&#xff0c;企业需要不断提高运转效率以保持竞争力。本文将从提高企业运转效率的意义、影响因素、优化方法等方面进行探讨。 提高企业运转效率的意义 提高企业运转效率的意义主要包…

提高Web应用程序稳定性的关键:如何编写高质量的Web自动化测试用例

目录 设计测试用例 编写测试用例 安装Selenium和Python库 编写测试用例 执行测试用例 创建测试套件 运行测试用例 分析测试结果 总结 Web自动化测试用例的编写是Web应用程序测试中非常重要的一环。它可以确保Web应用程序在不同条件和场景下的稳定性、可靠性和正确性。…

合合信息新推出反光消除技术,助力手写文字识别更精准

近期&#xff0c;合合信息旗下扫描全能王推出液晶手写板&#xff08;简称“手写板”&#xff09;&#xff0c;为用户带来仿真、流畅的书写绘画体验&#xff0c;一同发布的还有扫描全能王APP的新功能“拍手写板”。该功能可帮助用户在拍摄手写板内容后去除图片上的反光干扰&…

Tuxera NTFS2023第三方应用苹果电脑磁盘读写工具

哪里有专业级的NTFS格式读写工具&#xff1f;Tuxera NTFS2023中文版是一款非常好用的NTFS读写工具&#xff0c;可以让您完整的读写兼容NTFS格式驱动器&#xff0c;对磁盘进行访问、编辑、存储和传输文件等操作。同时还包括开源磁盘管理器等简单的格式和硬盘维修检查和修复。Mac…

即时通讯APP开发方案?你想要的全在这里!

现如今的即时通讯需求其实很多&#xff0c;应用场景也是多样化&#xff1b;企业内部办公、社交聊天、朋友闲聊都可以在即时通讯APP内完成。 即时通讯app开发对于企业来说是内部沟通的重要模式&#xff0c;对于普通用户来说这种交通方式也更加灵活化&#xff1b;即时通讯app开发…

酒店预订小程序开发:如何通过小程序提升您的酒店品牌价值?

在当今高度数字化的世界里&#xff0c;通过酒店小程序开发来提升品牌价值已成为一种越来越流行的方式。酒店小程序源码的开发可以帮助酒店提供更好的客户体验&#xff0c;提高预订转化率。在本文中&#xff0c;我们将探讨如何通过酒店小程序开发来提升您的酒店品牌价值。 酒店…

记录-因为写不出拖拽移动效果,我恶补了一下Dom中的各种距离

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 背景 最近在项目中要实现一个拖拽头像的移动效果&#xff0c;一直对JS Dom拖拽这一块不太熟悉&#xff0c;甚至在网上找一个示例&#xff0c;都看得云里雾里的&#xff0c;发现遇到最大的拦路虎就是JS…

GNSS/INS组合导航实习面试

GNSS/INS组合导航面试 美团无人机、云创智行、阿里达摩院、图森蔚来组合导航、来牟创新、 腾讯地图出行事业部、 持续更新 文章目录 GNSS/INS组合导航面试1.GNSS方面的问题模糊度固定的方法&#xff0c;以及部分模糊度固定多普勒和载波为什么精度更高&#xff0c;对多径更不敏…

你们工作中怎么用ChatGPT?如何高效Prompt?

当你还在错误使用对话 AI 工具如 GPT&#xff0c;可能会觉得其作用不过是知识平移总结或简单问答。实际上&#xff0c;当了解先进的用法、知悉如何做到 better prompt&#xff0c;你会发现&#xff1a;AI 不是来替代你的&#xff0c;是来帮助你更好工作。如果还用搜索引擎的“关…

【iOS-分类,拓展和关联对象底层探究】

前言 寒假分享会问题解决二 早在大一的OC的学习过程就知道了分类和拓展的区别和联系&#xff0c;分类不能添加成员变量&#xff0c;而拓展可以添加成员变量。分类是在运行时期实现的&#xff0c;而拓展只是编译器的时候就实现了。对于分类我们可以通过关联对象来为我们需要的分…

什么蓝牙耳机好?经销商分享线下热销蓝牙耳机品牌排行

开实体店铺多年&#xff0c;对数码行业多有研究&#xff0c;每天都会试用各种数码产品。网友们在发帖咨询什么蓝牙耳机好&#xff0c;为此我整理了实体店铺最受欢迎的蓝牙耳机品牌排行&#xff0c;大家在选购时可以作为备选&#xff1a; 第一款&#xff1a;JEET Air2蓝牙耳机 …

Mac M1/M2 安装nvm管理多版本node

Mac M1/M2 安装nvm管理多版本node Mac m1、Mac&#xff0c;Ventura 13.2&#xff0c;M2安装NVM使用homebrew安装nvm安装NodeMac nvm install failed python: not found解决方法(终端中执行以下命令)&#xff1a; Mac m1、Mac&#xff0c;Ventura 13.2&#xff0c;M2安装NVM 使…

2023最新XXL-JOB定时器教程

1.创建一个名为xxl_job的数据库,执行sql # # XXL-JOB v2.4.0 # Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS xxl_job default character set utf8mb4 collate utf8mb4_unicode_ci; use xxl_job;SET NAMES utf8mb4;CREATE TABLE xxl_job_info (id int(…