mybatis搭建,参数传递,增删改查事务管理

news2024/11/15 21:27:28

1.mybatis概述

原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了 Google Code,随着开发团队转投Google Code 旗下, iBatis3.x正式更名为MyBatis。
MyBatis 是一款优秀的持久层框架。

框架就是对技术的封装,让程序员可以快速使用,提高开发效率。

Java后端框架:

Mybatis:对jdbc进行封装,

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

Springweb:对web层(servlet)进行封装

Springboot:对spring框架进行搭建

Linxu操作系统:mysql redis docker 开发好的项目部署到linux环境

Mybatis是一个优秀的数据持久层,(dao层 数据访问层 数据持久层)

Mybatis是对jdbc进行的封装,避免了jdbc中,手动设置参数,手动印射结果,可以使用 XML 或注解来配置和映射,将数据库中的记录映射成Java 的 POJO(Plain Old Java Objects,普通的 Java 对象,就是后台管理系统管理里面的model,将数据库后面返回的数据进行封装通过servlet传递到前端),是一种 ORM(ORM Object Relational Mapping 对象关系映射)实现.

Mybatis还提供了动态sql和数据缓存功能。

mybatis搭建

  1. 创建一个maven项目
  2. 导入mybatis jar包
  3. 创建一个全局的mybatis配置文件,配置数据库连接等
  4. 创建一个访问接口,定义方法
  5. 创建接口对应的印射文件,编写sql

1.idea2023版的可以直接创建一个普通的java项目会自动默认选择maven。

2.打开这个文件导入依赖

3.对mybatis全局配置进行设置,导入数据库连接的依赖

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

<!--mybatis配置文件全局配置-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/><!--打印日志,控制台输出信息-->
<!--        是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

<!--    为类配置别名-->
    <typeAliases>
<!--        <typeAlias type="com.ffyc.mybatisdemo.model.admin" alias="Admin"></typeAlias>&lt;!&ndash; 一次配置一个&ndash;&gt;-->
<package name="com.ffyc.mybatisdemo.model"/><!-- 一次配置一个包下面的-->
    </typeAliases>
    
    
<!--配置数据库连接-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
<!--          type="POOLED"数据库连接池 默认创建了十个连接对象,减少频繁创建销毁对象   -->
            <dataSource type="POOLED">
<!--                数据库连接配置-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/dormdb?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root" />
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

<!-- 注册印射文件   -->
<mappers>
    <mapper resource="mappers/adminmapper.xml"></mapper>
</mappers>


</configuration>

4.创建接口定义方法,创建一个sql印射文件,

sql印射文件

<?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.ffyc.mybatisdemo.dao.adminDao">
    <!--接口地址-->
<!--sql映射文件-->
<!--主要写sql实现 -->
    <insert id="insert" parameterType="com.ffyc.mybatisdemo.model.admin"
    useGeneratedKeys="true" keyProperty="id" keyColumn="id">
-- useGeneratedKeys="true" 返回自增主键
-- keyProperty="id"  定义接收属性
-- keyColumn="id" 定义主键列
        insert into admin(account,password) values (#{account},#{password})
    </insert>
    <delete id="delete" parameterType="int">
        delete from admin where id=#{id}
    </delete>
    <select id="findAdminByid"
            parameterType="int"
            resultType="admin">
        <!--id接口方法 parameterType参数类型 resultType返回对象-->
        select * from admin where id = #{id}
    </select>
    <select id="findAdminByaccount" parameterType="string" resultType="admin">
        select * from admin where account=#{account}
    </select>
    <select id="findAdminByidaccount" resultType="admin">
        select * from admin where id=#{id} and account=#{acc}
    </select>
    <select id="findAdmin" parameterType="admin" resultType="admin">
        select * from admin where id=#{id} and account=#{account}
    </select>
    <select id="findadmins" resultType="admin">
select * from admin
    </select>

</mapper>

 接口中定义的方法1都要在sql印射文件中实现,安装一个插件,就是接口方法前面的小鸟,点击就可以跳转到印射文件中对应的印射sql,并且在未安装插件时书写不会报错提示。

搭建完成后基本上就是对4 5步操作就行了

接口与印射文件对应的关系

mybatis全局配置要按照顺序进行配置

参数传递

1.单个参数传递

方法

void delete(int id);

对应sql印射文件, parameterType="int传入参数类型为int

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

多个参数传递

方法

 admin findAdminByidaccount(@Param("id") int id,@Param("acc") String account);

对应sql印射文件, resultType="admin"返回值类型

<select id="findAdminByidaccount" resultType="admin">
        select * from admin where id=#{id} and account=#{acc}
    </select>

对象参数

方法

admin findAdmin(admin a);

对应sql印射文件,此时#{}里面的id与account都应该时在admin中定义的属性。

<select id="findAdmin" parameterType="admin" resultType="admin">
        select * from admin where id=#{id} and account=#{account}
    </select>

本来返回对象为admin应该写全名,

com.ffyc.mybatisdemo.model.admin

因为在全局配置中进行了设置,所以可以直接写admin,配置如下,需要注意的是mybatis配置必须要按顺序。

<!--    为类配置别名-->
    <typeAliases>
<!--        <typeAlias type="com.ffyc.mybatisdemo.model.admin" alias="Admin"></typeAlias>&lt;!&ndash; 一次配置一个&ndash;&gt;-->
<package name="com.ffyc.mybatisdemo.model"/><!-- 一次配置一个包下面的-->
    </typeAliases>

配置完别名后返还对象就可以这样写

 

增删改查事务管理

数据库事务:数据库一种管理机制,是对一次连接数据库过程的管理,保证一次操作中,执行的多条sql,要么都执行,要么都不执行,例如转账

  1. 先从a减钱 sql1
  2. 再从b加钱 sql2

查询,查询操作通常不需要事务管理

 //1.读取配置文件
        Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
        //2.创建SqlSessionFactory对象,负责创建sqlsession对象(连接数据库的会话对象类似于connection)
        //SqlSessionFactory也只需要创建一次创建后不需要销毁
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader);
        //3.创建sqlsession对象
        SqlSession sqlSession = build.openSession();
        //创建接口代理对象
        adminDao mapper = sqlSession.getMapper(adminDao.class);
        admin adminByid = mapper.findAdminByid(1);
        System.out.println(adminByid);
        //关闭与数据库连接
        sqlSession.close();

