java-Mybaits框架01

news2024/11/15 7:59:19

1.框架概念

在基础语言之上,对各种基础功能进行封装,方便开发者,提高开发效率;

java后端框架

mybaits:对jdbc进行封装

Spring:对整个java后端架构进行管理。

SpringWeb:对web(Servlet)层进行封装

SpringBoot:对Spring框架的搭建进行封装

2.MyBait框架概述

   MyBatis 是一款优秀的持久层框架(dao层 数据访问层 数据持久层)。

  Mybaits是对jdbc进行的封装,避免了jdbc中手动设置参数,手动映射结果的操作。
   Mybaits将jdbc中的接口进行封装,提供了它自己的类和接口实现。
  MyBatis 可以使用 XML 或注解来配置和映射,将数据库中的记录自动映射成 Java 对象中,是一种 ORM(ORM Object Relational Mapping 对象关系映射)实现,将可以自动将数据映射到对象中的这种框架,也叫做orm框架。
   它支持动态 SQL 以及数据缓存.

3.Mybaits搭建

1.创建一个Maven项目

2.导入Mybaits依赖jar(在pom.xml文件中添加以下依赖)

<!--mybaits依赖-->
    <dependencies>
        <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.2</version>
    </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

3.创建一个全局的Mybaits配置文件,配置数据库连接等操作

在resource目录下创建一个mybaits.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://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root" />
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

4.创建数据库,创建表,准备数据

create database ssmdb charset utf8
create table admin(
id int primary key auto_increment,
account varchar(32),
password varchar(32),
gender char(1)
)

5.创建一个访问的接口,并创建相关方法

在com.ffyc.mybaitspro.dao包下,创建AdminDao接口

public interface AdminDao {
  Admin finAdminById(int id);
}

6.创建Admin对象

在com.ffyc.mybaitspro.model包下创建此对象,并重写toString()方法

package com.ffyc.mybaitspro.model;

public class Admin {
    private int id;
    private String account;
    private String password;
    private String gender;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

   public Admin(){
       System.out.println("Admin无参的构造方法");
   }

