JavaSE学习(Mybatis的配置与思想1)

Mybatis入门实战:JavaSE案例分析与实践 Mybatis 是一款支持定制化SQL、存储过程以及高级映射的优秀持久层框架。它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以通过简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 阅读详情

前言

有很多数据库连接操作例如JDBC,但是更为简便的、更为主流的还是mybatis。关于mybatis的初体验,可以从他的配置、思想以及一些简单的数据库操作案例入手。


一、mybatis的配置

1、首先创建一个maven项目、创建一些包以便方便后续操作。
在这里插入图片描述

2、引入依赖:在pom文件中添加所需要的坐标依赖:

mysql8的驱动、mybatis的驱动、做单元测试的junit、记录日志

3、配置mybatis:配置属性文件和映射文件
注:XML 文档的序言(Prolog)部分( XML 声明标签与 DOCTYPE 声明标签)一定不能写错,大家可以复制我给出的。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//dtd Config 3.0//en"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.HouseMapper">
<!--这里写 SQL 映射语句标签 -->
</mapper>
<?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">

MyBatis 全局配置文件( mybatis-config.xml )用于对 MyBatis 进行全局性的设置和配置,其核心功能在于环境配置:
数据库连接: 配置数据库连接的必要信息,像数据库驱动类、URL、用户名和密码等,以建立与数据库的连接。
事务管理: 指定事务管理的类型,如 JDBC 或 MANAGED,从而对事务的处理方式加以控制。
映射器配置
注册映射器: 将 Mapper 接口或者 XML 映射文件注册到 MyBatis 中,这样 MyBatis 才能识别并使用这些映射器。
。

记录日志的格式,要写在一个属性文件( log4j.properties )中,如下:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

二、简单的查询与更新操作

1、封装执行日志的方法:

