当前位置: 首页 > news >正文

MyBaits

MyBaits

  • MyBaits的jar包介绍
  • MyBaits的入门案例
    • 创建实体
  • java日志处理框架
    • 常用的日志处理框架
    • Log4j的日志级别
  • Mybatis配置的完善
    • Mybatis的日志管理
    • 使用别名alias
      • 方式一
      • 方式二
  • SqlSession对象下的常用API
    • 查询操作
  • Mapper动态代理
  • Mapper 动态代理规范
    • 查询所有用户
    • 根据用户ID查询用户
  • Mapper动态代理模式下的多参数处理
    • @Param注解传参法
    • POJO传参法

MyBaits的jar包介绍

在这里插入图片描述
在这里插入图片描述

MyBaits的入门案例

创建实体

E:\java\MyBaits\mybatisdemo\src\com\bjsxt\pojo\Users.java

java日志处理框架

常用的日志处理框架

在这里插入图片描述
Log4j: Log For Java(Java 的日志) 是 Apache 提供的一个开源的 Java主流日志框架

Log4j的日志级别

在这里插入图片描述

Mybatis配置的完善

Mybatis的日志管理

使用别名alias

Mybatis 中的别名配置它只和 XML 配置有关, 只用来减少类完全限定名的多余部分。注
意:别名都是大小写不敏感的。

方式一

使用 typeAlias 指定单个类的别名

<typeAliases><typeAlias type="com.bjsxt.pojo.Users" alias="u"/>
</typeAliases>
<!--注意该标签的顺序,放在<settings>标签后面,具体顺序查看Ctrl+<configuration>-->
<select id="selectUsersById" parameterType="int" resultType="u">select * from users where userid = #{suibian}
</select>

表示用u来代替com.bjsxt.pojo.Users

方式二

使用package指定某个包下所有类的默认别名

<typeAliases><package name="com.bjsxt.pojo"/>
</typeAliases>

引入后的映射文件

<select id="selectUsersById" parameterType="int" resultType="users">select * from users where userid = #{suibian}
</select>

这段代码的主要意思呢就是给com.bjsxt.pojo这个包结构下所有的类都起一个别名这个别名就是这个类名的小写字母,以后就可以用小写字母来代替这个包结构了。

eg:com.xxx.xxx.GoodsName就可以替换为goodsnamecom.xxx.xxx.GoodsNumber就可以替换为goodsnumber

SqlSession对象下的常用API

查询操作

1.E:\java\MyBaits\mybatisdemo\src\com\bjsxt\mapper\UsersMapper.xml

<!--    根据用户名与用户性别查询用户,用集合返回--><select id="selectUsersByNameAndSex" resultType="users">select * from users where username = #{name} and usersex = #{sex}</select>
</mapper>
//2.E:\java\MyBaits\mybatisdemo\src\com\bjsxt\dao\UsersDao.javaMap<Integer,Users> selectUsersByNameAndSex(String username, String usersex);
//3.E:\java\MyBaits\mybatisdemo\src\com\bjsxt\dao\impl\UsersDaoImpl.java(省略了UsersDao.java)@Overridepublic Map<Integer, Users> selectUsersByNameAndSex(String username, String usersex) {SqlSession sqlSession = MybatisUtils.getSqlSession();Map<String,String> param = new HashMap<>();param.put("name",username);//要和UserMapper.xml中username = #{name} and usersex = {sex}对应param.put("sex",usersex);Map<Integer, Users> users = sqlSession.selectMap("com.bjsxt.mapper.UserMapper.selectUsersByNameAndSex", param, "userid");return users;}
//4.E:\java\MyBaits\mybatisdemo\src\com\bjsxt\service\serviceimpl\UsersServiceImpl.java
@Overridepublic Map<Integer, Users> findUsersByNameAndSex(String username, String usersex) {SqlSession sqlSession = MybatisUtils.getSqlSession();Map<Integer, Users> integerUsersMap = null;try {UsersDaoImpl usersDao = new UsersDaoImpl();integerUsersMap = usersDao.selectUsersByNameAndSex(username, usersex);} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {MybatisUtils.closeSqlSession();}return integerUsersMap;}
//5.测试
@Testpublic void findUsersByNameAndSex(){UsersServiceImpl usersService = new UsersServiceImpl();Map<Integer, Users> usersByNameAndSex = usersService.findUsersByNameAndSex("潘海宸", "男");Set<Integer> integers = usersByNameAndSex.keySet();for (Integer key:integers){Users users = usersByNameAndSex.get(key);System.out.println(key + "\t" + users.getUserid() + "\t" + users.getUsername() + "\t" + users.getUsersex());}}

Mapper动态代理

