Maven、mybatis框架

news2025/4/20 9:35:08

一、Maven介绍

1.概念:

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

2.为啥使用maven:

之前项目中需要引入大量的jar包。这些jar从网上下载,可能下载地址不同意。这些jar之间可能存在冲突。我们应该有一个软件,帮你完成jar的下载。这个工具就是maven。


(主要和jar包有关系)...

3.maven 工作原理:

4.安装Maven和配置

如果本地之前安装过maven。不需要在装。

Download Apache Maven – Maven

5.idea关联本地maven⭐⭐

6.ieda创建Maven项目⭐⭐

1.maven的Java工程

2 maven的javaweb工程

7.然后把之前那个图书管理系统导入maven项目里面

二、Mybatis框架

1.什么是mybatis 

1.

MyBatis 是一款优秀的==持久层框架==,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射实体类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2

.框架: 别人写好的一个半成品工程。我们只需要安装指定的配置来使用这个半成品。

持久层框架: 就是与数据库交互的框架。---简化我们操作数据库表记录的一个框架。

ORM框架: Object Relative Mapping .

表----实体类

字段---属性

一条记录----对象

多条记录----对象集合

2.为什么使用mybatis

(这次主要和数据库的jdbc有关,是为了简化数据库jdbc的代码)

这是之前的连接数据库的操作BaseDao

原来的jdbc操作数据库代码中可以看出,我们操作数据库非常麻烦。需要手动设置占位符的值,而且需要手动封装处理结果集。 我们可以使用mybatis完成上面繁琐的操作。

Mybatis就是为了简化java操作数据库的代码。

3.如何使用mybatis:

先手建一个工程,然后在创建maven的java工程并引入依赖,

1.pom.xml:引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
          <!--  <scope>test</scope>-->
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
        </dependency>
        <!--mybatis框架的依赖-->
        <dependency>
            <groupId>repMaven.org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
    </dependencies>

</project>

2.创建实体类:

package org.example.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @className: User
 * @author: Zyl
 * @date: 2024/12/11 9:11
 * @Version: 1.0
 * @description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String salary;


    public User(String name, Integer age, String salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
}

3.mybatis配置文件---不需要背

在resources下面新建一个文件:mybatis.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">
                <!--name是固定的 value根据需要配置为自己的内容-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
<!--    &lt;!&ndash;引入映射文件&ndash;&gt;
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>-->
    <!--引入映射文件-->
    <mappers>
        <mapper resource="mapper/UserMapper2.xml"/>
    </mappers>


</configuration>

4.编写映射文件---不需要背

在resources下面建一个目录mapper,在目录下建一个和实体类对应的  映射文件:UserMapper.xml(这是我的User实体表)      