    @Override
    public String toString() {
        return "Admin{" +
                "id=" + id +
                ", account='" + account + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

7.测试Mybaits

public class Test1 {
    public static void main(String[] args) throws IOException {
        // 1.mybaits读取配置文件
        Reader resourceAsReader = Resources.getResourceAsReader("mybaits.xml");

        //2.创建 SqlSessionFactory 负责创建SqlSession对象(链接数据库的会话对象,类似Connection对象)
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsReader);
        //3.创建SqlSession对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        // 4.创建接口的代理对象(由框架生成)
        AdminDao adminDao=sqlSession.getMapper(AdminDao.class);
//5.调用
      Admin admin=  adminDao.finAdminById(1);//让代理对象帮我们调用映射文件中与此接口中相同名称的方法。
        System.out.println(admin);
       //关闭与数据库连接
        sqlSession.close();//关闭与数据库的连接
    }
}

4.搭建补充

1.在IDEA中安装mybatisX插件

2.Mybatis 中文官网
https://mybatis.org/mybatis-3/zh_CN/index.html
3.数据库链接池
type="POOLED" 使用数据库连接池功能
数据库链接池
连接数据库:每次访问数据库,创建一个Connection,用完关闭,
但是访问量过大,每次都要创建新的对象,用完关闭,比较耗时
使用数据库连接池,在池(集合)中事先创建连接对象
用户访问时,直接池中获取一个连接对象
用完不销毁,还回到池中,这样就减少平凡创建销毁连接对象

4.Mybatis日志

具体选择哪个日志实现由 MyBatis 的内置日志工厂确定。它会使用最先找到的。
Mybatis 内置的日志工厂提供日志功能,具体的日志实现有以下几种方式:
SLF4J|LOG4J|JDK_LOGGINGCOMMONS_LOGGING|STDOUT_LOGGING
配置日志
<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

5.参数传递

1.单个参数直接传递
Admin selectAdmins(int id);
2.多个参数使用@Param(“id”)绑定
Admin login(@Param(“account”)String account,
@Param(“password”)String password);
3.如果传入一个复杂的对象,就需要使用 parameterType 参数进行类型定义,例如:
voidlogin1(Admin admin);
6.增删改查
(1)增加操作
在AdminDao接口中定义方法
然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,以及获得自增的主键值
<insert id="insertAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
    insert into admin(account,password,gender)values(#{account},#{password},#{gender})
</insert>

在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行
//单元测试
    /*以方法为单位,测试
    * 使用junit组件实现单元测试
    * */
@Test
    public void insert(){
        System.out.println("新增");
    Admin admin=new Admin();
    admin.setAccount("aa");
    admin.setPassword("111");
    admin.setGender("男");
    SqlSession sqlSession= MybatisUtil.getSQLSession();
    AdminDao adminDao=sqlSession.getMapper(AdminDao.class);
    adminDao.insertAdmin( admin);
    sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。
//新增,修改,删除完毕后,都需要手动提交事务
sqlSession.close();
    }

运行结果

(2)删除操作

在AdminDao接口中定义方法

然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id主键,删除行信息

 <delete id="deleteAdmin" parameterType="int" >
    delete from admin where id =#{id}
</delete>

在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行

//单元测试 /*以方法为单位,测试 * 使用junit组件实现单元测试 * */
@Test
public void delete(){
    System.out.println("删除");
    SqlSession sqlSession= MybatisUtil.getSQLSession();
    AdminDao adminDao=sqlSession.getMapper(AdminDao.class);
    adminDao.deleteAdmin(6);


    sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。
    //新增,修改,删除完毕后,都需要手动提交事务。
    sqlSession.close();
}

运行结果

运行前

运行后

(3)修改操作

在AdminDao接口中定义方法

然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id,修改行信息

<update id="updateAdmin" parameterType="Admin">
    update admin set account=#{account},password=#{password},gender=#{gender}
    where id=#{id}
</update>

在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行

 @Test
    public void update(){
        System.out.println("修改");
        SqlSession sqlSession= MybatisUtil.getSQLSession();
        AdminDao adminDao=sqlSession.getMapper(AdminDao.class);
      Admin admin=new Admin();
      admin.setId(1);
      admin.setAccount("1212");
      admin.setPassword("23232");
      admin.setGender("女");

adminDao.updateAdmin(admin);

        sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。
        //新增,修改,删除完毕后,都需要手动提交事务。
        sqlSession.close();
    }

运行结果

运行前

运行后

(4)查询操作

在AdminDao接口中定义方法

然后在AadminMapper.xml中添加相应的添加操作方法的sql代码,根据行id,查询行信息

在test包中添加测试代码,在方法上加上@Test注解,进行测试,测试方法是否可以运行

@Test
public void select(){
    System.out.println("修改");
    SqlSession sqlSession= MybatisUtil.getSQLSession();
    AdminDao adminDao=sqlSession.getMapper(AdminDao.class);
    Admin admin=new Admin();
   adminDao.findAdminById(1);

    sqlSession.commit();//提交数据库事务,当程序代码执行没有任何问题时,再向数据库发送提交事务操作,数据库真正执行sql,出现异常则不提交事务。
    //新增,修改,删除完毕后,都需要手动提交事务。
    sqlSession.close();
}

运行结果

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

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

相关文章

vxe-grid 利用dayjs提供的方法来格式化, 计算二个日期之间的年数/年龄

1、安装dayjs pnpm add dayjs yarn add dayjs npm install dayjs 2、导入 import dayjs from dayjs; 3、vxe-grid列&#xff1a; export const UserColumns: VxeGridPropTypes.Columns [ ... {title: 年龄,width: 70,field: old,showOverflow: tooltip,align: center,sortabl…

android studio 设置gradle jdk

1. 左上角点击file 2. 按照如下点击&#xff1a; 3. 即可修改gradle jdk

EasyExcel文件导出简洁版

1. EasyExcel简介 EasyExcel是一个基于Java的简单、快速、lightweight的Excel处理库。它的主要特点包括: 轻量级设计: EasyExcel的jar包大小仅约1MB,相比较其他Excel处理库如Apache POI来说更加轻量。 采用内存友好的流式读写模式,无需一次性加载整个Excel文件到内存,大大减少…

Linux的CPU调度优化详解

一、引言 随着计算机硬件技术的不断发展和进步&#xff0c;现代服务器和工作站通常都配备了多核CPU&#xff0c;为了充分发挥多核处理器的性能优势&#xff0c;Linux系统提供了多种CPU调度器以及相关的参数设置&#xff0c;以便进行CPU调度优化&#xff0c;提高系统的整体性能…

AI 音频/文本对话机器人:Whisper+Edge TTS+OpenAI API构建语音与文本交互系统(简易版)

文章目录 前言思路&#xff1a;环境配置代码1. 加载Whisper模型2. 使用Whisper语音转文本3. 使用OpenAI API生成文本进行智能问答4. 实现文本转语音功能5. 合并音频文件6. 构建Gradio界面注意 总结 前言 在本篇博客中&#xff0c;我将分享如何利用Whisper模型进行语音转文本&a…

GFS系统架构

GFS系统架构 针对上述观察&#xff0c;我们发现它们与早期文件系统的设计假设存在显著差异。为此&#xff0c;我们采取了以下解决方案&#xff1a; 组件故障&#xff1a;我们接受故障为常态&#xff0c;系统设计以自我监控和快速恢复为原则&#xff0c;适应低成本硬件环境下的…

基础算法--递推算法[信奥一本通]

本节所讲题源自【信奥一本通】C版&#xff1a;基础算法-第三章-递推算法 相信大家应该都接触过数列的概念。哎哟&#xff0c;一直在跟数组打交道&#xff0c;说数列感觉好陌生&#xff0c;哈哈。数列中的迭代法大家都还记得吗&#xff1a;通过反复应用特定规则&#xff0c;推导…

Linux系统中的Btrfs技术

在Linux操作系统中&#xff0c;文件系统扮演着至关重要的角色&#xff0c;负责管理数据存储、文件访问以及系统的稳定性。其中&#xff0c;Btrfs&#xff08;B-tree file system&#xff09;作为一种先进的文件系统技术&#xff0c;正在逐渐引起广泛关注和应用。本文将深入探讨…

【算法】深入浅出聚类算法:原理、应用与Java实现

一、引言 在数据分析和机器学习中&#xff0c;聚类算法是一种无监督学习技术&#xff0c;用于将数据集中的对象自动划分为多个子集&#xff0c;每个子集称为一个簇。聚类算法在多个领域有着广泛的应用&#xff0c;如图像处理、信息检索、市场细分、生物信息学等。本文将介绍聚…

匿名函数详解

lambda表达式&#xff1a; [](){} []捕获列表 () 函数的参数列表 {}函数的函数体 #include<iostream> #include<string> using std::cout; using std::endl; using std::string; void func() {cout << "hello func" << endl; }void tes…

【系统分析师】-WEB开发技术

目录 1、负载均衡技术 1.1、应用层负载均衡 1.2、传输层负载均衡 2、有状态和无状态问题 3、CDN内容分发网络 4、持久化技术 1、负载均衡技术 1.1、应用层负载均衡 1&#xff09;http 重定向 HTTP 重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均…

深度学习--负采样技术及其扩展详解

负采样技术及其扩展详解 负采样&#xff08;Negative Sampling&#xff09;是一种常用于自然语言处理和推荐系统中的技术&#xff0c;主要目的是优化模型的训练效率和效果。负采样技术的典型应用场景包括词向量训练&#xff08;如Word2Vec&#xff09;、推荐系统中的隐语义模型…

使用 Nuxt 的 showError 显示全屏错误页面

title: 使用 Nuxt 的 showError 显示全屏错误页面 date: 2024/8/26 updated: 2024/8/26 author: cmdragon excerpt: 摘要:本文介绍Nuxt.js中的showError方法用于显示全屏错误页面,包括其参数类型及使用方式,并演示了如何在页面中捕获并展示错误,还介绍了useError用于管理…

MySQL笔记-对mysql.sock.lock认识(2024-06-12)

此篇博文记录到个人笔记的时间为2024-06-12。 背景 每次服务器非正常关机&#xff0c;或者制作的docker镜像有问题时或没手动停mysql时&#xff0c;运行 mysqld --userroot 时&#xff0c;mysql总会启动失败&#xff0c;查看/var/log/mysqld.log时会有如下报错信息&#xff…

你的软件系统安全吗

如果你的软件系统可以通过网络访问, 可以由多人操作, 可以访问或操作敏感数据, 或者可能暴露隐私, 等等, 请一定要保护你的系统. 那么你的软件系统安全吗? 一. 先问自己如下 4 个问题 1. What are we working on? 我们的系统在干啥? 例如电商系统: 我们在卖啥?提供什么售前…

【变化检测】基于Tinycd建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、Tinycd模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113 likyoo变化检测源码&#xff1a;https://github.com/likyoo/open-cd 使用情况&#xff1a…

在vue2中,使用计算属性,具体代码如下:

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

爆改YOLOv8 | 利用CPA-Enhancer提高低照度物体检测(适用于雨,雪,雾天)

1&#xff0c;本文介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强&#xff0c;显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中&#xff0c;并在物体检测及其他视觉任务中设立了新的性能标准&#xff0c;展现了广泛的应用潜力。…

打包资料优化目录

这篇文章主要写一下这一次更新的几个地方&#xff0c;有对原来的代码及模型进行优化的部分&#xff0c;也有新增加的代码和模型&#xff0c;我就把几个比较典型的给列了出来。但是还有好多的更新没有在下面展示出来&#xff0c;因为一个个展示出来太复杂了。如果你对更新的内容…

mybatis框架搭建、mybatis打印日志设置、参数传递使用、myatis插件MyBatisX

一、框架 就是对技术的封装&#xff0c;将基础的技术进行封装&#xff0c;让程序员可以快速的使用&#xff0c;提高效率。 Java后端框架&#xff1a; mybatis&#xff1a;对jdbc进行封装 spring&#xff1a;对整个Java后端架构进行管理的 springweb&#xff1a;对web层&a…