public static void logs(){
    try {
        Properties properties = new Properties();
        FileInputStream fileInputStream = new FileInputStream("src/main/resources/config/log4j.properties");
        properties.load(fileInputStream);
        PropertyConfigurator.configure(properties);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注:在使用FileInputStream获取配置文件时,需要它的相对路径(src下的)。
2、封装获取对象的方法:

public static SqlSession getSqlSession(){
    SqlSession sqlSession = null;
    try {
//        1.读取mybatis配置文件()
        InputStream resourceAsStream = Resources.getResourceAsStream("config/mybatis-config0.xml");
//        2.获取sqlSession工厂对象
        SqlSessionFactory buildFac = new SqlSessionFactoryBuilder().build(resourceAsStream);
//        3.通过工厂获取对象
        sqlSession = buildFac.openSession();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sqlSession;
}

SqlSession 属于 MyBatis 里的核心接口,借助它能够执行 SQL 语句、管理事务等操作。
注:在使用getResourceAsStream获取配置文件时,需要它的绝对路径。
3、添加查询和更新的sql映射语句标签:

<select id="findAllDate" resultType="javabean.House">
    select *
    from house
</select>
<update id="insert">
    insert into house
    values (null, "可欣", "386", "广州", "3000", "0")
</update>

MyBatis 通过这些标签来定义具体的 SQL 操作,将 SQL 语句与 Java 代码进行解耦。它们都放置在 mapper 标签内部,mapper 就像是一个容器,集中管理这些 SQL 映射语句。

4、查询与插入代码展示:

api:
selectOne: 查询一条记录变更返回一个JavaBean
selectList: 查询整张表,返回一个list集合
update: 增删改都是用这个api(其实insert、delete也能用)

public void findAll () {
    logs();
    SqlSession sqlSession = getSqlSession();
//        执行映射文件中的sql语句
    List<Object> objects = sqlSession.selectList("HouseMapper.findAllDate");
    for(Object obj:objects){
        System.out.println(obj);
    }      
}

注:查询操作本身不会对数据库数据进行修改,所以不需要通过提交事务来持久化数据变更。

public void insertData(){
    logs();
    SqlSession sqlSession = getSqlSession();
    int update = sqlSession.update("HouseMapper.insert");
//        提交事务
    sqlSession.commit();
    System.out.println("update = " + update);
}

注:更新一定要提交事务,否则即使返回的update的值大于零,也没有真正对数据库进行插入操作。

三、多个属性的增删改查(动态)

1、查询某几个字段

<select id="select1" resultType="javabean.House">
    select ${cols}
    from house
</select>
public void select1(){
        logs();
        SqlSession sqlSession = getSqlSession();
        HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put("cols","name,tel,address");
        List<Object> objects = sqlSession.selectList("HouseMapper.select1", objectObjectHashMap);
        for(Object obj:objects){
            System.out.println(obj);
        }
    }

这里使用的是Map键值对的方式存储数据,“cols”是键,后面的“name,tel,address,所以在映射文件文件中写的是cols,通过键取值。

2、动态插入一条数据

<update id="insert1">
        insert into house
        values (null, #{name}, #{tel}, #{address}, #{rent}, #{state})
    </update>
    public void insert1(){
        logs();
        SqlSession sqlSession = getSqlSession();
//        准备数据
        HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put("name","笑笑");
        objectObjectHashMap.put("tel","789");
        objectObjectHashMap.put("address","上海");
        objectObjectHashMap.put("rent","5000");
        objectObjectHashMap.put("state","1");
        int update = sqlSession.update("HouseMapper.insert1", objectObjectHashMap);
        sqlSession.commit();
        System.out.println("update = " + update);
    }

3、删除一条数据

    <insert id="delete1">
        delete
        from house
        where id = #{id}
    </insert>
    public void delete1(){
        logs();
        SqlSession sqlSession = getSqlSession();
        int delete = sqlSession.delete("HouseMapper.delete1",5);
        sqlSession.commit();
        System.out.println("delete = " + delete);
    }

4、更新一条数据中的某几个字段

    <update id="update1">
        update house
        set tel=#{tel},
            rent=#{rent},
            state=#{state}
        where id = #{id}
    </update>
    public void update1(){
        logs();
        SqlSession sqlSession = getSqlSession();
        House house = new House();
        house.setId(4);
        house.setTel("655");
        house.setRent("5000");
        house.setState("1");
        int update = sqlSession.update("HouseMapper.update1", house);
        sqlSession.commit();
        System.out.println("update = " + update);
    }

注意这里的占位符#{ }、${ }

四、模糊查询、条件查询、批量删除sql构建的特殊语法

1、模糊查询

<!--    模糊查询-->
    <select id="selectName" resultType="javabean.House">
        select *
        from house
        where name like #{name}
    </select>
    public void selectName(){
        logs();
        SqlSession sqlSession = getSqlSession();
        HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put("name","%小%");
        List<Object> objects = sqlSession.selectList("HouseMapper.selectName", objectObjectHashMap);
        for(Object obj : objects){
            System.out.println(obj);
        }
    }

2、条件查询

<!--    条件查询-->
    <select id="selectRent" resultType="javabean.House">
        select * from house where 1=1
        <if test="minRent!=null">
            and rent>#{minRent}
        </if>
        <if test="maxRent!=null">
            and rent <![CDATA[<]]>#{maxRent}
        </if>
    </select>

这里要加一个1=1的原因是如果不加后面minRent不为空时,会在where后直接拼接一个and rent<?

    public void selectRent(){
        logs();
        SqlSession sqlSession = getSqlSession();
        HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
        objectObjectHashMap.put("minRent",200);
        objectObjectHashMap.put("maxRent",5000);
        List<Object> objects = sqlSession.selectList("HouseMapper.selectRent", objectObjectHashMap);
        for(Object obj : objects){
            System.out.println(obj);
        }
    }

我的表中rent是varchar的,一开始写的添加键值对语句是objectObjectHashMap.put(“minRent”,“200”); objectObjectHashMap.put(“maxRent”,“5000”);
后来发现无法查询到我期望的数据,原因可能是将 String 类型按照字符编码规则进行比较,而不是按照数值大小比较。后来我填的是int类型,在传入整型虽然会自动转换,但也可能因为类型不匹配而引发错误。

3、批量删除

<!--    批量删除-->
    <delete id="deleteByIds">
        delete from house where id in
        <foreach collection="array" open="(" item="id" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    public void deleteByIds(){
        logs();
        SqlSession sqlSession = getSqlSession();
//      删除id为2、11的数据信息
        int []arr={2,11};
        int delete = sqlSession.delete("HouseMapper.deleteByIds", arr);
        sqlSession.commit();
        System.out.println("delete = " + delete);
    }
Mybatis入门JavaSE案例 一个简单的Mybatis入门案例,其中有如何配置,dao层注解方式的举例和XML配置方式的举例 立即下载

相关推荐

从入门到实战:openEuler 系统管理与运维笔记(持续更新)

本文为openEuler系统管理与运维的实战笔记,从CentOS迁移者视角切入,详细介绍了openEuler的生态兼容性、内核优化及安全特性。内容涵盖系统安装规划、虚拟机部署、基础命令操作、文件系统管理以及用户权限配置等核心运维技能,旨在帮助读者快速上手并掌握这一企业级操作系统的日常管理。

weixin_29207149的博客 222

Java EE 互联网轻量级整合开发笔记-第四章MyBatis

MyBatis

weixin_43910265的博客 168

Matlab实战:水声信号DEMON谱分析从入门到精通(附完整源码)

本文详细介绍了使用Matlab进行水声信号DEMON谱分析的完整流程,从基础理论到实战应用,涵盖信号预处理、包络提取、频谱分析等关键步骤,并附完整源码。特别针对水声通信中的低信噪比环境,提供了多种优化方案和性能提升技巧,帮助读者快速掌握这一水下目标检测的核心技术。

gamma的博客 296

Java面试题系列——JavaSE面试题(Mybatis一)

Java面试题系列——JavaSE面试题(Mybatis一)

weixin_55229531的博客 5万+

Wireshark实战解析IEC 61850 GOOSE报文:智能变电站通信调试指南

网络协议分析是理解现代工业通信系统的基础,其核心原理在于对数据包的捕获、解码与解析。在电力自动化领域,IEC 61850标准定义了智能变电站内设备间高效、可靠的通信框架,其中GOOSE(通用面向对象变电站事件)协议因其基于以太网多播和快速重传机制,成为保护跳闸、联锁等关键信号传输的基石,其技术价值在于实现了微秒级延迟的高可靠性通信。掌握GOOSE报文的分析能力,对于现场调试、故障定位及系统验证至关重要。本文聚焦于使用Wireshark这一网络分析工具,深入解析GOOSE报文结构,涵盖从以太网帧头、协议标识到

weixin_34401479的博客 376

滚动时域优化方法

滚动时域优化(Receding Horizon Optimization, RHO),也被广泛称为模型预测控制(Model Predictive Control, MPC),是一种用于动态系统优化和控制的。其核心思想是“在每个当前时刻k,控制器只考虑未来一个(称为“预测时域”或“优化时域”,长度N)内的系统行为。(通过测量或估计得到)。(描述状态如何随输入和干扰变化)。(如果有,可能基于历史数据或假设)。在这个有限的未来时域[k, k+N-1]上,求解一个。这个优化问题的目标是找到一个。

m0_69522810的博客 2297

JAVASE进阶:高级写法——方法引用(Mybatis-Plus必学前置知识)

JAVASE进阶:高级写法——方法引用(Mybatis-Plus必学前置知识)

m0_52380556的博客 1509

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 578

用JavaSE简单入门MyBatis连接MySQL…

在Netbeans中新建一个  Java——Java应用程序  项目,其目录结构如下: 需要准备和下载的jar库: 1、mybatis-3.4.1.jar 2、mysql-connector-java-5.1.39-bin.jar(安装MySQL的时候,勾选安装Connector.J后会附带有,在MySQL       安装目录/Connector.J 5.1  里面) 添加好库后,就可以

flash胜龙的博客 2294

毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行

毕业设计:丹麦电力电价预测预测未来24小时的电价pytorch+lstm+历史特征和价格+时间序列 电价预测模型资源 完整代码数据可直接运行

356

架构师之HBase vs MongoDB 技术选型与场景决策实战案例

面对海量数据和高并发查询,该选 HBase 还是 MongoDB?本文为你提供完整的决策框架!从数据模型对比、架构解析、六大真实场景(电信 CDR、金融行情、广告点击流、电商商品、社交档案、内容管理)到性能、一致性、运维全面对比,助你在 PB 级时序数据和灵活查询之间做出精准选择!

肖哥弹架构博客 1101

一种java工程整合mybatis

1.Service public void 执行方法(参数){ try { sqlSession = MybatisUtils.getSqlSessionFactory().openSession(); Dao层= sqlSession.getMapper(Dao层.class); 执行方法 ...

qq_39529324的博客 427

16. SAP Fiori Elements 应用里图片字段(Image)的显示原理介绍

很多朋友向我反映,学习了 一段时间的 SAP Fiori Elements 开发,但是感觉整套体系对于自己来说还是个黑盒子,很多技术点,看了 SAP 官方帮助文档后,觉得自己懂了,但是一旦需要自己动手做一些东西出来时,又觉得一片茫然。 其实笔者自己也经历过这个过程。究其原因,还是大家对 Fiori Elements 一些技术细节没有理解,对 SAP 官方的知识点仅仅停留在记忆,甚至是死记硬背上面。 不过没有关系,本教程笔者会刻意设置一些练习,让大家动手,在实战中逐渐熟悉 Fiori Elements 这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 758

MyBatis学习笔记(1)-前期准备的学习

最近在学习使用MyBatis这个工具包来进行数据库开发,发现黑马程序员的一个资源分享网站做的特别好,视频课程讲的清楚又免费!链接地址备忘http://yun.itheima.com/course/41.html,推荐看着学习。 本文只是杂七杂八的记录了一些觉得必要注意的基础知识。 环境准备 Step: 1.安装JDK,我安装的是Java10 配置Java环境变量JAVA_HOME

Stephanie的专栏 786

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java中JavaSE与JavaEE的区别

JavaSE和JavaEE都是Java技术的重要组成部分,但它们在功能、用途和设计理念上都有所不同。JavaSE提供了基础的编程功能和API,适用于开发桌面和简单服务器端应用程序;而JavaEE则提供了企业级功能和API,适用于开发大型、分布式的企业级应用。在实际应用中,应根据项目需求选择合适的Java平台版本,并结合成熟的开发框架和工具来提高开发效率和代码质量。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章JavaSE与JavaEE的区别JAVAEE和项目开发——web实战案例。

ning的博客 3137

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JavaSE、JavaWeb、JavaEE、以及进阶所需要学习的知识内容

JavaSE: Java基础,我们入门所学的基础语法循环判断之后还有面向对象、网络编程、多线程、注解和反射、JVC、JUC等等。 学习地址:https://www.bilibili.com/video/BV12J41137hu JavaWeb: pojo层(pojo=entity=domain):实体类 dao层:业务逻辑层、直接操作数据库 service层:服务层、负责业务调度dao层、对外提供功能 servlet层:转发、重定向、控制页面的跳转 jsp/html层:web页面代码编写 搭建web项目,需

番茄Salad 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从 Javase 到 JavaWeb(学完javase基础之后你该继续学什么?)

学完 Java 基础之后,很多同学都会好奇:“怎么用 Java 写一个能在网页上访问的程序?”这就是JavaWeb要解决的问题。JavaWeb 简单来说,就是让你写的 Java 程序可以变成一个网站后端,能和用户在网页上进行交互,比如登录、注册、发布信息等等。页面展示:也就是我们看到的网页,按钮、输入框、图片等内容,通常由 HTML、CSS 和 JavaScript 来完成。后台处理。

snowfoootball的博客 891

Mybatis学习笔记

MyBatis 框架: MyBatis 是一个优秀的基于 java 的持久层框架,内部封装了 jdbc,开发者只需要关注 sql 语句 本身,而不需要处理加载驱动、创建连接、创建 statement、关闭连接,资源等繁杂的过程。MyBatis 通过 xml 或注解两种方式将要执行的各种 sql 语句配置起来,并通过 java 对象和 sql 的 动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。Spring 框架。

qq_52143611的博客 2240

Spring的基本配置和Spring与Mybatis的整合

Spring:               Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪...

CodeChen 7万+

JavaSE学习日志6(数据库CRUD与Mybatis)

测试类的作用:不用总是从main()方法入口执行程序了,可以加上@Test注解,使该类成为测试类入口来执行程序。修改:update 表名 set 需要修改的 where 之前数据(例:update student set id=4 where id=3;删除:delete from 表名 where 条件(例:delete from student where id = 3;用@Value(“${字段}”)注解能够找到配置文件中设置的值,然后在需要用的地方使用字段就可以了。

m0_73419206的博客 320

三篇文章速通JavaSE到SpringBoot框架 (下) Maven、 接口、MyBatis、Spring、SpringMVC、SpringBoot

Maven 非Maven项目的缺点 问题一: 项目中的jar包资源需要我们自己从网上下载后,手动导入到项目中使用,不好管理。 问题二: jar包版本控制麻烦 Maven是使用Java语编写的基于项目对象模型(POM)项目管理工具软件,开发者可通过小段描述信息来管理项目构建、报告和文档。使用Maven可以更好的帮助我们完成项目的管理。 Maven仓库 中央仓库(CentralRepository):Maven官方服务器。里面存放了绝大多数市面上流行的jar。允许用户注册后,上传自己的项目到官方服务器。网址在国

weixin_63625059的博客 2527

MyBatis框架学习

本文会讲述:框架简介;MyBatis框架的介绍与使用

攸攸太上的博客 1536

2017最新版JavaEE学习路线图

1.JavaSE阶段 2.JavaWeb基础 3.SSH开发框架 4.实战项目一 5.其它开发框架 6.其它常用技术 7.实战项目二 接下来我们对这七个阶段按上面的顺序进行详细的解读,以便大家更清晰的知道每一阶段的学习要求和学习重点,在文中,我们还会有相应的参考书籍推荐。 第一阶段:掌握JavaSE 该阶段是学习JavaEE的入门阶段,也是基础

Target的博客 1万+

JavaSE『学习笔记』

本教程以 JDK8 为主,新版本与新特性以介绍与使用为辅。

小哞^同^学的技术博客 1237

【Spring+SpringMVC+Mybatis】SSM框架的整合、思想、工作原理和优缺点的略微讲解

SSM框架的整合、思想、工作原理和优缺点的略微讲解

H1727548的博客 9901

【Mybatis】正式学习Mybatis前,你需要知道这些——

本文介绍了MyBatis框架的入门使用,主要包括: 准备工作 创建工程并添加MyBatis依赖 数据准备:创建用户表和实体类 配置数据库连接信息 第一个MyBatis代码 创建Mapper接口并使用@Mapper注解 通过@Select注解编写简单查询 测试方法 两种测试方式:单元测试类和启动类测试 解释@Mapper注解原理:MyBatis通过动态代理生成实现类 注意事项 遵循命名规范 理解MyBatis的代理机制 摘要概括了MyBatis入门的主要步骤,重点突出了配置方法、基本使用和测试验证,适合初学者

2301_81614213的博客 966
上一篇: 自用(如何在gitee推送个人项目?)
下一篇: JavaSE学习(Mybatis的第二、三种使用方式)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值