(主要是用来编写sql语句的)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">
<!--namespace:命名空间。现在可以随便写。后期需要和接口所在的包对应-->
<mapper namespace="qy179">

    <!--select表示查询sql标签
           id:表示sql语句的唯一标识,通常使用mapper接口的全类名.方法名组成
           resultType:表示结果类型。 mysql执行完该sql后返回的数据类型

        #{id}:表示占位符。mybatis会自动给该占位符赋值
    -->
    <select id="getById" resultType="org.example.entity.User">
        select * from user where id=#{id}
    </select>
    <!--删除语句-->
    <delete id="deleteById">
        delete from user where id=#{id}
    </delete>
    <!--增加语句--><!--增、删、改\返回的类型都是int ,所以不用写resultType-->
    <insert id="insertById" >
        insert into user(name,age,salary) values(#{name},#{age},#{salary})
    </insert>
    <!--修改语句--><!--#{name},#{age},#{salary}必须和实体类的属性名一致-->
    <update id="updateById">
        update user set name=#{name},age=#{age},salary=#{salary} where id=#{id}
    </update>
    <!--查询所有的语句-->
    <select id="getAll" resultType="org.example.entity.User">
        select * from user
    </select>


</mapper>

5.把映射文件放到配置中

6.单元测试:

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.example.entity.User;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @className: Test01
 * @author: Zyl
 * @date: 2024/12/11 9:35
 * @Version: 1.0
 * @description:
 */

public class Test01 {
    @Test
    public void test01() throws Exception{//测试不用写
        //1.读取mybatis的配置文件
       InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
       //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行写的sql语句
        //括号里第一个String statement.表示sql的标志,namespace+id;
        // 括号里第二个参数Object parameter.表示sql的参数
        User user = sqlSession.selectOne("qy179.getById", 1);
        System.out.println(user);

    }
    @Test
    public void test02() throws  Exception{//删除语句
        //1.读取mybatis的配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行写的sql语句
        int row = sqlSession.delete("qy179.deleteById", 1);
        System.out.println("影响的行数"+row);
        //提交数据
        sqlSession.commit();

    }
    @Test
    public void test03() throws  Exception{//增加语句
        //1.读取mybatis的配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行写的sql语句
        //构造函数
        User user = new User("zyl", 23, "10000");
        int row=sqlSession.insert("qy179.insertById",user );
        System.out.println("影响的行数"+row);
        //提交
        sqlSession.commit();

    }
    @Test
    public void test04() throws  Exception{//修改语句
        //1.读取mybatis的配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行写的sql语句
        User user = new User(4, "hahhah", 18, "5471");
        int row=sqlSession.update("qy179.updateById",user );
        System.out.println("影响的行数"+row);
        //提交
        sqlSession.commit();
    }
    @Test
    public void test05() throws  Exception{//查询所有的数据
        //1.读取mybatis的配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行写的sql语句
        List<User> objects = sqlSession.selectList("qy179.getAll");
        System.out.println(objects);
        //提交
        sqlSession.commit();


    }

}

4.使用接口绑定模式:

为了优化错误

1.dao接口:

2.映射文件也得重写一下:

UserMapper2.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:命名空间。现在可以随便写。后期需要和接口所在的包对应
这一次qy179就要改成  对应的接口名字了-->
<mapper namespace="org.example.dao.UserDao">
    <insert id="add">
        insert into user(name,age,salary) values(#{name},#{age},#{salary})
    </insert>
    <update id="update">
        update user set name=#{name},age=#{age},salary=#{salary} where id=#{id}
    </update>
    <delete id="deleteById">
        delete from user where id=#{id}
    </delete>

    <!--select表示查询sql标签
           id:表示sql语句的唯一标识,通常使用mapper接口的全类名.方法名组成
           resultType:表示结果类型。 mysql执行完该sql后返回的数据类型

        #{id}:表示占位符。mybatis会自动给该占位符赋值
    -->


    <select id="getById" resultType="org.example.entity.User">
        select * from user where id=#{id}
    </select>
    <select id="selectAll" resultType="org.example.entity.User">
        select * from user
    </select>
</mapper>

3.再次测试:

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.example.dao.UserDao;
import org.example.entity.User;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @className: Test02
 * @author: Zyl
 * @date: 2024/12/11 11:50
 * @Version: 1.0
 * @description:
 */

public class Test02 {
    @Test
    public void test01() throws Exception{//根据id查询数据
        //1.读取mybatis的配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //为接口实现代理实现类
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User byId = userDao.getById(4);
        System.out.println(byId);

    }
    @Test
    public void test02() throws Exception{//增加数据
        //1.读取mybatis的配置文件
        InputStream resourceAsStream=Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //为接口实现代理实现类
        UserDao userDao=sqlSession.getMapper(UserDao.class);
        User user=new User("www",23,"10000");
        int row=userDao.add(user);
        System.out.println("影响的行数"+row);
        //提交
        sqlSession.commit();

    }
    @Test
    public void test03() throws Exception{//查询所有的数据
        //1.读取mybatis的配置文件
        InputStream resourcesAsStream=Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //为接口实现代理实现类
        UserDao userDao=sqlSession.getMapper(UserDao.class);
        List<User> user=userDao.selectAll();
        System.out.println(user);
        //提交
        sqlSession.commit();
    }
    @Test
    public void test04() throws Exception{//删除数据
        //1.读取mybatis的配置文件
        InputStream resourceAsStream=Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂--获取SqlSession对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取SqlSession对象--理解为java与数据库的一次会话
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //为接口实现代理实现类
        UserDao userDao=sqlSession.getMapper(UserDao.class);
        int row=userDao.deleteById(8);
        System.out.println("影响的行数"+row);
        //提交数据
        sqlSession.commit();
    }
    @Test
    public void test05() throws Exception{//修改数据
        //读取mybatis的配置文件
        InputStream resourcesAsStream=Resources.getResourceAsStream("mybatis.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory  sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourcesAsStream);
        //3.获取SqlSession对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //4.为接口实现代理实现类
        UserDao userDao=sqlSession.getMapper(UserDao.class);
        User u=new User(4, "石昊", 18, "5471");
        int row = userDao.update(u);
        System.out.println("影响的行数"+row);
        //提交
        sqlSession.commit();
    }
}

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

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

相关文章

Python连接和操作Elasticsearch详细指南

Python连接和操作Elasticsearch详细指南 一、服务器端配置1. 修改 Elasticsearch 配置文件2. 开放防火墙端口 二、本地 Python 连接 Elasticsearch1. 连接 Elasticsearch2. 索引操作3. 文档操作4. 搜索内容5. 聚合查询6. 批量操作 三、注意事项四、故障排除结论 Elasticsearch …

获得日志记录之外的新视角:应用程序性能监控简介(APM)

作者&#xff1a;来自 Elastic David Hope 日志记录领域即将发生改变。在这篇文章中&#xff0c;我们将概述从单纯的日志记录到包含日志、跟踪和 APM 的完全集成解决方案的推荐流程。 通过 APM 和跟踪优先考虑客户体验 企业软件开发和运营已成为一个有趣的领域。我们拥有一些非…

Python - 面向对象;类和对象;方法属性;init,self;魔法方法;析构方法;函数方法区别(六)

一、面向对象编程&#xff08;OOP&#xff09; 定义 面向过程(Procedure Oriented Programming, POP)是一种程序设计范式&#xff0c;主要关注的是实现功能的步骤&#xff0c;设计时模块化和流程化。面向过程编程是一种以过程为中心的编程方式&#xff0c;它将问题分解成一系…

源码编译安装MySQL

MySQL相应版本的tar包下载 在5.7的版本的MySQL编译安装的时候&#xff0c;需要依赖C语言的库文件【boost】&#xff0c; 如上图所示&#xff0c;如果你使用第一个MySQL的tar包&#xff0c;还需要去网上去下载boost即C语言的库文件&#xff0c;但是第二个tar包就既包含MySQL的源…

关于Kubernetes(K8S)认证含金量?

Kubernetes越来越流行&#xff0c;目前它是市场上最佳的容器编排工具之一&#xff0c;也是运维工程师必备的技能之一。 大厂都在用K8S&#xff08;就业行情&#xff09; 虽说今年的大环境不是很好&#xff0c;但是从招聘数据来看&#xff0c;K8S岗位薪资不降反而上涨不…

Linux / Windows | ping IP + Port 测试

注&#xff1a;本文为 “Linux / Windows | ping IP Port 测试端口通畅” 相关文章合辑。 未整理去重。 windows 如何确认服务器上程序端口是否正常&#xff08;ping、tcping&#xff09; 三希已于 2023-05-22 18:08:06 修改 方式 1&#xff1a;ping 命令 ping 命令说明 p…

C++打造局域网聊天室第七课: Socket编程初步2

文章目录 前言一、Socket的API函数二、服务端建立Socket步骤总结 前言 C打造局域网聊天室第七课&#xff1a; Socket编程初步2 一、Socket的API函数 接着上一课的内容&#xff0c;我们在chartroom.cpp中找到如下位置 插入断点&#xff0c;运行 运行到断点处后&#xff0c;按…

vue-router路由传参的两种方式(params 和 query )

一、vue-router路由传参问题 1、概念&#xff1a; A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时&#xff0c;携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参&#xff1b; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…

Docker Compose应用实战

文章目录 1、使用Docker Compose必要性及定义2、Docker Compose应用参考资料3、Docker Compose应用最佳实践步骤1_概念2_步骤 4、Docker Compose安装5、Docker Compose应用案例1_网站文件准备2_Dockerfile文件准备3_Compose文件准备4_使用docker-compose up启动容器5_访问6_常见…

el-table组件树形数据修改展开箭头

<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…

5.2 JavaScript 案例 - 轮播图

JavaScript - 轮播图 文章目录 JavaScript - 轮播图基础模版一、刷新页面随机轮播图案例二、轮播图 定时器版三、轮播图完整版 基础模版 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"…

MongoDB与阿里云庆祝合作五周年,展望AI赋能新未来

12月3日&#xff0c;在印尼举行的阿里云合作伙伴大会2024上&#xff0c;MongoDB荣膺阿里云“2024技术创新成就奖”&#xff0c;该奖项旨在表彰与阿里云保持长期稳定合作&#xff0c;通过深度技术融合&#xff0c;在产品技术创新、行业区域深耕等领域取得卓越成就的伙伴。自2019…

数据结构(Queue队列)

前言&#xff1a; 在计算机科学中&#xff0c;数据结构是构建高效算法和程序的基础&#xff0c;而队列&#xff08;Queue&#xff09;作为一种经典的线性数据结构&#xff0c;具有重要的地位。与栈&#xff08;Stack&#xff09;不同&#xff0c;队列遵循“先进先出”&#xf…

EDA - Spring Boot构建基于事件驱动的消息系统

文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试消息消费运行项目 概述 在微服务架构和大规模分布式系统中&#xff0c;事件驱动架构&#xff…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式&#xff0c;24H内事件可自由上下拖动、自由拉伸。 以下是效果图&#xff1a; 具体实现比较简单&#xff0c;代码如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

软考高级架构 - 10.5 软件架构演化评估方法

10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则&#xff0c;并为每条原则设计了简单而有效的度量方法&#xff0c;用于从系统整体层面提供实用信息&#xff0c;帮助评估和指导架构演化。 演化成本控制&#xff1a;成本小于重新开发成本&#xff0c;经济高效。进…

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

目录 财务应付 金融信贷业务 近期&#xff0c;DocFlow票据自动化产品正式上线。DocFlow是一款票据AI自动化处理工具&#xff0c;支持不同版式单据智能分类扩展&#xff0c;可选功能插件配置流程&#xff0c;满足多样业务场景。 随着全球化与信息化进程&#xff0c;企业的文件…

C# 探险之旅:第二节 - 定义变量与变量赋值

欢迎再次踏上我们的C#学习之旅。今天&#xff0c;我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下&#xff0c;你正站在一个魔法森林里&#xff0c;手里拿着一本空白的魔法书&#xff08;其实就是你的代码编辑器&#xff09;&#xff0c;准备记录下各种神奇…

有道云笔记批量导出

前言 最近使用有道云笔记遇到打开过慢&#xff0c;导致笔记丢失&#xff0c;需要会员才能找回之前笔记问题。 决定改用思源&#xff0c;程序中的格式比较难于通过复制保留&#xff0c;即使导出成word 或者pdf&#xff0c;需要一个专门工具导出成Markdown格式&#xff0c;批量…

离线无网环境中基于OpenEuler的everything ISO安装软件

文章目录 1.创建挂载点 2.挂载 ISO 文件: 3.配置 YUM 源 4.清理 YUM 缓存并生成新的缓存: 5.使用 YUM 安装软件包 要在 OpenEuler 系统中挂载ISO &#xff08;下载地址&#xff1a;https://repo.openeuler.openatom.cn/openEuler-20.03-LTS/ISO/x86_64/&#xff09;并使用…