Mybatis:xml配置和基本增删改查

news2025/2/28 6:25:01

目录

一、环境配置(environments)

1.事务管理器(transactionManager)

2.数据源(dataSource)

3.属性(property)

4.设置(settings)

5.类型别名(typeAliases)

二、安装MybatisX插件

三、封装SqlSessionFactory

四、传参方式和参数类型

五、增删改查示例

1.查询

2.删除

3.修改

4.添加


一、环境配置(environments)

environments中可以配置多个与数据库连接,如下默认使用环境为development,但每个SqlSessionFactory 实例只能选择一种环境。

 SqlSessionFactory指定id 为development的环境

String environment = "development"; // 指定环境参数
SqlSessionFactory sqlSessionFactory = builder.build(inputStream, environment);

1.事务管理器(transactionManager)

type="JDBC"数据库管理事务:对一次数据库操作过程中的多条sql进行管理控制,一次提交多条sql语句,要么都提交成功,要么都不提交成功,使用mybatis时默认手动提交。

jdbc是自动事务提交,提交后数据保存到数据库中。

2.数据源(dataSource)

type=POOLED数据库连接池

        池子可以理解为一个集合,每次与数据库交互一次,创建一个数据库连接对象(connection、sqlSession),可以将初始化好的连接对象都存在一个池子中(可以设置连接对象个数),下次连接使用时,就可以再次使用,减少了多次创建的消耗。

3.属性(property)

配置属性文件:将property中的name和value以键值对的形式保存在properties后缀名的文件里方便修改值。例如将数据源中的属性值配置到文件中

dirvername=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ssm_db?serverTimezone=Asia/Shanghai
uname=root
psw=123456

再将该文件配置到核心配置文件中,注意配置顺序,要与官方要求的顺序一致

 <properties resource="config.properties"></properties>

4.设置(settings)

添加日志功能:打印相关信息

<setting name="logImpl" value="STDOUT_LOGGING"/>

开启驼峰命名自动映射:数据库字段名如果为两个单词或以上,由于不分大小写,通常之间使用“_”下划线命名,但java类中属性名为驼峰命名规则,以下可以自动开启驼峰自动映射。

<setting name="mapUnderscoreToCamelCase" value="true"/>

5.类型别名(typeAliases)

在sql标签中,resultType如如果是类,需要配置全类名,可能会太长,冗余,就可以使用typeAliases来设施别名了。

例如<typeAlias type="com.my.mybatis.model.Admin" alias="Admin">将类名命为“Admin”。

<package name="com.my.mybatis.model"/>可以直接使用该路径下的类名。 

    <typeAliases>
        <!--<typeAlias type="com.my.mybatis.model.Admin" alias="Admin"></typeAlias>-->
        <package name="com.my.mybatis.model"/>
    </typeAliases>

二、安装MybatisX插件

方便接口中的方法与之对应的跳转 

三、封装SqlSessionFactory

由于SqlSessionFactory只创建一次且创建时间较长,因此可以封装SqlSessionFactory使之创建一次,减小消耗;

其中SqlSessionFactory.openSession()默认不自动提交事务,需要手动提交sqlSession.commit()。以下是封装的SqlSessionFactor,返回SqlSession对象:

package com.my.mybatis.util;

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 java.io.IOException;
import java.io.Reader;

public class MybatisUtil {

    static SqlSessionFactory sessionFactory = null;

    static {
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //创建 SqlSessionFactory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }
    public static SqlSession getSqlsession(){
        return sessionFactory.openSession();
    }
}

四、传参方式和参数类型

可以阅读已经写的文章讲解了 传参方式和参数类型:Mybatis:传参+提交事务(自动or手动)+sql多表关联查询(两种方法)_mybatisplus手动提交事务_小俱的一步步的博客-CSDN博客https://blog.csdn.net/weixin_63541561/article/details/131742189?spm=1001.2014.3001.5501

 注意:查询语句中,查询列名与属性名相同时,mybatis会自动将值封装到对象中。

五、增删改查示例

1.查询

