Maven、mybatis框架

一、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
@NoArgsConstructorpublic 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 {@Testpublic 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);}@Testpublic 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();}@Testpublic 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();}@Testpublic 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();}@Testpublic 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 {@Testpublic 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);}@Testpublic 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();}@Testpublic 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();}@Testpublic 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();}@Testpublic 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.mzph.cn/news/889391.shtml

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

相关文章

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中&#xff0c;我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分&#xff1a;第一部分是使用BeautifulSoup的方法&am…

什么是厄尔米特(Hermitian)矩阵?

厄米矩阵&#xff08;Hermitian Matrix&#xff09;定义 在数学和物理中&#xff0c;厄米矩阵是满足以下条件的复方阵&#xff1a; A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中&#xff0c; A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置&#xff0c;即…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

爬虫获取的数据能否用于商业分析?

根据搜索结果&#xff0c;爬虫获取的数据能否用于商业分析&#xff0c;主要取决于以下几个因素&#xff1a; 数据的合法性与合规性&#xff1a; 爬虫技术本身并不违法&#xff0c;关键在于使用的方式和目的。爬虫技术的使用必须遵守相关法律法规&#xff0c;如《反不正当竞争法…

数据湖治理最佳实践

如果没有最佳实践&#xff0c;存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案&#xff0c;对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…

《Vue进阶教程》第六课:computed()函数详解(上)

往期内容&#xff1a; 《Vue零基础入门教程》合集&#xff08;完结&#xff09; 《Vue进阶教程》第一课&#xff1a;什么是组合式API 《Vue进阶教程》第二课&#xff1a;为什么提出组合式API 《Vue进阶教程》第三课&#xff1a;Vue响应式原理 《Vue进阶教程》第四课&#…

根据PDF模板单个PDF导出到浏览器和多个PDF打包ZIP导出到浏览器

一、单个PDF导出到浏览器 /*** * param templatePath 模板路径* param fileName 文件名称* param data 填充文本* param images 填充图片* param response* throws IOException*/public static void generateTempPDF(String templatePath, String fileName, Map<String, S…

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路&#xff1a; 1.第一次烧录固件会实现跳坏块&#xff0c;但是后续使用会导致坏块的产生&#xff1b; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…

Tornado 异步编程全解析

一、Tornado 异步基础 核心概念 IOLoop&#xff1a; 是 Tornado 的核心事件循环&#xff0c;负责处理网络 I/O、定时器等事件。它不断地循环监听事件&#xff0c;一旦有事件就绪就调用相应的回调函数。可以在一个进程中创建多个 IOLoop&#xff0c;但通常一个应用使用一个主 IO…

Windows桌面系统管理2:VMware Workstation使用和管理

Windows桌面系统管理0:总目录-CSDN博客 Windows桌面系统管理1:计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2:VMware Workstation使用和管理 Windows桌面系统管理3:Windows 10操作系统部署与使用-CSDN博客 Windows桌面系统管理4:Windows 10操作系统运维管理-…

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…

基于go语言的开源调度系统整理

pink https://github.com/busgo/pink 通过Web界面管理操作简单方便&#xff0c;支持各种任务 高可用可以部署 n 台调度集群节点&#xff0c;保证没有单点故障。 部署简单、仅仅需要一个执行文件即可运行。 集成方便&#xff0c;统一语言无关的任务抽象&#xff0c;接入不同语言…

多个终端查看的history不一样,如何确保多个终端会话之间的 history 一致,减少历史记录差异

问题&#xff1a; 在使用 Linux 系统时&#xff0c;history 命令显示的历史记录通常是与当前终端会话相关的。这就意味着&#xff0c;如果你在多个终端中打开会话&#xff0c;它们显示的历史记录可能不完全相同。这个问题通常是由以下原因引起的&#xff1a; 原因&#xff1a…

yolov8 转华为昇腾om脚本

目录 yolov8 转华为昇腾 om脚本 测试ok 推理demo: yolov8 转华为昇腾 om脚本 测试ok import sys import osos.chdir(os.path.dirname(os.path.abspath(__file__)))import torchcurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__)…

unity打包sdk热更新笔记

Unity3D项目Plugins目录组织 https://blog.csdn.net/linxinfa/article/details/102978005 IPreprocessBuild 继承提供打包前&#xff0c;打包后接口 BuildAssetBundles UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync 数据完整性校…

12.11-12.12总结(约瑟夫问题 机器翻译 滑动窗口)

12.11 刷题 《算法竞赛》这本书看了很多了&#xff0c;但是题目没咋做&#xff0c;所以今天来刷一下题 P1996约瑟夫问题 还依稀记得大一的时候被约瑟夫支配的恐惧&#xff08;哭&#xff09;&#xff0c;但是现在做就感觉很简单&#xff08;虽然也敲了一会&#xff0c;今早感…

git SSL certificate problem: unable to get local issuer certificate

Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构&#xff08;Certification Authority&#xff0c;CA&#xff09;签发。如果Git客户端无法找到或验证本地签发者证书&#xff0c;就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

css设置透明的几种办法

在CSS中&#xff0c;有几种方法可以设置元素的透明度。以下是主要的几种方式&#xff1a; 1. 使用 opacity 属性 定义&#xff1a;opacity 属性用于设置元素的整体透明度&#xff0c;包括其内容和背景。取值范围&#xff1a;取值从0&#xff08;完全透明&#xff09;到1&…

4,双向带头循环链表

目录 1&#xff0c;双向带头循环链表的定义 2&#xff0c;双向带头循环链表的实现 A&#xff0c;函数的声明 B&#xff0c;函数的定义 1&#xff0c;双向带头循环链表的定义 带头双向循环链表&#xff1a;结构复杂&#xff0c;一般用在单独存储数据。实际中使用的链表数据…