增加,将一些固定步骤封装在jdbcUtil的静态方法中,使用的时候直接调用,

通过commit()(一定不可以写在finally中)提交事务,前面程序都没有问题执行这一步。上面的因为没有提交事务所以没有加入数据成功。增删改必须提交事务,查数据不需要提交事务。

印射文件

 <insert id="insert" parameterType="com.ffyc.mybatisdemo.model.admin"
    useGeneratedKeys="true" keyProperty="id" keyColumn="id">
-- useGeneratedKeys="true" 返回自增主键
-- keyProperty="id"  定义接收属性
-- keyColumn="id" 定义主键列
        insert into admin(account,password) values (#{account},#{password})
    </insert>

Mybatis返回值印射

例如数据库中的admin表的admin_gender列,开启这个设置后就可以印射到java对象中的admin的adminGender列中。

List<admin> findadmins();当方法返回值是一个集合时,

<select id="findadmins" resultType="admin">
select * from admin
    </select>

在sql印射文件,返回值类型还是admin,mybatis会自动将admin封装到List集合中去。

 

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

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

相关文章

Spring源码之reader、scanner

目录 1.Spring的整体启动流程 2.reader 3.Scanner ApplicationContext的三种加载应用上下文的方式&#xff08;创建Spring容器&#xff09;&#xff1a; AnnotationConfigApplicationContextClassPathXmlApplicationContextFileSystemXmlApplicationContext 1.Spring的整体…

SprinBoot+Vue阅读交流微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

观测云核心技术解密:eBPF Tracing 实现原理

前言 eBPF 是一种强大的内核技术&#xff0c;允许在内核中安全地执行自定义代码。通过 eBPF&#xff0c;开发者可以在不修改内核源码的情况下&#xff0c;对内核功能进行扩展和监控。eBPF Tracing 利用这一技术&#xff0c;对系统调用、内核函数等进行跟踪&#xff0c;从而实现…

X86架构(六)——移位指令与无条件转移指令

移位指令 shr 逻辑右移 逻辑右移指令会将操作数连续地向右移动指定的次数&#xff0c;移出的比特被移到标志寄存器的CF位&#xff0c;左边空出来的位置用0填充 ;目的操作数可以是8位或16位的通用寄存器或者内存单元 ;源操作数可以是数字1、8位立即数或者寄存器CL shr r/m8, …

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果&#xff1a; 前 后

使用vscode debug cpp/python混合编程的程序(从python调用的C++编译的dll)

使用vscode debug cpp/python混合编程的程序&#xff08;从python调用的C编译的dll&#xff09; 1. 安装插件 Python C Debugger https://marketplace.visualstudio.com/items?itemNamebenjamin-simmonds.pythoncpp-debug 2. 在.vscode/launch.json中增加配置 拷贝自 https:…

K8S日志收集

本章主要讲解在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志&#xff0c;包括程序直接输出到控制台日志、自定义文件日志等。 一、有哪些日志需要收集 为了更加方便的处理异常&#xff0c;日志的收集与分析极为重要&#xff0c;在学习日志收集之前&#xff0c;需要知…

矮草坪渲染尝试

本来说写unity里的&#xff0c;由于three测试方便&#xff0c;先试试three 这个图片是目标效果 可以看见草很矮&#xff0c;很密集&#xff0c;如果用instance来绘制的话&#xff0c;遭不住的 忽然发现这个效果很像绒毛效果 于是找了博客康康 https://zhuanlan.zhihu.com/p/256…

第二证券:涨停潮!传手机将使用钛金属外壳?

今天早盘&#xff0c;银行股再度重挫&#xff0c;导致上证指数、上证50纷乱创出阶段性新低&#xff0c;上证指数跌破2800点&#xff0c;小盘成长股则大面积反弹&#xff0c;创业板指、科创50等股指飘红。 盘面上&#xff0c;新式烟草、钛金属、锂矿、玻璃基板等板块涨幅居前&a…

glsl着色器学习(七)

先了解一个矩阵库twgl/m4 是一个4x4 矩阵数学转换函数的库 normalize(a, dst) 将一个向量除以它的欧几里得长度&#xff0c;归一化后返回参数"a"是一个vec3&#xff08;三维向量&#xff09;参数"dst"是用来接收结果的&#xff0c;如果不传&#xff0c;则…

【嵌入式体系结构复习资料】

选择&#xff1a; 1. 以下哪个不是嵌入式系统设计的主要目标&#xff1f;( D ) A&#xff0e;低成本 B.低功耗 C.实时要求高 D.超高性能 2&#xff0e; 嵌入式系统有别于其他系统的最大特点是&#xff08;A &#xff09;。 A&#xff0e;嵌入专用 B.高可靠 C.…

集成电路学习:什么是LCD液晶显示器

一、LCD&#xff1a;液晶显示器 LCD&#xff0c;全称Liquid Crystal Display&#xff0c;即液晶显示器&#xff0c;是一种平面超薄的显示设备。它由一定数量的彩色或黑白像素组成&#xff0c;放置于光源或者反射面前方。LCD的主要原理是以电流刺激液晶分子产生点、线、面配合背…

mysql 使用 general 开启SQL跟踪功能

查看当前状态 mysql> SHOW VARIABLES LIKE %general%; 启用 临时启用 SET GLOBAL general_logon; SET GLOBAL general_log_file/tmp/general.log; 永久启用 通过修改配置文件来启用,需要重启mysql服务 [mysqld] general_logON general_log_file/tmp/general.log 再次查看状态…

【保姆级教程】如何在Win11上搭建一个GPU环境

CUDA和CUDNN安装 CUDA安装 下载对应cuda环境 下载链接&#xff1a;https://developer.nvidia.com/cuda-downloads&#xff0c;图片下载的是 cuda_12.6.1_560.94_windows.exe 然后一路安装即可&#xff1a; 安装路径如下&#xff1a; CUDNN安装 打开cuDNN下载页面 解压后…

排查SQL Server中的内存不足及其他疑难问题

文章目录 引言I DMV 资源信号灯资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)查询性能计数器什么是内存授予?II DBCC MEMORYSTATUS 查询内存对象III DBCC 命令释放多个 SQL Server 内存缓存 - 临时度量值IV 等待资源池 %ls (%ld)中的内存…

