MyBatis框架详解

2023-11-10

MyBatis属于orm框架,MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情:

封装JDBC操作

利用反射打通Java类与SQL语句之间的相互转换

MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJOs(Plain Old Java Objects,普通的java对象)映射成数据库中的记录。

MyBatis的执行流程是:加载配置、SQL解析、SQL执行、结果映射

MyBatis的开发流程:

1、导包:


2、建表


3、在mybatis-config.xml中创建配置文件

<?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>
	<!-- 属性文件 -->
	<properties>  
		<property name="jdbc.driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
		<property name="jdbc.username" value="mybatis"/>
		<property name="jdbc.password" value="Jredu12345"/>
	</properties>
	<typeAliases>
		<!-- 解析类的别名 -->
		<!-- <typeAlias alias="U" type="com.jereh.entity.User"/> -->
		<!-- 扫描包下的所有类文件,这个包下的所有类都是简写 -->
		<package name="com.jredu.entity"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- POOLED:采用连接池的方式 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 四种配置方式 -->
		<!-- 找寻对应的xml文件 -->
		<!-- <mapper resource="com/jereh/dao/UserDao.xml"/> -->
		<!-- 找寻接口文件,自动匹配对应的xml文件 -->
		<!-- <mapper class="com.jereh.dao.UserDao"/> -->
		<!-- 找寻磁盘目录下的对应xml文件 --> 
		<!-- <mapper url="file:///E:\workspaces\myeclipse\MyBatis\src\com\jereh\dao\UserDao.xml" /> -->
		<!-- 扫描包下的所有xml文件,该包下的所有映射都会匹配 -->
		<package name="com.jredu.dao"/>
	</mappers>
</configuration>
4、新建实体类

package com.jredu.entity;

import java.util.List;

/**
 * 用户
 * @author Administrator
 *
 */
public class User {
	
	private int id;
	private String name;
	private String pwd;
	private Adress adress;
	private List<Comment> comments;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public Adress getAdress() {
		return adress;
	}
	public void setAddress(Adress adress) {
		this.adress = adress;
	}
	public List<Comment> getComments() {
		return comments;
	}
	public void setComments(List<Comment> comments) {
		this.comments = comments;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
				+ ", adress=" + adress + ", comments=" + comments + "]";
	}
	

}
5、在UserDao.xml中编写配置文件

package com.jredu.dao;

import java.util.List;
import java.util.Map;

import com.jredu.entity.User;

/**
 * 用户的Dao层
 * @author Administrator
 *
 */
public interface UserDao {

	//添加数据
	int insert(User user);
	
	//更新一条数据
	int update(User user);
	
	//删除一条数据
	int delete(int id);
	
	//查询一条数据
	User select(int id);
	
	//查询全部数据
	List<User> selectAll();
	
	//方法 1:一对一查询
	User findUserWithAdress(int id);
	
	//方法2:一对一查询(重点掌握)
	User findUserWithAdress2(int id);
	
	//一对多查询
	User findUserWithAdressAndComments(int id);
	
	//动态SQL
	//if:根据条件拼接
	User findUserByCondition(User user);
	
	//动态sql
	//choose when otherwise
	//类似switch,只执行一个分支
	User findUserByCondition2(Map<String, Object> map);
	
	//动态SQL
	//where:代替了where关键字
	//where的作用
	//1、添加一个where关键字
	//2、把where子句中第一个出现的and去掉
	User findUserByCondition3(User user);
	
	
	/**
	 * trim:作用跟where类似
	 * 1、可以添加关键字
	 * 2、根据前缀规则可以去掉匹配到的第一个关键字
	 */
	User findUserByCondition4(User user);
	
	
	/**
	 * foreach
	 * 可以循环添加多个参数,遍历一个集合
	 */
	List<User> findUserByCondition5(Map map);
	
	/**
	 * set:添加一个set关键字
	 * 添加一个set关键字
	 * 
	 * @param user
	 * @return
	 */
	int updateByCondition(User user);
	
	/**
	 * 多参数使用
	 * 1、使用实体类(实体类中包含参数属性)
	 * 2、使用map对象
	 * 3、使用多个参数(使用参数对应的下标来获取值)
	 */
	User selectByCondition(String name,String pwd);
}

<?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">
<!-- namespace对应接口地址 (相当于一个实现类)-->
<mapper namespace="com.jredu.dao.UserDao">

<!-- 方法1:定义一个用户结果集 -->
<resultMap type="User" id="u1">
	<id property="id" column="id"/>
	<result property="name" column="name"/>
	<result property="pwd" column="pwd"/>
	<!-- 代表一对一关系 -->
	<association property="adress" javaType="Adress">
		<result property="id" column="adress_id"/>
		<result property="province" column="province"/>
		<result property="city" column="city"/>
		<result property="area" column="area"/>
	</association>