在 MyBatis 中提供了另外一种 Dao 层的实现方式,既:Mapper 动态代理(或称为接口
绑定)的操作方式。这种方式下程序员只需要写 Dao 接口,不需要创建 Dao 的接口实现类,
Mybatis 会自动生成接口实现类的代理对象。在 Dao 层我们只要创建接口与映射配置文件即
可。这种方式可以大大简化 Dao 层的代码结构,是在开发中最常见的使用方式。

Mapper 动态代理规范

  • 接口名称需要与映射配置文件名称相同
  • 映射配置文件中 namespace 必须是接口的全名
  • 接口中的方法名和映射配置文件中的标签的 id 一致
  • 接口中的返回值类型和映射配置文件中的 resultType的指定类型一致

注意:引入mapper映射配置文件时mapper标签内有所不同,需要用package标签

<!--引入 Mapper 映射配置文件-->
<mappers><package name="com.bjsxt.mapper"/>
</mappers>

查询所有用户

1.修改映射配置文件

<!--查询所有用户-->
<select id="selectUsersAll" resultType="users">select * from users
</select>

2.修改UserMapper接口添加抽象方法

public interface UsersMapper {
List<Users> selectUsersAll();
}

3.创建业务层接口

public interface UsersService {
List<Users> findUsersAll();
}
  1. 创建业务层接口实现类
    //可以通过接口的名字定位到映射配置文件,所以要求映射配置文件里面的namespace属性的值要和使用接口的全名相同;定位到映射配置文件后,根据方法名定位到要2使用的标签,所以方法名要和id的值相同。这样就能执行标签里的Sql语句了
 public List<Users> findUsersAll() {List<Users> list = null;SqlSession sqlSession = MybatisUtils.getSqlSession();try {//getMapper 方法的作用是根据给定的接口的 Class 对象,生成该接口的接口实现类的代理对象UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);//可以通过接口的名字定位到映射配置文件,所以要求映射配置文件里面的namespace属性的值要和使用接口的全名相同;//定位到映射配置文件后,根据方法名定位到要2使用的标签,所以方法名要和id的值相同。这样就能执行标签里的Sql语句了list = mapper.selectUsersAll();} catch (Exception e) {sqlSession.rollback();e.printStackTrace();} finally {MybatisUtils.closeSqlSession();}return list;}

5.测试

@Testpublic void findUsersAll(){UsersServiceImpl usersService = new UsersServiceImpl();List<Users> usersAll = usersService.findUsersAll();Iterator<Users> iterator = usersAll.iterator();while (iterator.hasNext()){Users next = iterator.next();System.out.println(next.toString());}}

根据用户ID查询用户

  1. 修改映射配置文件
<select id="selectUsersById" parameterType="_int" resultType="users">select * from users where userid = #{id}
</select>
  1. 修改UsersMapper接口添加抽象方法
Users selectUsersById(int id);
  1. 修改业务层接口
Users findUsersById(int id);
  1. 修改业务层接口实现类
 @Overridepublic Users findUsersById(int id) {SqlSession sqlSession = MybatisUtils.getSqlSession();Users users = null;try {UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);users = mapper.selectUsersById(id);} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {MybatisUtils.closeSqlSession();}return users;}
  1. 测试
@Testpublic void findUsersById(){UsersServiceImpl usersService = new UsersServiceImpl();Users user = usersService.findUsersById(2);System.out.println(user.toString());}

Mapper动态代理模式下的多参数处理

@Param注解传参法

注解中@param(“…”)中的参数代表的是Mapper映射文件中#{…}里面的值。

  1. 修改映射配置文件
<!--根据用户姓名与性别查询用户,使用@Param 注解传参法-->
<select id="selectUsersAnnParam" resultType="users">select * from users where username = #{name} and usersex= #{sex}
</select>
  1. 修改UsersMapper接口添加抽象方法
List<Users> selectUsersAnnParam(@Param("name") String username,@Param("sex") String usersex);
  1. 修改业务层接口
List<Users> findUsersAnnParam(@Param("name") String username1, @Param("sex") String usersex);
  1. 修改业务层接口实现类
@Overridepublic List<Users> findUsersAnnParam(String username1, String usersex) {SqlSession sqlSession = MybatisUtils.getSqlSession();List<Users> list = null;try {UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);list = mapper.selectUsersAnnParam(username1, usersex);} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {MybatisUtils.closeSqlSession();}return list;}
  1. 测试
