5、MyBatis框架——Mapper接口映射、给类起别名、MyBatis开启驼峰映射、MyBatis开启日志打印

news2024/12/22 23:11:21

目录

一、Mapper接口映射

1、创建数据库

2、搭建MVC分层结构

3、配置MyBatis全局参数

4、编辑DAO层接口

5、配置Mapper文件与DAO层绑定

(1)配置Mapper文件

(2)DAO层与Mapper文件标签的快速生成

6、代码测试

二、给类起别名

1、设置单个类别称typeAlias标签

2、批量设置别称package标签

3、Mapper映射文件修改

三、MyBatis开启驼峰映射

四、MyBatis开启日志打印

1、引入log4j日志依赖

2、log4j配置文件

3、在mybatis中开启日志


一、Mapper接口映射

不使用DAO层接口的实现类层,因为DAO层的实现类是用来实现SQL语句的,而在MyBatis框架中,SQL语句写在配置文件中,只需要将接口与配置文件连接即可操作SQL语句

1、创建数据库

CREATE DATABASE mybatisdatabase;
USE mybatisdatabase;
CREATE TABLE IF NOT EXISTS `admin`(
`uid` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(20),
`upassword` VARCHAR(20) NOT NULL,
`address` VARCHAR(10) NOT NULL
);

INSERT INTO `admin`(`username`,`upassword`,`address`) VALUES
('张三','123456','安徽合肥包河区'),
('李四','456789','安徽合肥高新区');

2、搭建MVC分层结构

3、配置MyBatis全局参数

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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://127.0.0.1:3306/mybatisdatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="admin-mapper.xml"/>
    </mappers>
</configuration>

4、编辑DAO层接口

package com.mybatis.dao;

import com.mybatis.entity.Admin;

import java.util.List;

public interface AdminDao {
    public int insertAdmin(Admin admin);
    public int deleteAdmin(int uid);
    public int updateAdmin(Admin admin);
    public Admin selectOne(int uid);
    public List<Admin> selectAll();
}

5、配置Mapper文件与DAO层绑定

(1)配置Mapper文件

namespac命名空间属性值为DAO层接口的全限定名

