MyBatis第一章 搭建MyBatis的运行环境

news2024/10/6 10:32:55

这里写自定义目录标题

  • 一 创建Maven工程
    • 1 打包方式设置为jar
    • 2 引入依赖进去
  • 二 创建MyBatis的核心配置文件
    • 1 配置核心文件
    • 2 创建mapper接口
    • 3 创建mabatis的映射文件
    • 4 测试文件的写法
    • 5 需要代码可以访问gitee仓库去看看
    • 6 log4j的日志功能
  • 三 先改方法,后改映射文件
    • 1 Test注解的作用
    • 2 增加修改用户信息的测试代码
    • 3 查找用户信息的代码
    • 4 RESULT

在这里插入图片描述

结构图

一 创建Maven工程

1 打包方式设置为jar

2 引入依赖进去

二 创建MyBatis的核心配置文件

框架就是jar包加上配置文件
核心配置文件习惯上命名为
mybatis-config.xml
整合Spring框架后,这个配置文件可以省略

1 配置核心文件

<?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">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eshop"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件
    复数标签套单数标签的格式

    -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

注意:核心文件中可能会报一个字符集设置的错误

Unknown initial character set index '255' received from server. Initial client character

解决的话,就在后面加上一个中加入一个字符设置

dbc:mysql://localhost:3306/eshop?useUnicode=true&amp;characterEncoding=utf8

2 创建mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

package com.xyt.mabatis.mapper;

public interface UserMapper {
    int insertUser();
}

3 创建mabatis的映射文件

ORM:对象关系映射
对象:java的实体类对象
关系:关系型数据库
映射:两者之间对应的关系
在这里插入图片描述
类的实例化对象,描述的是一个具体的事务。表中的一行记录

<?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.xyt.mybatis.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser">
        insert into t_user values (1,'张三','123',22,'男','1234567@qq.com')
    </insert>

</mapper>

注意:这个字段名,一定要和数据库里的字段名对应上

4 测试文件的写法

在这里插入图片描述

在这里插入图片描述

package com.xyt.mybatis.test;

import com.xyt.mybatis.mapper.UserMapper;
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.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;


public class MabitsTest1 {

    /**
     * SqlSession默认不自动提交事务,若需要自动提交事务
     * 可以使用SqlSessionFactory.openSession(true);
     */


    @Test
    public void testMyBatis() throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //测试功能
        int result = mapper.insertUser();
        //提交事务
        sqlSession.commit();
        System.out.println("result:"+result);
    }


}

执行两次,数据库里面就多了两条数据
在这里插入图片描述

5 需要代码可以访问gitee仓库去看看

https://gitee.com/wang-sanfeng123/MyBatisTest

6 log4j的日志功能

在子pom中配置这个log4j文件

<!-- log4j日志 -->
<dependency> 
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.7</version> 
 </dependency>

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

日志·的级别
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详
在配置日志相关文件时
如果报错,就填写相关信息进去

在这里插入图片描述
日志运行后,生成的信息如下图所示

DEBUG 05-14 21:53:09,963 ==>  Preparing: insert into t_user values (6,'张三','123',22,'男','1234567@qq.com') (BaseJdbcLogger.java:137) 
DEBUG 05-14 21:53:09,986 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 05-14 21:53:09,998 <==    Updates: 1 (BaseJdbcLogger.java:137) 
result:1

体现了执行得sql语句,和受影响的行数

三 先改方法,后改映射文件

1 Test注解的作用

@Test
注解是JUnit测试的基础,JUnit 4的优势就在于支持了注解。
@Test
的使用 是该方法可以不用main方法调用就可以测试出运行结果,是一种测试方法,

一般函数都需要有main方法调用才能执行,注意被测试的方法必须是public修饰的。

2 增加修改用户信息的测试代码

public  void  testUpdate() throws IOException{
        InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory
                =new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =sqlSessionFactory.openSession(true);
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser();
    }
DEBUG 05-14 23:07:28,488 ==>  Preparing: DELETE from t_user where username='lisi'; (BaseJdbcLogger.java:137) 
DEBUG 05-14 23:07:28,524 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 05-14 23:07:28,546 <==    Updates: 1 (BaseJdbcLogger.java:137) 

3 查找用户信息的代码

在这里插入图片描述
resultType:数据库字段和属性的个数一样

java.lang.NoSuchMethodError: 'boolean org.apache.log4j.Logger.isTraceEnabled()

 <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>