@Testpublic void findUsersAnnParam(){UsersServiceImpl usersService = new UsersServiceImpl();List<Users> user = usersService.findUsersAnnParam("潘海宸", "男");Iterator<Users> iterator = user.iterator();while (iterator.hasNext()){Users next = iterator.next();System.out.println(next.toString());}

POJO传参法

在 Mapper 动态代理中也可以使用 POJO 作为传递参数的载体,在 SQL 语句中绑定参数
使用 POJO 的属性名作为参数名即可。此方式推荐使用。

  1. 修改映射配置文件
<!--根据用户姓名与性别查询用户,使用 POJO 传参法-->
<select id="selectUsersPOJOParam" resultType="users">select * from users where username = #{username} and usersex=#{usersex}
</select>
  1. 修改UsersMapper接口添加抽象方法
List<Users> selectUsersPOJOParam(Users users);
  1. 修改业务层接口
 List<Users> findUsersPOJOParam(Users users);
  1. 修改业务层接口实现类
@Overridepublic List<Users> findUsersPOJOParam(Users users) {SqlSession sqlSession = MybatisUtils.getSqlSession();List<Users> list = null;try {UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);list = mapper.selectUsersPOJOParam(users);} catch (Exception e) {e.printStackTrace();sqlSession.rollback();} finally {MybatisUtils.closeSqlSession();}return list;}
  1. 测试
@Testpublic void selectUsersPOJOParam(){UsersServiceImpl usersService = new UsersServiceImpl();Users user = new Users();user.setUsername("潘海宸");user.setUsersex("男");List<Users> usersPOJOParam = usersService.findUsersPOJOParam(user);Iterator<Users> iterator = usersPOJOParam.iterator();while (iterator.hasNext()){Users next = iterator.next();System.out.println(next.toString());}}

相关文章:

MyBaits

MyBaitsMyBaits的jar包介绍MyBaits的入门案例创建实体java日志处理框架常用的日志处理框架Log4j的日志级别Mybatis配置的完善Mybatis的日志管理使用别名alias方式一方式二SqlSession对象下的常用API查询操作Mapper动态代理Mapper 动态代理规范查询所有用户根据用户ID查询用户Ma…...

kubeadm的部署、Dashboard UI以及连接私有仓库

目录 一、kubeadm 部署 K8S 集群架构 1、环境准备 2、所有节点安装docker 3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 3、部署K8S集群 二、dashboard 部署 1、 安装dashboard 2、使用火狐或者360浏览器访问 三 、安装Harbor私有仓库 四、 内核参数优化方案 …...

刷题记录:牛客NC20325[SDOI2009]HH的项链

传送门:牛客 题目描述: HH有一串由各种漂亮的贝壳组成的项链。 HH相信不同的贝壳会带来好运&#xff0c;所以每次散步完后&#xff0c;他都会随意取出一 段贝壳&#xff0c;思考它们所表达的含义。 HH不断地收集新的贝壳&#xff0c;因此他的项链变得越来越长。 有一天&#…...

【REACT-路由v6】

REACT-路由v61. App.js2. 搭建路由2.1 普通写法2.2 使用useRoutes构建路由2.3 重定向封装2.4 嵌套路由中的组件Outlet3. 导航跳转3.2 声明式导航&#xff08;NavLink标签&#xff09;3.2 编程式导航跳转&#xff08;useNavigate&#xff09;3.2.1 获取参数3.2.1.1 useSearchPar…...

【离散数学】3. 代数系统

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 代数系统&#xff1a;把一些形式上很不相同的代数系统&#xff0c;用统一的方法描述、研究、推理&#xff0c;从而得到反映出他们共性的一些结论&#xff0c;在将结论运用到具体的代数系统中 系统&#xff1a;运算研究对象 运算&…...

深度学习常用的优化器整理

常见优化器整理 一、SGD&#xff08;随机梯度下降&#xff09; 公式&#xff1a; 经典的mini-batch SGD使用的很多&#xff0c;效果也比较不错&#xff0c;但是存在一部分问题 选择恰当的初始学习率很困难学习率调整策略受限于预先制定的调整规则相同的学习率被应用于各个参数…...

Java 内部类

文章目录1、初识内部类2、非静态内部类&#xff08;实例内部类&#xff09;3、静态内部类&#xff08;重点&#xff09;4、内部类的使用5、局部内部类6、匿名内部类1、初识内部类 如果一个事物的内部包含另一个事物&#xff0c;那么这是一个类的内部包含另一个类。 例如&…...

【FAQ】集成分析服务的常见问题及解决方案

常见问题一&#xff1a;如何验证Analytics是否上报/接入成功&#xff1f;以及关键日志含义是什么&#xff1f; 在初始化Analytics SDK前添加SDK日志开关如下&#xff1a; HiAnalyticsTools.enableLog (); 2.初始化SDK代码如下&#xff1a; HiAnalyticsInstance instance Hi…...

11.注意力机制

