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

2023-10-27

目录

一、环境配置(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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis:xml配置和基本增删改查 的相关文章

  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • Gerrit合并分支cherry-pick后提交代码push报错,43366 closed问题处理

    Gerrit合并分支cherry pick后提交代码push报错 43366 closed问题处理 这个问题是我cherry pick别的分支代码时遇到的 至于如何cherry pick代码可以参考 链接 如何cherry pick分支代码
  • html字符串转json

    业务场景 后端返回给前端的数据中 有html格式的字符串 如下 font color red 我是提示信息 font 后端使用fastjson data toJsonString 响应给前端 但是格式不是标准的json格式 如 msg fo
  • Qt 的信号与槽

    QT的信号与槽的三种实现方式 3种方式 1 直接在设计选项卡中拖动连接控件 然后选择控件间的关联函数 2 头文件mainwindows h中 ifndef MAINWINDOW H define MAINWINDOW H include
  • jdk8 api

    JDK 8是Java开发工具包的第8个主要版本 它于2014年3月18日发布 JDK 8 API是Java开发人员使用的程序包 类 接口和注释的集合 用于创建Java程序 它包括Java核心库 如java lang和java util 以及
  • MSP430F5529学习笔记(2)——点亮LED

    TI官方MSP430F5529开发板原理图和中文开发手册 MSP430F5529学习笔记 1 环境配置 目录 原理图和中文开发手册获取方法 点亮LED1 分析电路图 写程序 点亮LED1 1 首先我们需要告诉单片机 P1 0是输入还是输出
  • 二叉树的链式存储结构及(C语言)实现

    上一节讲了二叉树的顺序存储 通过学习你会发现 其实二叉树并不适合用数组存储 因为并不是每个二叉树都是完全二叉树 普通二叉树使用顺序表存储或多或多会存在空间浪费的现象 本节我们学习二叉树的链式存储结构 图 1 普通二叉树示意图 如图 1 所示
  • Makefile语法

    下面来介绍Makefile的基本语法 12 2 1 引入文件 OpenWrt 使用三个 makefile 的子文件 分别为 Include TOPDIR rules mk Include INCLUDE DIR kernel mk Incl
  • 14-5 使用 xml 完成布局

    14 3 小节中 helloworld程序创建窗口使用代码创建 此外 也可使用 xml 完成窗口布局 代码仅仅用来处理数据逻辑 实现布局和数据处理相分离 布局的 ui 代码 builder ui
  • JumpServer开源堡垒机安装配置

    JumpServer开源堡垒机安装与配置 一 简介 二 下载与安装 2 1 下载 2 2 安装 2 3 其他 一 简介 JumpServer 堡垒机帮助企业以更安全的方式管控和登录各种类型的资产 支持 官网地址 https www jump
  • windows文件服务器 文件方案,windowsserver2008文件服务器搭建2种方案.docx

    文件服务器搭建的两种方案范光华制作 文件服务器搭建的两种方案范光华制作 文件服务器搭建的两种方案 搭建目的 1 实现企业文件共享与传输 提高工作效率 2 提高企业访问文件的安全性 搭建环境 1 windows server 2008 R2
  • Navicat Premium 安装 & 注册

    Navicat Premium 一 Navicat Premium的安装 1 暂时关闭windows的病毒与威胁防护弄完再开 之后安装打开过程中弹窗所有警告全部允许 不然会被拦住 2 下载安装包 解压 链接 https pan baidu
  • 爬虫抓取图片:下载高质量图片

    目录 1 抓取图片简介 2 准备工作 3 分析Unsplash网站结构 4 编写图片爬虫
  • stm32使用PWM时,关闭PWM引脚会出现高电平解决方案

    现在使用TIM3来产生PWM波形 并通过软件打开 关闭PWM以实现调制波形 做法是 打开 TIM Cmd TIM3 ENABLE 关闭 TIM Cmd TIM3 DISABLE 跟踪到TIM Cmd之后 发现直接操作寄存器就可以了 TIMx
  • 从Random Walk(随机游走)到Graph Embedding(DeepWalk,LINE,Node2vec,SDNE,Graph2vec,GraphGAN)

    前言 本文转载自csdn博主上杉翔二系列博客并外加一些自己收集的资料 在这里仅作为自己学习之用 原文链接 https blog csdn net qq 39388410 article details 87904974 1 随机游走 普通数
  • idea java 插件开发_Intellij IDEA插件开发入门详解

    现今的IDE尽管有如 洪水猛兽 般强大 但要知道再强大的IDE也没法提供给使用者想要的一切功能 所以IDE一般都提供有API接口供开发者自行扩展 下面以Intellij IDEA 12下的插件开发为例 来看一下如何进一步增强IDE以适应开发
  • ROS自学实践(6):ROS进行激光SLAM建图——gmapping

    本节主要记录运行ROS自带的SLAM建模包gmapping方法 为后续理解这些代码 建立自己的SLAM算法打下基础 基于粒子滤波算法 二维栅格地图 需要里程计信息 1 通过命令行安装gmapping包 sudo apt get instal
  • win10下qt 中没有代码提示框了怎么办?

    在这里我也找了好久 发现是跟你装的输入法有冲突了 所以代码提示没有了 请你切换到英文的输入下 把你的输入法换成标准的英文输入输入状态 图片如下 换成这样就可以提示了 如图所示完美解决不能提示的问题 好了完美解决问题 在这里我放上我讲的几个课
  • Elasticsearch搜索详解(六):文本检索

    文本检索是关系型数据库 如 MySQL 的弱项 而恰恰是 ES 的强项 前一篇文章已经提到了 match term 除此之外还有multi match match phrace 等 分别的含义是 match 从一个字段中检索关键字 包括模糊
  • react中setState即时更新解决方案

    博主在做一个前端项目时 需要根据props中的状态来修改state中的状态 由于react中setState更新状态不能及时显示到页面 博主总结如下可及时更新state中的方法 1 componentWillReceiveProps 2 g
  • Mybatis:xml配置和基本增删改查

    目录 一 环境配置 environments 1 事务管理器 transactionManager 2 数据源 dataSource 3 属性 property 4 设置 settings 5 类型别名 typeAliases 二 安装My