SQL语句标签的id属性值对应接口中的方法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.dao.AdminDao">
    <select id="selectOne" resultType="com.mybatis.entity.Admin">
        select * from admin where uid = #{uid}
    </select>

    <select id="selectAll" resultType="com.mybatis.entity.Admin">
        select * from admin
    </select>

    <insert id="insertAdmin" parameterType="com.mybatis.entity.Admin" useGeneratedKeys="true" keyColumn="uid" keyProperty="uid">
        insert into `admin`(`username`,`upassword`,`address`) values (#{username},#{upassword},#{address})
    </insert>

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

    <update id="updateAdmin" parameterType="com.mybatis.entity.Admin">
        update admin set username = #{username},upassword = #{upassword} where uid = #{uid}
    </update>
</mapper>

(2)DAO层与Mapper文件标签的快速生成

鼠标点击方法名--->ALT+Enter--->Generate statement

6、代码测试

package com.mybatis;

import com.mybatis.dao.AdminDao;
import com.mybatis.entity.Admin;
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.Before;
import org.junit.Test;

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


public class AppTest
{
    //创建SqlSessionFactory工厂变量
    SqlSessionFactory sqlSessionFactory;

    @Before
    public void init(){
        System.out.println("执行init方法");
        InputStream resourceAsStream;
        try {
            resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    }

    @Test
    public void selectOne(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        System.out.println("-----根据uid查询用户信息-----");
        //获取接口实现类(多态)
        //通过动态代理方式获得一个代理对象(实现类)
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //通过接口调用方法
        Admin admin = adminDao.selectOne(1);
        System.out.println("admin = " + admin);
        sqlSession.close();
    }

    @Test
    public void selectAll(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        System.out.println("-----查询所有-----");
//        获取动态代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //通过接口调用方法
        List<Admin> adminList = adminDao.selectAll();
        System.out.println("adminList = " + adminList);
        sqlSession.close();
    }

    @Test
    public void addAdmin(){
        //创建一个SqlSession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建Admin对象
        Admin admin = new Admin();
        admin.setUsername("老六");
        admin.setUpassword("147258");
        admin.setAddress("山东曹县");
        //获得动态代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //通过接口调用方法
        int line = adminDao.insertAdmin(admin);
        System.out.println("line = " + line);
        //手动提交事务
        sqlSession.commit();
        //关闭资源
        sqlSession.close();
    }

    @Test
    public void deleteAdmin(){
        //开启一个SqlSession会话
        //开启自动提交事务
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取动态代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //通过接口调用方法
        int line = adminDao.deleteAdmin(3);
        System.out.println("line = " + line);
        //关闭资源
        sqlSession.close();
    }

    @Test
    public void updateAdmin(){
        //开启一个SqlSession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建Admin对象
        Admin admin = new Admin();
        admin.setUsername("老四");
        admin.setUpassword("666666");
        admin.setUid(2);
        //获取动态代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        //通过接口调用方法
        int line = adminDao.updateAdmin(admin);
        System.out.println("line = " + line);
        //手动提交事务
        sqlSession.commit();
        //关闭资源
        sqlSession.close();
    }
}

二、给类起别名

在mybatis全局配置文件中<configuration>标签下使用typeAliases标签设置类的别名

1、设置单个类别称typeAlias标签

 <typeAliases>
        <typeAlias type="com.mybatis.entity.Admin" alias="admin"></typeAlias>
        <typeAlias type="com.mybatis.dao.AdminDao" alias="adminDao"></typeAlias>
    </typeAliases>

2、批量设置别称package标签

使用包名的方式给包中所有的类设置别名,默认别名为类名的首字母小写

        Admin ---> admin

        AdminDao ---> adminDao

<typeAliases>
        <package name="com.mybatis.entity"/>
        <package name="com.mybatis.dao"/>
    </typeAliases>

3、Mapper映射文件修改

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.dao.AdminDao">
    <select id="selectOne" resultType="com.mybatis.entity.Admin">
        select * from admin where uid = #{uid}
    </select>

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

    <insert id="insertAdmin" parameterType="admin" useGeneratedKeys="true" keyColumn="uid" keyProperty="uid">
        insert into `admin`(`username`,`upassword`,`address`) values (#{username},#{upassword},#{address})
    </insert>

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

    <update id="updateAdmin" parameterType="admin">
        update admin set username = #{username},upassword = #{upassword} where uid = #{uid}
    </update>
</mapper>

三、MyBatis开启驼峰映射

 开启驼峰映射后,只要数据库字段名与实体类属性名字母相同,无论数据库字段名中加多少下划线都可以在实体类中识别成驼峰命名:

在mybatis全局配置文件中<configuration>标签下的使用settings标签设置setting开启驼峰映射

    <settings>
<!--        开启驼峰映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

四、MyBatis开启日志打印

可设置打印级别,设置控制台打印的内容

1、引入log4j日志依赖

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

2、log4j配置文件

在resources目录下新建properties文件配置log4j信息

#打印日志的级别:可控制打印信息,哪些打印,哪些不打印
#Console:打印窗口
log4j.rootLogger=DEBUG,Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
#设置打印格式
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#设置打印信息
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#打印日志级别:设置打印级别只要不是ERROR级别就不打印
log4j.logger.org.apache=ERROR
log4j.logger.org.mybatis=ERROR
log4j.logger.org.springframework=ERROR

#这个需要
log4j.logger.log4jdbc.debug=ERROR
log4j.logger.com.gk.mapper=ERROR
log4j.logger.jdbc.audit=ERROR
log4j.logger.jdbc.resultset=ERROR
#这个打印SQL语句非常重要
log4j.logger.jdbc.sqlonly=DEBUG
log4j.logger.jdbc.sqltiming=ERROR
log4j.logger.jdbc.connection=FATAL

3、在mybatis中开启日志

在mybatis全局配置文件中<configuration>标签下的使用settings标签设置setting开启日志打印

 <settings>
<!--        开启日志打印-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>

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

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

相关文章

python|第四章考试题及练习题

本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第四章考试题及练习题的学习记录。 一、考试题 1、四位玫瑰数 问题描述&#xff1a; 四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。‪‬‪‬‪‬‪‬…

【云原生-Docker】docker容器自定义DNS解析

描述 在特定的情况下&#xff0c;或者在网络策略特殊定义下&#xff0c;需要自定义dns进行域名访问&#xff0c;在宿主机上配置了域名解析&#xff0c;对于docker容器无效。对于局域网内的域名解析&#xff0c;Docker 需要到 Docker 容器中配置 hosts 文件。 实现方式 docke…

使用Pandas也可以进行数据可视化

数据可视化是数据分析的一个重要方面&#xff0c;它提供了一种理解数据并从中得出有意义见解的方法。Pandas 是最常见的于数据分析的 Python 库&#xff0c;它基于Matplotlib扩展了一些常用的可视化图表&#xff0c;可以方便的调用&#xff0c;本篇文章就让我们看看有哪些图表可…

使用JavaScript+Selenium玩转Web应用自动化测试

自动化测试 在软件开发过程中, 测试是功能验收的必要过程, 这个过程往往有测试人员参与, 提前编写测试用例, 然后再手动对测试用例进行测试, 测试用例都通过之后则可以认为该功能通过验收. 但是软件中多个功能之间往往存在关联或依赖关系, 某一个功能的新增或修改可能或影响到…

牛客网Python篇数据分析习题(四)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…

每日学术速递2.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.Type-Aware Decomposed Framework for Few-Shot Named Entity Recognition 标题&#xff1a;识别少数命名实体的类型感知分解框架 作者&#xff1a;Yongqi Li, Tieyun Qian 文章链…

Flink 连接流详解

连接流 1 Union 最简单的合流操作&#xff0c;就是直接将多条流合在一起&#xff0c;叫作流的“联合”&#xff08;union&#xff09;。联合操作要求必须流中的数据类型必须相同&#xff0c;合并之后的新流会包括所有流中的元素&#xff0c;数据类型不变。这种合流方式非常简…

tensorflow.js 对视频 / 直播人脸检测和特征点收集

前言&#xff1a;这里要介绍的是 Tensorflow.js 官方提供的两个人脸检测模型&#xff0c;分别是 face-detection 和 face-landmarks-detection。他们不但可以对视频中的人间进行精确定位&#xff0c;而且还能对当前设备 (手机 / 电脑摄像头) 采集的直播流实时监测人脸。所以这些…

大华城市安防监控系统平台管理存在任意文件下载漏洞

大华城市安防监控系统平台管理存在任意文件下载漏洞1.大华城市安防监控系统平台管理存在任意文件下载漏洞1.1.漏洞描述1.2.漏洞影响1.3.FOFA2.漏洞复现2.1.登录页面2.2.抓包1.大华城市安防监控系统平台管理存在任意文件下载漏洞 1.1.漏洞描述 大华城市安防监控系统平台管理存在…

企业级数据平台为什么要“可观测”? | StartDT Hackathon

近日&#xff0c;奇点云黑客马拉松“StartDT Hackathon”正式收官。 这期黑客松以“可观测性”为核心选题&#xff0c;旨在通过加强数据云平台DataSimba的可观测性&#xff0c;提升企业用户“自交付、自运维”的易用性和友好度&#xff0c;降低运维门槛&#xff0c;提升发现、…

4.7 反射

文章目录1.概述2.为什么需要反射3.反射需要用到的API3.1 获取字节码对象3.2 常用方法4.反射的应用4.1 创建 : 测试物料类4.2 练习 : 获取类对象4.3 练习 : 类获取构造方法4.4 练习 : 获取成员方法4.5 练习&#xff1a;获取成员变量4.6 练习 : 创建对象4.7 熟悉API4.7.1 创建物科…

定时任务框架xxl-job及quartz

本文主要介绍分布式定时任务框架xxl-job&#xff0c;本文首先会对xxl-job做一个基本的介绍&#xff0c;接着将xxl-job与quartz做一个比较&#xff0c;最后就是介绍xxl-job调度的详细过程。 xxl-job官方文档 xxl-job的介绍 xxl-job是一个开源的分布式定时任务框架&#xff0c;其…

若依前后端分离版集成nacos

根据公司要求&#xff0c;需要将项目集成到nacos中&#xff0c;当前项目是基于若依前后端分离版开发的&#xff0c;若依的版本为3.8.3&#xff0c;若依框架中整合的springBoot版本为2.5.14。Nacos核心提供两个功能&#xff1a;服务注册与发现&#xff0c;动态配置管理。 一、服…

【django项目开发】用户登录后缓存权限到redis中(十)

这里写目录标题一、权限的数据的特点二、首先settings.py文件中配置redis连接redis数据库一、权限的数据的特点 需要去数据库中频繁的读和写&#xff0c;为了项目提高运行效率&#xff0c;可以把用户的权限在每次登录的时候都缓存到redis中。这样的话&#xff0c;权限判断的中…

基于投票策略的室内家具检测:VoteNet、BRNet 最全总结

文章目录一、基本概述二、VoteNet三、BRNet四、最新研究成果一、基本概述 最近几年&#xff0c;基于点云的3D目标检测是自动驾驶场景研究的热点。但是&#xff0c;自动驾驶主要聚焦于室外场景。本文&#xff0c;我们主要介绍两篇文章&#xff08;VoteNet&#xff0c;BRNet&…

HTML第一章总结

<h1~h6>标题标签 <br />换行标签&#xff08;单&#xff09; <p>分段标签 <strong>加粗标签 <em>倾斜标签 <del>删除线标签 <ins>下划线标签 <div>独占一行的布局标签 <span>进行分割的布局标签 <img>图片标签&a…

Go-micro[windows]安装以及踩坑

一.首先安装protochttps://github.com/protocolbuffers/protobuf/releases进入网址&#xff0c;点击tag&#xff0c;然后选择v3版本进入之后找到随后下载安装然后将protoc解压缩到任意目录&#xff08;自己选&#xff09;再将protoc/bin的路径放置环境变量中二.获取protoc-gen-…

RK3568 UBOOT的问题解决案例

一、UBOOT下的波特率 原始的波特率为1500000,串口工具虽然可以设置任意波特率&#xff0c;但工作时不正常。 输入不了。本文描述如何修改成115200。 二、确认UBOOT的配置 ./build.sh uboot processing option: uboot Start building uboot TARGET_UBOOT_CONFIGrk3568## make …

【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历

如有错误&#xff0c;欢迎指正。 如有不理解的地方&#xff0c;可以私信问我。 文章目录题目1&#xff1a;根据二叉树创建字符串题目实例思路与解析代码实现题目2&#xff1a;二叉树的层序遍历题目思路与解析代码实现题目1&#xff1a;根据二叉树创建字符串 点击进入题目链接—…

C++——多态|虚函数|重写|虚表

文章目录1. 多态的概念1.1 概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的三个例外&#xff1a;2.4 普通调用和多态调用&#xff1a;2.5 C11 override 和 final2.6 重载、虚函数的覆盖(重写)、隐藏(重定义)的对比3. 抽象类(有关纯虚函数)3.1 …