    <!--查询总数-->
    <select id="countAdmin" resultType="java.lang.Integer">
        select count(*) from admin
    </select>
    <!--查询多个记录,resultType为单个类,但接口返回值为List<Admin> -->
    <select id="adminList" resultType="Admin">
        select * from admin
    </select>

2.删除

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

3.修改

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

4.添加

 useGeneratedKeys="true"  keyColumn为数据库中表中的列名, keyProperty为类中对应的属性

 设置这之后就可以获取添加字段的id,不用再次查找获取id。

    <insert id="saveAdmin1" parameterType="Admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into admin (account,password)value (#{account},#{password})
    </insert>
public class Test3 {
    public static void main(String[] args) throws IOException {
       SqlSession sqlSession = MybatisUtil.getSqlsession();
        //获得接口代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //调用方法
        String acc = "tom1";
        String psw = "111";
        Admin admin = new Admin();
        admin.setAccount(acc);
        admin.setPassword(psw);

        adminDao.saveAdmin1(admin);
        //保存数据后获取 id
        System.out.println(admin.getId());
        //手动提交
        sqlSession.commit();
        sqlSession.close();
    }
}

 执行结果,可知添加的admin信息id为9

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

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

相关文章

科研论文配图绘制指南——基于Python—第二章1.matplotlib

目录 第二章2.0 安装所需的环境2.1 Matplotlib2.1.1 图形元素2.1.2 图层顺序2.1.5 子图绘制2.1.7 结果保存 第二章 2.0 安装所需的环境 attrs23.1.0 certifi2023.7.22 click8.1.6 click-plugins1.1.1 cligj0.7.2 colorama0.4.6 cycler0.11.0 Fiona1.9.4.post1 geopandas0.13.…

算法随笔:强连通分量

概念和性质&#xff1a; 强连通&#xff1a;在有向图G中&#xff0c;如果两个点u和v是互相可达的&#xff0c;即从u出发可以到达v&#xff0c;从v出发也可以到达u&#xff0c;则成u和v是强连通的。 强连通分量&#xff1a;如果一个有向图G不是强连通图&#xff0c;那么可以把它…

适用于vue3中图片全屏展示

App中的代码片段 <style scoped> .container {background: url("./assets/back2.jpg");height: 100%;width: 100%;position: fixed;background-size: 100% 100%; } </style>

vue与vueComponent的关系

创建完组件之后 就会创建一个vueComponent构造函数 当注册成功这个组件并且在页面使用之后 就会创建一个vueComponent实例对象&#xff0c; 所以为了避免组件在使用过程中data对象中的值混乱 组件中的data要写成函数&#xff0c; 使得每次创建的组件实例对象都可以返回一…

【ESD专题】电池包打ESD时的电流走向分析及防护指南

一个典型的电池包,包含了电芯、保护芯片(或电量计)、及周边的元件(如检测电阻、MOS管)、连接器等。 如下所示为高侧MOS电量计方案:在电量计(BMU)周边,有电芯、 保护 MOSFET、 电流检测电阻、 连接器等。在电量计左边的 RC 滤波电路是代表多个 RC 滤波电路,用于监控多…

Java项目-苍穹外卖-Day05

主要是写代码 完成套餐功能 和之前那个菜品类似 这里我懒得贴我的代码了 写一下改的几个bug 1.修改菜品关联套餐的时候&#xff0c;对应的菜品关联数据要setSetmealId一下&#xff0c;因为接收数据是赋不到那个关联的ID值的&#xff0c;如果不设置新增的话对应的setmealID就会为…

node安装node-sass依赖失败(版本不一致)

1.官网对应node版本 https://www.npmjs.com/package/node-sass2.node-sass版本对应表

Redis数据结构之List

Redis 中列表&#xff08;List&#xff09;类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串成为元素 Eelement&#xff09;&#xff0c;一个列表最多可以存储 2^32-1 个元素。 在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&am…

Matlab绘制灰度直方图

直方图是根据灰图像绘制的&#xff0c;而不是彩色图像通。查看图像直方图时候&#xff0c;需要先确定图片是否为灰度图&#xff0c;使用MATLAB2019查看图片是否是灰度图片&#xff0c;在读取图片后在MATLAB界面的工作区会显示读取的图像矩阵&#xff0c;如果是&#xff0c;那么…

DBO优化TCN的电力负荷预测,附MATLAB代码

今天为大家带来一期基于DBO-TCN的电力负荷预测。不得不说&#xff0c;TCN在时序数据中的预测效果在一定程度上要优于LSTM。 原理详解 文章对TCN网络的五个参数进行优化&#xff0c;分别是&#xff1a; 正则化参数&#xff0c;学习率&#xff0c;滤波器个数&#xff0c;滤波器大…

(二)k8s实战-深入Pod详解

一、配置文件详解 创建Pod nginx样例 apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型&#xff0c;Pod, Deployment,StatefulSet metadata: # Pod相关的元数据&#xff0c;用于描述Pod的数据name: nginx-demo # Pod的名称labels: # 定义Pod的标签type: app # 自定义l…

SpringBoot 跨域问题和解决方法

Spring Boot 是一种用于构建独立的、生产级别的Java应用程序的框架。在开发Web应用程序时&#xff0c;经常会遇到跨域资源共享&#xff08;CORS&#xff09;问题。本文将详细介绍Spring Boot中的跨域问题以及相应的解决方法。 目录 什么是跨域&#xff1f;1. 使用Spring Boot…

MySQL中到全外连接(full outer join)编写方法说明

在SQL中&#xff0c;全外连接&#xff08;full outer join&#xff09;是一种无论是否匹配&#xff0c;都返回两张表中所有记录的连接: 不幸的是&#xff0c;MySQL不支持这种关联&#xff0c;我们必须以某种方式模拟它。但该如何操作呢&#xff1f; 在SQL中&#xff0c;同样的…

西瓜书第三章

广义线性模型 考虑单点可微函数 g ( ⋅ ) g(\cdot) g(⋅)&#xff0c;令 y g − 1 ( ω T x b ) yg^{-1}(\omega^{T}xb) yg−1(ωTxb)&#xff0c;这样得到的模型称为“广义线性模型”&#xff0c;其中函数 g ( ⋅ ) g(\cdot) g(⋅)称为“联系函数”。显然&#xff0c;对数线…

Maven聚合项目(微服务项目)创建流程,以及pom详解

1、首先创建springboot项目作为父项目 只留下pom.xml 文件&#xff0c;删除src目录及其他无用文件 2、创建子项目 子项目可以是maven项目&#xff0c;也可以是springboot项目 3、父子项目关联 4、父项目中依赖管理 <?xml version"1.0" encoding"UTF-8&qu…

iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合

效果图 需求&#xff0c;由于视图层级的原因&#xff0c;需要对图片分开进行磨砂&#xff0c; 然后组合在一起 如图&#xff0c;上下两部分&#xff0c;上下两个UIImageVIew大小相同&#xff0c;都是和图片同样的大小&#xff0c;只是上面的UIimageVIew 只展示上半部份 &#…

基于java SpringBoot CRM客户关系管理系统设计

当今计算机技术和信息管理技术的迅速发展和广泛应用&#xff0c;为管理相关理论的应用提供了广阔的平台。IT技术和DBT技术&#xff08;数据库技术&#xff09;基于《客户信息管理系统》设计的客户信息管理系统正在逐步发展成为管理模式发展的新趋势&#xff0c;企业建立客户信息…

ModaHub魔搭社区:AI Agent在 知识图谱场景下的AgentBench基准测试

近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现,顶级商业LLM在复杂环境中表现出…

[保研/考研机试] KY207 二叉排序树 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉排序树_牛客题霸_牛客网二叉排序树&#xff0c;也称为二叉查找树。可以是一颗空树&#xff0c;也可以是一颗具有如下特性的非空二叉树&#xff1a; 1。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692721757794 描述&#x…

Ae 效果:CC Light Sweep

生成/CC Light Sweep Generate/CC Light Sweep CC Light Sweep&#xff08;CC 光线扫描&#xff09;可以创建一个动态的光线扫描&#xff0c;常用于模拟一束光在图像上移动的效果。支持 Alpha 通道并能基于 Alpha 通道边缘创造逼真的光照。 ◆ ◆ ◆ 效果属性说明 Center 中心…