结果

DEBUG 05-15 01:24:01,095 ==>  Preparing: select * from t_user where id=6; (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:24:01,136 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:24:01,173 <==      Total: 1 (BaseJdbcLogger.java:137) 
User{id=6, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}

4 RESULT

DEBUG 05-15 01:33:26,591 ==>  Preparing: select * from t_user where id=6; (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:33:26,626 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:33:26,650 <==      Total: 1 (BaseJdbcLogger.java:137) 
User{id=6, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
DEBUG 05-15 01:33:26,652 ==>  Preparing: select * from t_user; (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:33:26,653 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 05-15 01:33:26,659 <==      Total: 8 (BaseJdbcLogger.java:137) 
User{id=1, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=2, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=4, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=6, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=7, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=8, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=9, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}
User{id=10, username='张三', password='123', age=22, sex='男', email='1234567@qq.com'}

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

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

相关文章

Qt开发笔记(Qt5.9.9下载安装环境搭建win10)

#1 Qt下载网站&#xff08;国内、国外镜像&#xff09; #2 Qt5.9.9安装选项 #3 配置系统环境变量 #4 创建测试项目 #1 Qt下载网站&#xff08;国内、国外镜像&#xff09; 官方下载地址&#xff08;慢&#xff09;&#xff1a;http://download.qt.io/ 国内镜像网站 这里给大家…

私有jar包发布到maven中央仓库

一、注册Jira Sonatype JIRAhttps://issues.sonatype.org/secure/Dashboard.jspa 二、新建issue 提交后&#xff0c;等待5-10分钟&#xff0c;会收到中央机器人的评论&#xff0c;如下&#xff1a; 在这里&#xff0c;我没有自己的域名&#xff0c;此时&#xff1a; 1、机器人…

网络编程 lesson2 TCP基础编程

目录 sockt介绍 socket类型 socket所在位置 端口号&#xff08;重点&#xff09; 端口号作用 端口号范围 字节序&#xff08;面试常见&#xff09; 大端序 小端序 验证当前主机字节序 字节序转换和IP转换函数接口&#xff08;常用&#xff09; TCP编程 函数接口 …

[230517] TPO71 | 2022年托福阅读真题第5/36篇 | Minoan Palaces | 14:51~16:00+22:00~23:20

7102 Minoan Palaces 目录 7102 Minoan Palaces 正文 题目 Paragraph 1 问题 1 Paragraph 2 问题 2 Paragraph 3 问题 3 4 Paragraph 4 问题 5 6 Paragraph 5 问题 7 8 Paragraph 2-问题9 全篇-问题10 正确率&#xff1a;7/10 正文 Paragraph 1 The…

JavaScript实现输入指定行数,输出三角形的代码

以下为实现输入指定行数&#xff0c;输出三角形的程序代码和运行截图 目录 前言 一、实现输入指定行数&#xff0c;输出三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b;…

HCIP周日ISIS

ISIS&#xff1a;中间系统到中间系统 ES&#xff1a;终端系统 ES-IS&#xff1a;终端系统到中间系统 ISIS是一种链路状态协议&#xff0c;使用SPF算法 早期的ISIS是基于CLNP&#xff08;无连接网络协议&#xff09;而开发的&#xff0c;为了继续追逐TCP/IP的发展&#xff0…

关于getchar的用法及实例解析

一、getchar()函数是什么&#xff1f; getchar()函数是获取一个字符。说到这里就有人问了&#xff0c;为什么他的返回类型是int&#xff1f; 因为实际上EOFend of file&#xff08;-1&#xff09;&#xff0c;EOF实际上就等于-1。当你返回失败的时候返回的是-1&#xff0c;所以…

计算机网络(四上)——网络层!!!重中之重

先来个整章的大框架&#xff0c;看起来也没有多少东西&#xff08;bushi&#xff09;。 这篇文章&#xff0c;就先写 一、网络层的功能 互联网在网络层的设计思路是&#xff0c;向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务 1.1.异构网络互联 1.网络互联是…

Springboot +Flowable,流程表单应用之动态表单

一.简介 整体上来说&#xff0c;我们可以将Flowable 的表单分为三种不同的类型&#xff1a; 动态表单 这种表单定义方式我们可以配置表单中每一个字段的可读性、可写性、是否必填等信息&#xff0c;不过不能定义完整的表单页面。外置表单 外置表单我们只需要定义一下表单的 k…

kafka 从入门到精通

kafka 从入门到精通 安装 zookeeper模式 创建软件目录 mkdir /opt/soft cd /opt/soft下载 wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz解压 tar -zxvf kafka_2.13-3.4.0.tgz 修改目录名称 mv kafka_2.13-3.4.0 kafka配置环境变量 vim /etc/pr…

C51基础之单片机编程中通用指针和定向指针

通用指针和定向指针 参考资料&#xff1a;Keil > Help > uVision Help > Cx51 Compiler User’s Guide > Language Extensions > Pointers 一、Cx51指针的几种用法 int *ptr; /* 指向&#xff1a;任意空间的int变量&#xff0c; 存储在&…

什么是Java中的finalize()方法?它有什么作用

在Java中&#xff0c;finalize()方法是一个由Object类定义的方法&#xff0c;用于在对象被垃圾回收器回收之前执行一些清理工作。finalize()方法是一个被保护的方法&#xff0c;可以被子类重写&#xff0c;但是通常情况下不需要显式地调用该方法。 finalize()方法的作用 在Jav…

MYSQL原理、设计与应用

概述 数据库(Database&#xff0c;DB)是按照数据结构来组织、存储和管理数据的仓库&#xff0c;其本身可被看作电子化的文件柜&#xff0c;用户可以对文件中的数据进行增删改查等操作。 数据库系统是指在计算机系统中引入数据库后的系统&#xff0c;除了数据库&#xff0c;还…

首次开通社交账号亲自招聘人才 周星驰都在关注的Web3 你知道是什么吗?

60岁的“星爷”周星驰要进军元宇宙了&#xff1f; 谁能想到&#xff0c;向来低调的他首次注册社交账号&#xff0c;竟是为了发布一条招人信息&#xff0c;挑选的还不是新片男女主角&#xff0c;而是Web3人才&#xff0c;一脚跨界到了互联网科技领域。 今天一整天&#xff0c;…

2022-2023 年度广东省职业院校学生专业技能大赛中职组“网络安全”赛项竞赛任务书(样题)

2022-2023 年度广东省职业院校学生专业技能大赛中职组“网络安全”赛项竞赛任务书&#xff08;样题&#xff09; 一、竞赛时间 总计&#xff1a;210 分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A 模块 A-1 登录安全加固 90 分钟 200…

node笔记_express结合formidable实现前后端的文件上传

文章目录 ⭐前言⭐安装http请求的文件解析依赖库&#x1f496; 安装 formidable&#x1f496; node formidable接受formData上传参数 ⭐上传的页面搭建&#x1f496; vue2 element upload&#x1f496; node 渲染 上传文件 ⭐后端生成api上传文件到指定目录&#x1f496;完整的…

【Spring篇】Spring入门案例

&#x1f353;系列专栏:Spring系列 &#x1f349;个人主页:个人主页 目录 一、IOC入门案例 1.入门案例思路分析 2.入门案例代码实现 二、DI入门案例 1.入门案例思路分析 2.入门案例代码实现 三、图书推荐 介绍完Spring的核心概念后&#xff0c;接下来我们得思考一个问题…

2023年安徽省中职网络安全跨站脚本攻击

B-4:跨站脚本攻击 任务环境说明: √ 服务器场景:Server2125(关闭链接) √ 服务器场景操作系统:未知 √ 用户名:未知 密码:未知 1.访问服务器网站目录1,根据页面信息完成条件,将获取到弹框信息作为flag提交; 通过尝试知道这里存在xss漏洞

【CVE-2022-26134】Confluence OGNL RCE 漏洞

漏洞描述 远程攻击者在未经身份验证的情况下&#xff0c;可构造OGNL表达式进行注入&#xff0c;实现在Confluence Server或Data Center上执行任意代码。 影响版本 Confluence Server and Data Center > 1.3.0 Confluence Server and Data Center < 7.4.17 Confluenc…

九头蛇3389远程爆破

1.初学KALI hydra&#xff08;海德拉&#xff09;。 实验环境&#xff1a;VM16,虚拟机两台&#xff0c;Windows10系统&#xff0c;KALI系统&#xff0c;用nmap查看目标端口是否开放。 2.在KALI虚拟机上面使用命令nmap查看WIN10的3389端口是否打开。 3.在KALI虚拟机上面建立用…