mybatis基础操作(二)

事务管理

获取sqlSession时,默认开启事务,SqlSessionFactory类实例在调用openSession时不设置或者设置为false,此情况下,操作完成后,需要手动提交。

手动提交与回滚事务

public void insertStudent() {// 会话链接SqlSession sqlSession = MybatisUtil.getSqlSession();int i = 0;try {// 实体对象Student student = new Student(0, "00014", "wang14", "M", 29);StudentDao studentDao = sqlSession.getMapper(StudentDao.class);System.out.println(studentDao);// 插入操作i = studentDao.insertStudent(student);sqlSession.commit();} catch (Exception e) {sqlSession.rollback();}Assert.assertEquals(1, i);
}

自动提交事务

获取sqlSession时,默认开启事务,SqlSessionFactory类实例在调用openSession时设置为true,此情况下,操作完成后,会自动提交。// 会话工厂SqlSessionFactory factory = builder.build(inputStream);// 会话链接,设置为true,再执行操作后,自动执行sqlSession.commit()SqlSession sqlSession = factory.openSession(true);此情况知适用于只执行了增删改的一种操作,且只有一次操作的情况下,其他情况不建议使用自动提交。

mybatis的xml配置

需要遵循的顺序:

在这里插入图片描述

resultType和resultMap的区别:

resultType:指定当前sql返回数据封装的对象类型(实体类)

resultMap:指定从数据表到实体类的字段和属性的对应关系

分页查询

引入插件

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version>
</dependency>

接口

public List<Student> selectStudentByGenderUsingPageHelper(String gender);

xml配置如下

<sql id="sutdentAll">sid,stu_num,stu_name,stu_gender,stu_age</sql>
<select id="selectStudentByGenderUsingPageHelper" resultMap="StudentMap">select <include refid="sutdentAll" /> from tb_students where stu_gender=#{gender}
</select>

使用插件进行分页查询

public void selectStudentByGenderUsingPageHelper() {StudentDao studentDao = MybatisUtil.getMapper(StudentDao.class);PageHelper.startPage(1,4);List<Student> students = studentDao.selectStudentByGenderUsingPageHelper("M");PageInfo<Student> info = new PageInfo<Student>(students);List<Student> list = info.getList();for (Student s:list) {System.out.println(s);}
}

关联映射

实体关系:指的是数据与数据之间的关系

​ 一对一关联:主键,唯一外键

一对多关联, 多对一关联:在多的一端添加外键,和一的一端关联

多对多关联:建立第三张关系表,添加两个外键,分别与两张表的主键进行关联

一对一关联

场景为查询用户的信息,信息放在两张表,通过名字查询所有的信息:

创建两张表
-- 用户基础信息表
CREATE TABLE users(user_id INT PRIMARY KEY AUTO_INCREMENT,user_name VARCHAR(20) NOT NULL UNIQUE,user_pwd VARCHAR(20) NOT NULL,user_realname VARCHAR(20) NOT NULL,user_img VARCHAR(100) NOT NULL
);
-- 用户详情信息表
CREATE TABLE details(detail_id INT PRIMARY KEY AUTO_INCREMENT,user_addr VARCHAR(50) NOT NULL,user_tel CHAR(20) NOT NULL,user_desc VARCHAR(200),uid INT NOT NULL UNIQUE
);
创建两个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {private int userId;private String userName;private String userPwd;private String userRealName;private String userImg;private Detail detail;
}@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Detail {private int detailId;private String userAddr;private String userTel;private String userDesc;private int uId;
}
创建DAO接口
public interface UserDao {public int insertUser(User user);public User queryUser(String userName);public User queryUserByInnerJoin(String userName);public User queryUserByAssociation(String userName);
}public interface DetailDao {public int insertDetail(Detail detail);public Detail queryDetail(int uId);
}
创建mapper文件

