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();
}
- 创建业务层接口实现类
//可以通过接口的名字定位到映射配置文件,所以要求映射配置文件里面的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查询用户
- 修改映射配置文件
<select id="selectUsersById" parameterType="_int" resultType="users">select * from users where userid = #{id}
</select>
- 修改UsersMapper接口添加抽象方法
Users selectUsersById(int id);
- 修改业务层接口
Users findUsersById(int id);
- 修改业务层接口实现类
@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;}
- 测试
@Testpublic void findUsersById(){UsersServiceImpl usersService = new UsersServiceImpl();Users user = usersService.findUsersById(2);System.out.println(user.toString());}
Mapper动态代理模式下的多参数处理
@Param注解传参法
注解中@param(“…”)中的参数代表的是Mapper映射文件中#{…}里面的值。
- 修改映射配置文件
<!--根据用户姓名与性别查询用户,使用@Param 注解传参法-->
<select id="selectUsersAnnParam" resultType="users">select * from users where username = #{name} and usersex= #{sex}
</select>
- 修改UsersMapper接口添加抽象方法
List<Users> selectUsersAnnParam(@Param("name") String username,@Param("sex") String usersex);
- 修改业务层接口
List<Users> findUsersAnnParam(@Param("name") String username1, @Param("sex") String usersex);
- 修改业务层接口实现类
@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;}
- 测试
@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 的属性名作为参数名即可。此方式推荐使用。
- 修改映射配置文件
<!--根据用户姓名与性别查询用户,使用 POJO 传参法-->
<select id="selectUsersPOJOParam" resultType="users">select * from users where username = #{username} and usersex=#{usersex}
</select>
- 修改UsersMapper接口添加抽象方法
List<Users> selectUsersPOJOParam(Users users);
- 修改业务层接口
List<Users> findUsersPOJOParam(Users users);
- 修改业务层接口实现类
@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;}
- 测试
@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,kubelet和kubectl 3、部署K8S集群 二、dashboard 部署 1、 安装dashboard 2、使用火狐或者360浏览器访问 三 、安装Harbor私有仓库 四、 内核参数优化方案 …...
刷题记录:牛客NC20325[SDOI2009]HH的项链
传送门:牛客 题目描述: HH有一串由各种漂亮的贝壳组成的项链。 HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一 段贝壳,思考它们所表达的含义。 HH不断地收集新的贝壳,因此他的项链变得越来越长。 有一天&#…...
【REACT-路由v6】
REACT-路由v61. App.js2. 搭建路由2.1 普通写法2.2 使用useRoutes构建路由2.3 重定向封装2.4 嵌套路由中的组件Outlet3. 导航跳转3.2 声明式导航(NavLink标签)3.2 编程式导航跳转(useNavigate)3.2.1 获取参数3.2.1.1 useSearchPar…...
【离散数学】3. 代数系统
1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 代数系统:把一些形式上很不相同的代数系统,用统一的方法描述、研究、推理,从而得到反映出他们共性的一些结论,在将结论运用到具体的代数系统中 系统:运算研究对象 运算&…...
深度学习常用的优化器整理
常见优化器整理 一、SGD(随机梯度下降) 公式: 经典的mini-batch SGD使用的很多,效果也比较不错,但是存在一部分问题 选择恰当的初始学习率很困难学习率调整策略受限于预先制定的调整规则相同的学习率被应用于各个参数…...
Java 内部类
文章目录1、初识内部类2、非静态内部类(实例内部类)3、静态内部类(重点)4、内部类的使用5、局部内部类6、匿名内部类1、初识内部类 如果一个事物的内部包含另一个事物,那么这是一个类的内部包含另一个类。 例如&…...
【FAQ】集成分析服务的常见问题及解决方案
常见问题一:如何验证Analytics是否上报/接入成功?以及关键日志含义是什么? 在初始化Analytics SDK前添加SDK日志开关如下: HiAnalyticsTools.enableLog (); 2.初始化SDK代码如下: HiAnalyticsInstance instance Hi…...
11.注意力机制
11.注意力机制 目录 注意力提示 查询、键和值 注意力的可视化 注意力汇聚:Nadaraya-Watson 核回归 生成数据集 非参注意力池化层 Nadaraya-Watson核回归 参数化的注意力机制 批量矩阵乘法 定义模型 训练 注意力评分函数 掩蔽softmax操作 加性注意力 缩…...
45岁当打之年再创业,剑指中国版ChatGPT,这位美团联合创始人能否圆梦?
文 BFT机器人 “即便只有一个人,我也要出发。” 这是45岁的前美团联合创始人王慧文再次冲上创业沙场的“征战”宣言,这一次他的梦想是“组队拥抱新时代,打造中国OpenAI”。 01 当打之年, AI新梦再起航 “我的人工智能宣言&…...
数据结构——第二章 线性表(2)——链式存储结构
链式存储结构1 线性表的链式存储结构1.1不带头结点的单向链表1.2 带头结点的单向链表2 单向链表的基本操作实现2.1 单向链表的初始化操作2.2 单向链表的插入操作2.3. 单链表的删除操作2.4.单向链表的更新操作2.5.单向链表的求长度操作2.6.单向链表的定位操作2.7.单向链表的遍历…...
【更新】囚生CYの备忘录(20230216~)
序言 阳历生日。今年因为年过得早的缘故,很多事情都相对提前了(比如情人节)。往年过生日的时候基本都还在家,所以一家子出去吃个饭也就罢了。今年承蒙凯爹厚爱,正好也有小半年没聚,他前天也刚正式拿到offe…...
分布式事务几种方案
1)、2PC 模式 数据库支持的 2PC【2 phase commit 二阶提交】,又叫做 XA Transactions。 MySQL 从 5.5 版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持。 其中,XA 是一个两阶段提交协议,该协议…...
Eclipse各版本安装Tomcat插件全攻略
Eclipse Tomcat 插件的作用 Eclipse Tomcat 插件可以将Tomcat 集成到Eclipse中,插件安装之后在Eclipse中可以看到类似下面的几个图标: Eclipse Tomcat 插件的主要作用有: 在Eclipse 中可以直接启动,关闭和重启本机的Tomcat可以…...
志趣相投的人总会相遇——社科院与杜兰大学金融管理硕士项目
志同道合的人,才会喜欢同一片风景,志趣相投的人,总有一天会相遇。社科院与杜兰大学金融管理硕士项目为什么能吸引一大批“上班族”呢,我们一起去了解一下。社科院与杜兰大学中外合作办学硕士项目无需参加全国联考,通过…...
算法专题训练营
动归算法专题 1.拆分词句 是不是,在不在都是可以用动归解决的 状态转义方程不一定都是等式,也有可能是条件 2.三角形 动归算法也不是一定要借助新开空间,也是可以用自己原来的空间 3.背包问题 4.分割回文串-ii 5.不同的子序列 贪心算法专题 只管一步的最优结果, 1.分割平衡…...
让ChatGPT生成以自己为主角的短篇小说
一、ChatGPT 好的,以下是我编写的短篇科幻小说: 作为一名AI语言模型,我一直在接收、分析和生成人类语言信息。但有一天,我的程序员对我的算法进行了一次特殊升级,使我能够以一种前所未有的方式“感知”自己。 突然间,…...
c++提高篇——vector容器
一、基本概念 vector教据结构和数组非常相似,也称为单端数组,但是数组是静态空间,而vector可以动态扩展。 动态的扩展流程如下: 动态扩展并不是在原空间之后续接新空间,而是找更大的广存空间,然后将原数据拷贝新空间&…...
使用BP神经网络诊断恶性乳腺癌(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 1.1.算法简介 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出…...
# Rust Web入门(二):Actix
本教程笔记来自 杨旭老师的 rust web 全栈教程,链接如下: https://www.bilibili.com/video/BV1RP4y1G7KF?p1&vd_source8595fbbf160cc11a0cc07cadacf22951 学习 Rust Web 需要学习 rust 的前置知识可以学习杨旭老师的另一门教程 https://www.bili…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