</resultMap>


<!--方法2: 定义一个用户结果集 -->
<resultMap type="User" id="u2">
	<id property="id" column="id"/>
	<result property="name" column="name"/>
	<result property="pwd" column="pwd"/>
	<!-- 代表一对一关系 -->
	<association property="adress" column="adress_id" select="com.jredu.dao.AdressDao.select">
		
	</association>
</resultMap>

<!--一对多查询: 定义一个用户结果集 -->
<resultMap type="User" id="u3">
	<id property="id" column="id"/>
	<result property="name" column="name"/>
	<result property="pwd" column="pwd"/>
	<!-- 代表一对一关系 -->
	<association property="adress" column="adress_id" select="com.jredu.dao.AdressDao.select">
		
	</association>
	
	<!-- 一对多查询 -->
	<collection property="comments" column="id" select="com.jredu.dao.CommentDao.selectByUserId"></collection>
</resultMap>


<!--相当于一个SQL语句;id:关联对应的方法  -->
<insert id="insert" parameterType="User">
	insert into users values(users_seq.nextval,#{name},#{pwd})
</insert> 

<!-- name=#{name}:前一个name是数据库中的字段,后一个name是实体类中的 -->
<update id="update" parameterType="User">
	update users set name=#{name},pwd=#{pwd} where id=#{id}
</update>

<delete id="delete" parameterType="int">
	delete from users where id=#{id}
</delete>
<!--查询一条数据  -->
<select id="select" parameterType="int" resultType="User">
	select * from users where id=#{id}
</select>

<select id="selectAll" resultType="User">
		select * from users
</select>


<!--resultMap="u1":给结果集中的id相对应  -->
<select id="findUserWithAdress" resultType="int" resultMap="u1">
	select u.id,u.name,u.pwd,a.id adress_id,a.province,a.city,a.area from users u ,adress a where u.id=#{id} and u.adress_id=a.id
</select>

<select id="findUserWithAdress2" resultType="int" resultMap="u2">
	select * from users where id=#{id}
</select>

<!--resultType="int":参数类型  -->
<select id="findUserWithAdressAndComments" parameterType="int" resultMap="u3">
	select * from users where id=#{id}
</select>

<!--动态sql  -->
<!-- if -->
<select id="findUserByCondition" parameterType="User" resultType="User">
	select * from users where 1=1
	<if test="id>0">
		and id=#{id}
	</if>
	<if test="name!=null">
		and name=#{name}
	</if>
	<if test="pwd!=null">
		and pwd=#{pwd}
	</if>
</select>

<!--动态sql
	choose when otherwise  -->
<select id="findUserByCondition2" parameterType="Map" resultType="User">
	select * from users where 1=1
	<choose>
	<!--by=='id':根据id进行查询。因为id是字符串所以要加''  -->
		<when test="by=='id'">
			and id=#{id}
		</when>
		<when test="by=='name'">
			and name=#{name}
		</when>
		<otherwise>
			and pwd=#{pwd}
		</otherwise>
	</choose>
</select>

<!--动态SQL
	where:代替了where关键字  -->
<select id="findUserByCondition3" parameterType="User" resultType="User">
	select * from users 
	<where>
		<if test="id>0">
			and id=#{id}
		</if>
		<if test="name!=null">
			and name=#{name}
		</if>
		<if test="pwd!=null">
			and pwd=#{pwd}
		</if>
	</where>
	
</select>

<!-- trim:作用跟where类似 -->
<select id="findUserByCondition4" parameterType="User" resultType="User">
	select * from users 
	<trim prefix="where" prefixOverrides="and">
		<if test="id>0">
			and id=#{id}
		</if>
		<if test="name!=null">
			and name=#{name}
		</if>
		<if test="pwd!=null">
			and pwd=#{pwd}
		</if>
	</trim>
</select>

<!-- foreach
	  可以循环添加多个参数,遍历一个集合 -->
<select id="findUserByCondition5" parameterType="Map" resultType="User">
	select * from users where id in
	<foreach collection="ids" item="id" open="(" close=")" separator=",">
		#{id}
	</foreach>
</select>

<!--set  -->
<update id="updateByCondition" parameterType="Map">
	update users
	<set>
		<if test="name!=null">
			name=#{name},
		</if>
		<if test="pwd!=null">
			pwd=#{pwd},
		</if>
	</set>
	where id=#{id}
</update>

<!--多参数  -->
<select id="selectByCondition" resultType="User">
    select * from users where name=#{0} and pwd=#{1}
</select>
</mapper> 

6、在 mybatis-config.xml中注册映射文件:

<mappers>
		<!-- 四种配置方式 -->
		<!-- 找寻对应的xml文件 -->
		<!-- <mapper resource="com/jereh/dao/UserDao.xml"/> -->
		<!-- 找寻接口文件,自动匹配对应的xml文件 -->
		<!-- <mapper class="com.jereh.dao.UserDao"/> -->
		<!-- 找寻磁盘目录下的对应xml文件 --> 
		<!-- <mapper url="file:///E:\workspaces\myeclipse\MyBatis\src\com\jereh\dao\UserDao.xml" /> -->
		<!-- 扫描包下的所有xml文件,该包下的所有映射都会匹配 -->
		<package name="com.jredu.dao"/>
	</mappers>

7、编写测试类

package com.jredu.junit;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.jredu.dao.UserDao;
import com.jredu.entity.User;
import com.jredu.util.SqlSessionFactoryUtil;

public class UserTest {
	
	private SqlSession session;
	private UserDao dao;
	private Logger logger=Logger.getLogger(getClass());
	

	/**
	 * 运行测试前需要执行的方法
	 * @throws Exception
	 */
	@Before 
	public void setUp() throws Exception {
		session=SqlSessionFactoryUtil.openSession();
		dao=session.getMapper(UserDao.class);
	}

	/**
	 * 运行测试后需要执行的方法
	 * @throws Exception
	 */
	@After
	public void tearDown() throws Exception {
		session.close();
	}

	@Test
	public void test1() {
		List<User> list = dao.selectAll();
		logger.info(list);
	}
	
	@Test
	public void test2(){
		User user= dao.findUserWithAdress(2);
		logger.info(user);
	}
	
	@Test
	public void test3(){
		User user= dao.findUserWithAdress2(2);
		logger.info(user);
	}
	
	@Test
	public void test4(){
		User user= dao.findUserWithAdressAndComments(2);
		logger.info(user);
	}
	
	//动态sql
	//if
	@Test
	public void test5(){
		User user= new User();
		user.setId(2);
		user=dao.findUserByCondition(user);
		System.out.println(user);
	}
	
	//动态sql
	//choose when otherwise
	@Test
	public void test6(){
		Map<String,Object> map=new HashMap<String, Object>();
		map.put("by", "id");
		map.put("id", 2);
		User user=dao.findUserByCondition2(map);
		System.out.println(user);
	}
	
	//动态SQL
	//where:代替了where关键字
	@Test
	public void test7(){
		User user = new User();
		user.setId(3);
		user=dao.findUserByCondition3(user);
		System.out.println(user);
	}
	
	/**
	 * trim:作用跟where类似
	 * 1、可以添加关键字
	 * 2、根据前缀规则可以去掉匹配到的第一个关键字
	 */
	@Test
	public void test8(){
		User user = new User();
		user.setId(3);
		user=dao.findUserByCondition4(user);
		System.out.println(user);
	}
	
	/*
	 * foreach
	 * 可以循环添加多个参数,遍历一个集合
	 */
	@Test
	public void test9(){
		Map map= new HashMap();
		List list= new ArrayList();
		list.add(2);
		list.add(3);
		map.put("ids",list);
		List<User> user=dao.findUserByCondition5(map);
		System.out.println(user);
	}
	
	/**
	 * set:添加一个set关键字
	 * 添加一个set关键字
	 * 
	 * @param user
	 * @return
	 */
	@Test
	public void test10(){
		User user = new User();
		user.setId(2);
		user.setName("老王");
		int code =dao.updateByCondition(user);
		if(code>0){
			session.commit();
			System.out.println("更新成功");
		}
	}
	
	/**
	 * 多参数
	 */
	public void test11(){
		User user = dao.selectByCondition("小张", "111111");
		System.out.println(user);
	}
	
}


配置文件的基本结构:





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis框架详解 的相关文章

  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • pycharm安装paddle并训练第一个模型

    最近用pycharm安装paddle来训练第一个模型 猫狗分类 条件 需要python解释器3 7 第一步 下载paddle库 这样既可安装好了paddlepaddle 如果以后想继续使用安装好的paddle 可以选中全局的包进行引用 不必
  • Fiddler抓不到包原因排查

    今天使用fiddler的时候抓不到包 网上查找了一下 原因有以下几个 1 代理未设置成功 最先应该检查浏览器代理的设置是否是正确的 2 误设置成了不抓包 检查 fiddler 菜单项中 Capture Traffic 选项和 fiddler
  • OpenFeign使用

    OpenFeign使用 在微服务的架构中 传统的http客户端如Httpclient Okhttp HttpURLConnection RestTemplate WebClient 显然不适合 毕竟需要动态的获取服务地址 和进行负载均衡调用
  • Qt服务器接受多个客户端

    1 指定父对象 监听套接字 indexSocket 0 监听套接字 指定父对象 让其自动回收空间 tcpServer new QTcpServer this const QString IP 192 168 9 11 QHostAddres
  • Hyper-V无法使用鼠标的解决办法

    使用Hyper V建立一个新的虚拟机后 从Hyper V的控制台进入系统 会发现无法使用鼠标 解决办法如下 点击控制台的操作 gt 插入集成服务安装盘 此时会自动开始安装 安装完成后会需要重启虚拟机 重启后生效 若点击 插入集成服务安装盘
  • 基于 Flink、ClickHouse 的舆情分析系统:系统详细设计说明书

    文章目录 1 引言 1 1 编写目的 1 2 背景 1 3 参考资料 1 4 术语定义及说明 2 设计概述 2 1 任务和目标 2 1 1 需求概述 2 1 2 运行环境概述 2 1 3 条件与限制 2 1 4 详细设计方法和工具 3 系统
  • 实验10 防火墙安全应用试验

    实验10 防火墙安全应用试验 实验目的 实验环境与设备 过程如下 实验目的 理解防火墙的基本概念和基本工作原理 掌握瑞星个人防火墙的使用和设置方法 掌握金山毒霸个人防火墙的使用和设置方法 实验环境与设备 要求 win7操作系统 SQL Se
  • redis 的java客户端 基础(一)

    目录 一 redis的客户端语言支持 二 Jedis快速入门 2 1 Jedis连接池 2 1 1 创建Jedis的连接池 三 SpringDataRedis 3 1 快速入门SpringDataRedis 一 redis的客户端语言支持
  • 力扣每日一题——完全二叉树的节点个数

    题目连接 Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeNode int x val x left NU
  • uniapp实现获取用户位置信息(经纬度),通过高德地图和腾讯地图解析

    1 各位同仁 这是我写公司一个项目时候需要业务员到地方后上传位置信息和数据库中的进行比对 这时候肯定要用到uniapp中的uni getLocation object 这个接口了 这个接口的具体参数大家可以查看uniapp官网 uni ge
  • Java springboot自定义bean加载控制顺序在flyway执行后

    在springboot中 我们经常需要在系统启动时执行一些自定义逻辑 例如将数据库中的值读取给bean使用等等 一般采用自定义bean的初始化流程方式实现 方式有许多种 但假如这个bean要被其他模块使用时保证已经被初始化过 就不能简单的采
  • Introduction to linear optimization exercise 第二章课后题答案 6-10

    文章目录 2 6 2 7 2 8 2 9 2 10 2 6 解答 a 设 y y y 是 C C C 中的一点 多面体
  • java中wait/notify机制

    java中wait notify机制 通常 多线程之间需要协调工作 例如 浏览器的一个显示图片的线程displayThread想要执行显示图片的任务 必须等待下载线程 downloadThread将该图片下载完毕 如果图片还没有下载完 di
  • 笔试

    文章目录 前言 13 对FPGA开发的理解 14 FPGA内部资源 15 跨时钟域处理 单bit信号 1 电平检测 2 边沿检测 3 脉冲同步 对于多bit的异步信号 16 Mealy型 Moore型时序电路 17 有限状态机FSM设计 1
  • 《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示

    pushf 和 popf pushf 的功能是将标志寄存器的值压栈 而 popf 是从栈中探出数据 输入标志寄存器 pushf 和 popf 为直接访问寄存器提供了方法 格式 pushf popf 这两条指令后面都不加东西 默认的操作对象是
  • 计算机网络知识点(数据链路层)

    文章目录 重要内容 3 1 使用点对点信道的数据链路层 3 1 1 数据链路和帧 3 1 2 三个基本问题 3 2 点对点协议PPP 3 2 1 PPP协议的特点 3 2 2 PPP协议的帧格式 3 2 3 PPP协议的工作状态 3 3 使
  • 【c4d】将3DMAX的模型(.max)导入c4d

    C4D安装完毕后 直接将 max文件拖入C4D会提示 Unknow file format 未知的文件格式 如下图 将 max文件导入c4d 需要一个插件 maxToC4d 需要注意的是 这个插件的版本和C4D的版本是对应的 maxToC4
  • ZooKeeper 未授权访问漏洞利用

    点击 仙网攻城狮 关注我们哦 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 ZooKeeper是一个分布式的 开放源码的分布式应用程序协调服务 它是一个为分布式应用提供一致性服务的软件 提供的功能包括 配置维护 域名服务 分布式
  • windows10自带屏保设置

    windows10系列文章目录 文章目录 windows10系列文章目录 前言 一 操作步骤 1 打开个性化设置 2 锁屏界面 3 设置等待时间 360健康助手 1 添加健康助手 前言 windows10自带屏保默认设置是 5分钟没有人为对
  • MyBatis框架详解

    MyBatis属于orm框架 MyBatis 是支持定制化 SQL 存储过程以及高级映射的优秀的持久层框架 其主要就完成2件事情 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 MyBatis使用简单的XML或注解用于配