分别针对上述两个接口创建mapper文件,如下是UserDao对应的xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.UserDao"><!--  需要回填主键  --><insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" timeout="3000" parameterType="User">insert into users(user_name,user_pwd,user_realname,user_img)values(#{userName},#{userPwd},#{userRealName},#{userImg});</insert><resultMap id="userMap" type="User"><id column="user_id" property="userId"></id><result column="user_name" property="userName"></result><result column="user_pwd" property="userPwd"></result><result column="user_realname" property="userRealName"></result><result column="user_img" property="userImg"></result><result column="detail_id" property="detail.detailId"></result><result column="user_addr" property="detail.userAddr"></result><result column="user_tel" property="detail.userTel"></result><result column="user_desc" property="detail.userDesc"></result><result column="uid" property="detail.uId"></result></resultMap><!--  association关联子查询; select:对应的查询方法; column:子查询的入参  --><resultMap id="userDetailMap" type="User"><id column="user_id" property="userId"></id><result column="user_name" property="userName"></result><result column="user_pwd" property="userPwd"></result><result column="user_realname" property="userRealName"></result><result column="user_img" property="userImg"></result><association property="detail" select="com.kingyal.dao.DetailDao.queryDetail" column="user_id"></association></resultMap><select id="queryUser" resultMap="userMap">select user_id,user_name,user_pwd,user_realname,user_imgfrom users where user_name=#{userName}</select><select id="queryUserByInnerJoin" resultMap="userMap">SELECT user_id,user_name,user_pwd,user_realname,user_img,detail_id,user_addr,user_tel,user_desc,uidFROM users uINNER JOIN details dON u.user_id=d.uidWHERE u.user_name=#{userName}</select><select id="queryUserByAssociation" resultMap="userDetailMap">SELECT user_id,user_name,user_pwd,user_realname,user_imgFROM users uWHERE u.user_name=#{userName}</select>
</mapper>

如下是detailDao对应的xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.DetailDao"><insert id="insertDetail" useGeneratedKeys="true" keyProperty="detailId" timeout="3000" parameterType="Detail">insert into details(user_addr,user_tel,user_desc,uid)values(#{userAddr},#{userTel},#{userDesc},#{uId});</insert><resultMap id="detailMap" type="Detail"><id column="detail_id" property="detailId"></id><result column="user_addr" property="userAddr"></result><result column="user_tel" property="userTel"></result><result column="user_desc" property="userDesc"></result><result column="uid" property="uId"></result></resultMap><select id="queryDetail" resultMap="detailMap">select detail_id,user_addr,user_tel,user_desc,uidfrom details where uId=${uId}</select>
</mapper>

需要将上述两个xml文件加到mybatis的配置文件中:

在这里插入图片描述

给实体指定类名:
在这里插入图片描述

测试类

可重点关注queryUserByInnerJoin()和queryUserByAssociation(),他们分别通过连接查询的方式和子查询的方式实现users表到details表的一对一查询:

public class UserDaoTest {@Testpublic void insertUser() {SqlSession sqlSession = MybatisUtil.getSqlSession();try {User user = new User(0, "wangwu", "123456", "wangwu", "2.jpg", null);Detail detail = new Detail(0, "shanghai", "18007777701", "my dream", 0);UserDao userDao = sqlSession.getMapper(UserDao.class);int i = userDao.insertUser(user);Assert.assertEquals(1 ,i);System.out.println(user);detail.setUId(user.getUserId());DetailDao detailDao = sqlSession.getMapper(DetailDao.class);i = detailDao.insertDetail(detail);Assert.assertEquals(1 ,i);System.out.println(detail);sqlSession.commit();} catch (Exception e) {sqlSession.rollback();}}@Testpublic void queryUser() {UserDao userDao = MybatisUtil.getMapper(UserDao.class);User user = userDao.queryUser("wangwu");System.out.println(user);DetailDao detailDao = MybatisUtil.getMapper(DetailDao.class);Detail detail = detailDao.queryDetail(user.getUserId());System.out.println(detail);}@Testpublic void queryUserByInnerJoin() {UserDao userDao = MybatisUtil.getMapper(UserDao.class);User user = userDao.queryUserByInnerJoin("wangwu");System.out.println(user);}@Testpublic void queryUserByAssociation() {UserDao userDao = MybatisUtil.getMapper(UserDao.class);User user = userDao.queryUserByAssociation("wangwu");System.out.println(user);}
}

一对多关联

一对多的场景为查询一个班级有哪些学生

创建两张表
-- 学生表
CREATE TABLE students (sid CHAR(5) NOT NULL,sname VARCHAR(20) NOT NULL,sage INT NOT NULL,scid INT NOT NULL 
);
-- 班级表
CREATE TABLE classes (cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(30) NOT NULL UNIQUE,cdesc VARCHAR(100)
);
创建两个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {private String sId;private String sName;private int sAge;private int sCid;private  Clazz clazz;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Clazz {private int cId;private String cName;private String cDesc;private List<Student> studentList;
}
创建Dao接口
public interface ClazzDao {public int insertClazz(Clazz clazz);public List<Student> queryClazzByInnerJoin(int cId);public List<Student> queryClazzByAssociation(int cId);public Clazz queryClazzByCid(int cid);
}
public interface StudentDao {public int insertStudent(Student student);public List<Student> queryStudentByCid(int cId);public List<Student> queryStudentByInnerJoin(String sid);public List<Student> queryStudentByAssociation(String sid);
}
创建map文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.ClazzDao"><insert id="insertClazz" useGeneratedKeys="true" keyProperty="cid" timeout="3000" parameterType="Clazz">insert into classes(cname,cdesc)values(#{cName},#{cDesc});</insert><!--  子查询  --><resultMap id="ClazzStudentInnerMap" type="Clazz"><id column="cid" property="cid"></id><result column="cname" property="cName"></result><result column="cdesc" property="cDesc"></result><!--    collection用来申明一个集合;ofType申明元素类型    --><collection property="studentList" ofType="Student"><result column="sid" property="sId"></result><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result></collection></resultMap><select id="queryClazzByInnerJoin" resultMap="ClazzStudentInnerMap">SELECT cid, cname, cdesc, sid, sname, sage,scidFROM students s INNER JOIN classes cON s.scid=c.cidWHERE c.cid=#{cId};</select><!--  连接查询 ,如果是集合,用collection,如果是对象,用association --><resultMap id="ClazzStudentMap" type="Clazz"><id column="cid" property="cId"></id><result column="cname" property="cName"></result><result column="cdesc" property="cDesc"></result><collection property="studentList" select="com.kingyal.dao.StudentDao.queryStudentByCid" column="cid"/></resultMap><select id="queryClazzByAssociation" resultMap="ClazzStudentMap">SELECT cid, cname, cdescFROM classesWHERE cid=#{cId};</select><resultMap id="ClazzMap" type="Clazz"><id column="cid" property="cId"></id><result column="cname" property="cName"></result><result column="cdesc" property="cDesc"></result></resultMap><select id="queryClazzByCid" resultMap="ClazzMap">SELECT cid,cname,cdescFROM classes cWHERE c.cid=#{cid};</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.StudentDao"><insert id="insertStudent" useGeneratedKeys="true" keyProperty="sId" timeout="3000" parameterType="Student">insert into students(sid,sname,sage,scid)values(#{sId},#{sName},#{sAge},#{sCid});</insert><select id="queryStudentByCid" resultType="Student" resultSets="java.util.List">select sid,sname,sage,scidfrom studentswhere scid=#{cId};</select><!--  连接查询 --><resultMap id="StudentClazzInnerJoinMap" type="Student"><id column="sid" property="sId"></id><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result><result column="cid" property="clazz.cId"></result><result column="cname" property="clazz.cName"></result><result column="cdesc" property="clazz.cDesc"></result></resultMap><select id="queryStudentByInnerJoin" resultMap="StudentClazzInnerJoinMap">SELECT sid, sname,sage,scid,cid,cname,cdescFROM students s INNER JOIN classes cON s.scid=c.cidWHERE s.sid=#{sid};</select><!--  关联查询  --><resultMap id="StudentClazzMap" type="Student"><id column="sid" property="sId"></id><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result><association property="clazz" select="com.kingyal.dao.ClazzDao.queryClazzByCid" column="scid"></association></resultMap><select id="queryStudentByAssociation" resultMap="StudentClazzMap">SELECT sid, sname,sage,scidFROM students sWHERE s.sid=#{sid};</select>
</mapper>

需要将上述两个xml文件加到mybatis的配置文件中:
在这里插入图片描述
给实体指定类名:

在这里插入图片描述

测试类

可重点关注queryStudentBySid()和queryStudentByAssociation(),他们分别通过连接查询的方式和子查询的方式实现classes表到students表的一对多查询:

public class ClazzDaoTest {@Testpublic void insertClazz() {SqlSession sqlSession = MybatisUtil.getSqlSession();try {Clazz clazz = new Clazz(0,"gaoyi", "it is gaoyi", null);ClazzDao clazzDao = sqlSession.getMapper(ClazzDao.class);int i = clazzDao.insertClazz(clazz);Assert.assertEquals(1, i);System.out.println(clazz);Student student1 = new Student("0001", "zhangsan", 13, clazz.getCId(), null, null);StudentDao studentDao = sqlSession.getMapper(StudentDao.class);i = studentDao.insertStudent(student1);Assert.assertEquals(1, i);System.out.println(student1);Student student2 = new Student("0002", "lisi", 16, clazz.getCId(),null ,null);i = studentDao.insertStudent(student2);Assert.assertEquals(1, i);System.out.println(student2);Student student3 = new Student("0003", "wangwu", 14, clazz.getCId(),null, null);i = studentDao.insertStudent(student3);Assert.assertEquals(1, i);System.out.println(student3);sqlSession.commit();} finally {sqlSession.rollback();}}@Testpublic void queryStudentByCid(){StudentDao studentDao = MybatisUtil.getMapper(StudentDao.class);List<Student> studentList = studentDao.queryStudentByCid(2);System.out.println(studentList);}@Testpublic void queryClazz() {ClazzDao clazzDao = MybatisUtil.getMapper(ClazzDao.class);List<Student> studentList = clazzDao.queryClazzByInnerJoin(2);System.out.println(studentList);}@Testpublic void queryClazzByAssociation() {ClazzDao clazzDao = MybatisUtil.getMapper(ClazzDao.class);List<Student> studentList = clazzDao.queryClazzByAssociation(2);System.out.println(studentList);}@Testpublic void queryStudentBySid() {StudentDao studentDao = MybatisUtil.getMapper(StudentDao.class);List<Student> studentList = studentDao.queryStudentByInnerJoin("0001");System.out.println(studentList);}@Testpublic void queryClazzByCid() {ClazzDao clazzDao = MybatisUtil.getMapper(ClazzDao.class);Clazz clazz = clazzDao.queryClazzByCid(2);System.out.println(clazz);}@Testpublic void queryStudentByAssociation() {StudentDao studentDao = MybatisUtil.getMapper(StudentDao.class);List<Student> studentList = studentDao.queryStudentByAssociation("0001");System.out.println(studentList);}
}

多对多关联

场景为查询哪些学生上哪些课程(学生还是用上述一对多关联时的学生表,学生相关的代码是基于上述已有类做补充),多对多关联时,中间要加一个表进行关联,因此加一个成绩表用来关联。

创建三张表
-- 学生表(已创建)
CREATE TABLE students (sid CHAR(5) NOT NULL,sname VARCHAR(20) NOT NULL,sage INT NOT NULL,scid INT NOT NULL 
);
-- 课程表
CREATE TABLE course(course_id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(50) NOT NULL
);
-- 成绩表
CREATE TABLE grades(sid CHAR(5) NOT NULL,cid INT NOT NULL,score INT NOT NULL
);
创建两个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {  //  已经创建private String sId;private String sName;private int sAge;private int sCid;private  Clazz clazz;private List<Course> courseList;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Course {private int courseId;private String courseName;private List<Student> studentList;
}
创建两个Dao接口
public interface StudentDao {  //  已经创建,基于此类补充了一个接口public int insertStudent(Student student);public List<Student> queryStudentByCid(int cId);public List<Student> queryStudentByInnerJoin(String sid);public List<Student> queryStudentByAssociation(String sid);public List<Student> queryStudentByCourseId(int courseId);
}
public interface CourseDao {public Course queryCourseByInnerJoin(int courseId);public Course queryCourseByAssociation(int courseId);
}
创建map文件

student还是使用一对多关联的map,基于此map做补充:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.StudentDao"><insert id="insertStudent" useGeneratedKeys="true" keyProperty="sId" timeout="3000" parameterType="Student">insert into students(sid,sname,sage,scid)values(#{sId},#{sName},#{sAge},#{sCid});</insert><select id="queryStudentByCid" resultType="Student" resultSets="java.util.List">select sid,sname,sage,scidfrom studentswhere scid=#{cId};</select><!--  连接查询 --><resultMap id="StudentClazzInnerJoinMap" type="Student"><id column="sid" property="sId"></id><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result><result column="cid" property="clazz.cId"></result><result column="cname" property="clazz.cName"></result><result column="cdesc" property="clazz.cDesc"></result></resultMap><select id="queryStudentByInnerJoin" resultMap="StudentClazzInnerJoinMap">SELECT sid, sname,sage,scid,cid,cname,cdescFROM students s INNER JOIN classes cON s.scid=c.cidWHERE s.sid=#{sid};</select><!--  关联查询  --><resultMap id="StudentClazzMap" type="Student"><id column="sid" property="sId"></id><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result><association property="clazz" select="com.kingyal.dao.ClazzDao.queryClazzByCid" column="scid"></association></resultMap><select id="queryStudentByAssociation" resultMap="StudentClazzMap">SELECT sid, sname,sage,scidFROM students sWHERE s.sid=#{sid};</select><resultMap id="StudentGradeMap" type="Student"><id column="sid" property="sId"></id><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result></resultMap><select id="queryStudentByCourseId" resultMap="StudentGradeMap">SELECT s.sid, s.sname, s.sage, s.scidFROM students s INNER JOIN grades gON g.sid=s.sidWHERE g.cid=#{courseId};</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kingyal.dao.CourseDao"><resultMap id="CourseMap" type="Course"><id column="course_id" property="courseId"></id><result column="course_name" property="courseName"></result><collection property="studentList" ofType="Student"><result column="sid" property="sId"></result><result column="sname" property="sName"></result><result column="sage" property="sAge"></result><result column="scid" property="sCid"></result></collection></resultMap><select id="queryCourseByInnerJoin" resultMap="CourseMap">SELECT course_id,course_name, s.sid, s.sname, s.sage, s.scidFROM course c INNER JOIN grades g INNER JOIN students sON c.course_id=g.cid AND g.sid=s.sidWHERE course_id=#{courseId}</select><resultMap id="CourseStudentMap" type="Course"><id column="course_id" property="courseId"></id><result column="course_name" property="courseName"></result><collection property="studentList" select="com.kingyal.dao.StudentDao.queryStudentByCourseId" column="course_id"></collection></resultMap><select id="queryCourseByAssociation" resultMap="CourseStudentMap">SELECT course_id,course_nameFROM courseWHERE course_id=#{courseId}</select>
</mapper>

需要将上述两个xml文件加到mybatis的配置文件中:

在这里插入图片描述
给实体指定类名:
在这里插入图片描述

测试类

可重点关注queryCourseByInnerJoin()和queryCourseByAssociation(),他们分别通过连接查询的方式和子查询的方式实现students表到course表的多对多查询:

public class CourseDaoTest {@Testpublic void queryCourseByInnerJoin() {CourseDao courseDao = MybatisUtil.getMapper(CourseDao.class);Course course = courseDao.queryCourseByInnerJoin(3);System.out.println(course);}@Testpublic void queryStudentByCourseId() {StudentDao studentDao = MybatisUtil.getMapper(StudentDao.class);List<Student> students = studentDao.queryStudentByCourseId(3);System.out.println(students);}@Testpublic void queryCourseByAssociation() {CourseDao courseDao = MybatisUtil.getMapper(CourseDao.class);Course course = courseDao.queryCourseByAssociation(3);System.out.println(course);}
}

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

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

相关文章

Apache Bench(ab )压力测试

目录 参数说明示例1&#xff1a;压力测试示例2&#xff1a;测试post接口post数据文件该如何编写&#xff1f; apr_pollset_poll: The timeout specified has expired (70007)apr_socket_recv: Connection reset by peer (104)参考 参数说明 官方文档参考这里。 ab -c 100 -n …

解决vscode内置视图npm脚本操作报权限问题

项目背景 当我们使用 vscode 运行NPM脚本时却爆红了&#xff0c;提示系统上禁止运行脚本。 解决思路 竟然提示权限不够&#xff0c;那么咱们就从系统权限出发&#xff0c;vscode右键以管理员身份运行 在集成终端中输入一下命令 # get-executionpolicy是PowerShell中的命令,用…

人工智能水印技术入门:工具与技巧

近几个月来&#xff0c;我们看到了多起关于“深度伪造 (deepfakes)”或人工智能生成内容的新闻报道&#xff1a;从 泰勒斯威夫特的图片、汤姆汉克斯的视频 到 美国总统乔拜登的录音。这些深度伪造内容被用于各种目的&#xff0c;如销售产品、未经授权操纵人物形象、钓鱼获取私人…

学不动系列-eslint

ESLint 介绍在最简单的项目使用eslint,包括eslint的vscode插件的使用&#xff0c;自动化格式代码&#xff0c;自动化修复代码&#xff0c;和webpack&#xff0c;vite的配合使用 单独使用 第一步&#xff1a;构建一个空项目 npm init -y 在根目录新建文件./src/app.js&#…

[spark] RDD 编程指南(翻译)

Overview 从高层次来看&#xff0c;每个 Spark 应用程序都包含一个driver program&#xff0c;该程序运行用户的main方法并在集群上执行各种并行操作。 Spark 提供的主要抽象是 resilient distributed dataset&#xff08;RDD)&#xff0c;它是跨集群节点分区的元素集合&…

生成对抗网络

生成对抗网络 GAN 什么是GAN GAN含义&#xff1a;生成对抗网络&#xff08;Generative Adversarial Networks&#xff09;&#xff0c;主要做目标判别&#xff0c;应用在图像分类、语义分割、目标检测。 GAN简述&#xff1a;GAN包括生成器Generator(G)、判别模型Discriminat…

【架构之路】糟糕程序员的20个坏习惯,切记要改掉

文章目录 强烈推荐前言&#xff1a;坏习惯:总结&#xff1a;强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 前言&#xff1a; 优秀的程序员…

关于电脑一天24小时多少度电电脑的一天用电量计算

随着这几年物价的上涨&#xff0c;一些地区的电价越来越高&#xff0c;而我们经常需要使用电脑&#xff0c;那么一台电脑一天24小时用多少度电呢&#xff1f; 如何计算电脑一天的用电量&#xff1f; 让我们跟随小编来了解更多吧。 1、功耗、主机箱功耗 现在的计算机中&#xf…

DTD、XML阐述、XML的两种文档类型约束和DTD的使用

目录 ​编辑 一、DTD 什么是DTD&#xff1f; 为什么要使用 DTD&#xff1f; 内部 DTD 声明 具有内部 DTD 的 XML 文档 外部 DTD 声明 引用外部 DTD 的 XML 文档 二、XML 什么是XML&#xff1f; XML 不执行任何操作 XML 和 HTML 之间的区别 XML 不使用预定义的标记…

js 面试 什么是WebSockets?HTTP和HTTPS有什么不同?web worker是什么?

概念&#xff1a; webSocket 是一种在客户端和服务端之间建立持久连接的协议&#xff0c;它提供全双工通信通道&#xff0c;是服务器可以主动向客户端推送数据&#xff0c;同时也可以接受客户端发送的数据。 1 webSocket与https区别&#xff1f; 在网络通信中&#xff0c;We…

SVN教程-SVN的基本使用

SVN&#xff08;Apache Subversion&#xff09;是一款强大的集中式版本控制系统&#xff0c;它在软件开发项目中扮演着至关重要的角色&#xff0c;用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比&#xff0c;SVN 的集中式架构使得团队能够更加协同地进行开发&…

如何进行写作的刻意练习

写作从来不可能一蹴而就&#xff0c;而是一件需要我们持续坚持、努力的事情。 人如果没有目标就会迷失方向&#xff0c; 既然需要长期的坚持&#xff0c;就需要我们根据自身情况制定每一阶段的目标。 目标的制定要清晰可达&#xff0c;不能模棱两可&#xff0c;要认证对待。 …

基于springboot+vue的二手手机管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【Vue】插槽-slot

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 插槽 作用&#xff1a;让组件内部一些 结构 支持 自定义 插槽的分类&#xff1a; 默认插槽。具名插槽。 基础语法 组件内需要定制的结构部分&…

WEB漏洞 逻辑越权之支付数据篡改安全

水平越权 概述&#xff1a;攻击者尝试访问与他拥有相同权限的用户的资源 测试方法&#xff1a;能否通过A用户操作影响到B用户 案例&#xff1a;pikachu-本地水平垂直越权演示-漏洞成因 1&#xff09;可以看到kobe很多的敏感信息 2&#xff09;burp抓包&#xff0c;更改user…

Codeforces Round 929 (Div. 3)(A,B,C,D,E,F,G)

这场没考什么算法&#xff0c;比较水&#xff0c;难度也不是很高。比赛链接 硬要说的话E有个 前缀和 加 二分&#xff0c;F是数学BFS&#xff0c;G是个构造 A. Turtle Puzzle: Rearrange and Negate 题意&#xff1a; 给你一个由 n n n 个整数组成的数组 a a a 。您必须对…

IOC 和 AOP

IOC 所谓的IOC&#xff08;inversion of control&#xff09;&#xff0c;就是控制反转的意思。何为控制反转&#xff1f; 在传统的程序设计中&#xff0c;应用程序代码通常控制着对象的创建和管理。例如&#xff0c;一个对象需要依赖其他对象&#xff0c;那么它会直接new出来…

LNMP架构搭建

前言 LNMP架构是一种用于搭建Web服务器环境的解决方案&#xff0c;它由Linux、Nginx、MySQL&#xff08;或MariaDB&#xff09;、PHP&#xff08;或Python或Perl&#xff09;这四个开源软件组成。这种架构通常用于搭建高性能的网站和Web应用程序。 目录 一、编译安装nginx …

MySQL里的两个“二次”

文章中所有图片均来自网络 一、double write 第一个二次是mysql一个崩溃恢复很重要的特性-重复写入。 doublewrite缓冲区是位于系统表空间中的存储区域&#xff0c;在该区域中&#xff0c;InnoDB会在将页面写入数据文件中的适当位置之前&#xff0c;从InnoDB缓冲池中刷新这些页…

React中使用useActive

1.引入 import { useActivate } from "react-activation";2.React Activation 在React中使用react-activation,其实就是类似于Vue中的keep-alive&#xff0c;实现数据的缓存&#xff1b; 源码&#xff1a; import { ReactNode, ReactNodeArray, Context, Component…