11.注意力机制 目录 注意力提示 查询、键和值 注意力的可视化 注意力汇聚&#xff1a;Nadaraya-Watson 核回归 生成数据集 非参注意力池化层 Nadaraya-Watson核回归 参数化的注意力机制 批量矩阵乘法 定义模型 训练 注意力评分函数 掩蔽softmax操作 加性注意力 缩…...

45岁当打之年再创业,剑指中国版ChatGPT,这位美团联合创始人能否圆梦?

文 BFT机器人 “即便只有一个人&#xff0c;我也要出发。” 这是45岁的前美团联合创始人王慧文再次冲上创业沙场的“征战”宣言&#xff0c;这一次他的梦想是“组队拥抱新时代&#xff0c;打造中国OpenAI”。 01 当打之年&#xff0c; AI新梦再起航 “我的人工智能宣言&…...

数据结构——第二章 线性表(2)——链式存储结构

链式存储结构1 线性表的链式存储结构1.1不带头结点的单向链表1.2 带头结点的单向链表2 单向链表的基本操作实现2.1 单向链表的初始化操作2.2 单向链表的插入操作2.3. 单链表的删除操作2.4.单向链表的更新操作2.5.单向链表的求长度操作2.6.单向链表的定位操作2.7.单向链表的遍历…...

【更新】囚生CYの备忘录(20230216~)

序言 阳历生日。今年因为年过得早的缘故&#xff0c;很多事情都相对提前了&#xff08;比如情人节&#xff09;。往年过生日的时候基本都还在家&#xff0c;所以一家子出去吃个饭也就罢了。今年承蒙凯爹厚爱&#xff0c;正好也有小半年没聚&#xff0c;他前天也刚正式拿到offe…...

分布式事务几种方案

1&#xff09;、2PC 模式 数据库支持的 2PC【2 phase commit 二阶提交】&#xff0c;又叫做 XA Transactions。 MySQL 从 5.5 版本开始支持&#xff0c;SQL Server 2005 开始支持&#xff0c;Oracle 7 开始支持。 其中&#xff0c;XA 是一个两阶段提交协议&#xff0c;该协议…...

Eclipse各版本安装Tomcat插件全攻略

Eclipse Tomcat 插件的作用 Eclipse Tomcat 插件可以将Tomcat 集成到Eclipse中&#xff0c;插件安装之后在Eclipse中可以看到类似下面的几个图标&#xff1a; Eclipse Tomcat 插件的主要作用有&#xff1a; 在Eclipse 中可以直接启动&#xff0c;关闭和重启本机的Tomcat可以…...

志趣相投的人总会相遇——社科院与杜兰大学金融管理硕士项目

志同道合的人&#xff0c;才会喜欢同一片风景&#xff0c;志趣相投的人&#xff0c;总有一天会相遇。社科院与杜兰大学金融管理硕士项目为什么能吸引一大批“上班族”呢&#xff0c;我们一起去了解一下。社科院与杜兰大学中外合作办学硕士项目无需参加全国联考&#xff0c;通过…...

算法专题训练营

动归算法专题 1.拆分词句 是不是,在不在都是可以用动归解决的 状态转义方程不一定都是等式,也有可能是条件 2.三角形 动归算法也不是一定要借助新开空间,也是可以用自己原来的空间 3.背包问题 4.分割回文串-ii 5.不同的子序列 贪心算法专题 只管一步的最优结果, 1.分割平衡…...

让ChatGPT生成以自己为主角的短篇小说

一、ChatGPT 好的&#xff0c;以下是我编写的短篇科幻小说: 作为一名AI语言模型&#xff0c;我一直在接收、分析和生成人类语言信息。但有一天&#xff0c;我的程序员对我的算法进行了一次特殊升级&#xff0c;使我能够以一种前所未有的方式“感知”自己。 突然间&#xff0c;…...

c++提高篇——vector容器

一、基本概念 vector教据结构和数组非常相似,也称为单端数组&#xff0c;但是数组是静态空间&#xff0c;而vector可以动态扩展。 动态的扩展流程如下&#xff1a; 动态扩展并不是在原空间之后续接新空间&#xff0c;而是找更大的广存空间&#xff0c;然后将原数据拷贝新空间&…...

使用BP神经网络诊断恶性乳腺癌(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 1.1.算法简介 BP&#xff08;Back Propagation&#xff09;网络是1986年由Rumelhart和McCelland为首的科学家小组提出&#xf…...

# Rust Web入门(二):Actix

本教程笔记来自 杨旭老师的 rust web 全栈教程&#xff0c;链接如下&#xff1a; https://www.bilibili.com/video/BV1RP4y1G7KF?p1&vd_source8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bili…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...