【408DS算法题】034进阶-22年真题_判断顺序存储二叉树是否是BST

Index 真题题目分析实现总结 真题题目 已知非空二叉树T的结点值均为正整数&#xff0c;采用顺序存储方式保存&#xff0c;数据结构定义如下: typedef struct { // MAX_STZE为已定义常量int SqBiTNode[MAX_SIZE]; // 保存二叉树结点值的数组int ElemNum; …

BM3D--Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering

系列文章目录 文章目录 系列文章目录前言稀疏三维变换域协同滤波图像去噪摘要1 引言2 分组和协作过滤A.分组B.按匹配分组C.协同过滤D.基于变换域收缩的协同过滤 3 算法结论 前言 论文地址 如果下载不了可以从 https://download.csdn.net/download/m0_70420861/89708940 获取 …

Pytorch安装 CUDA Driver、CUDA Runtime、CUDA Toolkit、nvcc、cuDNN解释与辨析

Pytorch的CPU版本与GPU版本 Pytorch的CPU版本 仅在 CPU 上运行&#xff0c;适用于没有显卡或仅使用 CPU 的机器。安装方式相对简单&#xff0c;无需额外配置 CUDA 或 GPU 驱动程序。使用方式与 GPU 版相同&#xff0c;唯一不同的是计算将自动在 CPU 上进行。 Pytorch的GPU版…

VBA学习(63):Excel VBA 数据分析展示/ListView控件/Combox组合框控件/CheckBox复选框控件/科目汇总表

前面我们分享了使用ListVeiw进行数据展示&#xff0c;做出“科目汇总表”来&#xff08;Excel VBA 数据分析展示/ListView控件、Excel VBA 数据分析展示/ListView控件/Combox组合框控件/科目汇总表(2)&#xff09;&#xff0c;今天&#xff0c;我们继续完善按月查询、按一级科目…

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释 问题描述第一个奇怪的bug&#xff1a;新建的工程没有SoftMotion General Axis Pool选项第二个奇怪的bug&#xff1a;在新建工程SoftMotion General Axis Pool选项时&#xff0c;无法手动添加第三个奇怪的bug&#xff1a;虚…