MyBaits——MyBatis的CRUD操作、别名配置、属性配置、查询结果映射、Mapper组件、参数处理、注解开发
目录
- 一、MyBatis的CRUD操作
- 二、MyBatis拓展
- 1、别名配置处理
- 1.2、自定义别名
- 1.3、系统自带的别名
- 2、属性配置处理
- 3、查询结果映射
- 3.1、使用给字段起别名的方式
- 3.2、resultMap元素
- 4、Mapper组件
- 4.1、Mapper接口
- 5、参数处理
- 6、# 和 $ 的区别
- 1、别名配置处理
- 三、MyBatis使用注解开发
- Insert注解
- Delete注解
- Update注解
- Select注解
MyBatis文档
一、MyBatis的CRUD操作
跳转到目录
- 编写接口
public interface UserMapper {// 查询所有用户List<User> getUserList();// 根据id来查询用户User getUser(int id);// 根据id来更新用户信息int updateUser(User user);// 插入一条用户信息int insertUser(User user);// 根据id来删除用户int deleteUser(int id);
}
- 编写mybatis映射文件/Mapper文件
select元素: 专门用来做查询的SQL
-id属性: 唯一标识,用来标识某一条SQL语句
-parameterType属性: 表示执行该SQL语句需要的参数的类型(建议不写),MyBatis可以自行推断出来
-resultType属性: 把结果集中每一行数据封装成什么类型的对象
insert元素:
获取自动增长的主键
useGeneratedKeys属性: 是否需要返回自动生成的主键
keyProperty: 把自动生成的主键值设置到对象的哪一个属性上
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间,类似包的概念: namespace:绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.sunny.dao.UserMapper"><!--select元素: 专门用来做查询的SQL-id属性: 唯一标识,用来标识某一条SQL语句-parameterType属性: 表示执行该SQL语句需要的参数的类型(建议不写),MyBatis可以自行推断出来-resultType属性: 把结果集中每一行数据封装成什么类型的对象--><select id="getUserList" resultType="com.sunny.domain.User">SELECT * FROM user;</select><!-- #{id} 相当于在测试方法中selectOne传递过来的值 --><select id="getUser" parameterType="int" resultType="com.sunny.domain.User">SELECT * FROM user WHERE id = #{id};</select><update id="updateUser" parameterType="com.sunny.domain.User">UPDATE user SET name = #{name}, pwd = #{pwd} WHERE id = #{id};</update><!--这里的parameterType可以不写insert元素:获取自动增长的主键useGeneratedKeys属性: 是否需要返回自动生成的主键keyProperty: 把自动生成的主键值设置到对象的哪一个属性上--><insert id="insertUser" parameterType="com.sunny.domain.User" useGeneratedKeys="true" keyProperty="id">INSERT INTO user (id, name, pwd) VALUES (null , #{name}, #{pwd});</insert><delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id};</delete></mapper>
- UserMapperTest
public class UserMapperTest {/*** 自定义日志操作*/private static Logger logger = Logger.getLogger(UserMapperTest.class);@Testpublic void testLogger() throws Exception {// 如果日志输出级别为INFO,则输出if (logger.isInfoEnabled()) {logger.info("银行转账操作");}if (logger.isDebugEnabled()) {logger.debug("查询数据库");}if (logger.isTraceEnabled()) {logger.trace("连接数据库");}if (logger.isTraceEnabled()) {logger.trace("执行SQL");}if (logger.isDebugEnabled()) {logger.debug("转账");}if (logger.isInfoEnabled()) {logger.info("银行转账成功");}}/*** 查询所有用户** @throws IOException*/@Testpublic void testQueryUserList() throws IOException {//1. 获得sqlSession对象// SqlSession sqlSession = MybatisUtils.getSqlSession();//1. 从classpath路径去加载MyBatis全局配置文件:mybatis-config.xmlInputStream in = Resources.getResourceAsStream("mybatis-config.xml");//2. 创建sqlSessionFactory对象,好比是DataSourceSqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//3. 创建sqlSession对象,好比是ConnectionSqlSession sqlSession = factory.openSession();//4. 具体操作// 执行SQL(方式一)/*执行SQL: UserMapper.xml中的namespace:绑定一个对应的Dao/Mapper接口相当于UserMapper接口的实现类,这里用UserMapper.class,就是面向接口编程,相当于获取UserMapper的实现类,然后通过实现类来调用接口方法*/UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.getUserList();// 方式二
// List<User> userList = sqlSession.selectList("com.sunny.dao.UserDao.getUserList");for (User user : userList) {System.out.println(user);}// 关闭sqlSessionsqlSession.close();}/*** 查询id为1的用户** @throws IOException*/@Testpublic void testQueryOneUser() throws IOException {// 加载全局配置文件InputStream in = Resources.getResourceAsStream("mybatis-config.xml");// 构建sqlSessionFactory工厂类对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 根据sqlSession类对象来创建SqlSession对象SqlSession sqlSession = factory.openSession();// sqlSession相当于Connection,来执行SQL语句//User user = sqlSession.selectOne("com.sunny.dao.UserMapper.getUser", 1L);UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUser(1);System.out.println(user);sqlSession.close();}/*** 修改一条语句的内容** @throws Exception*/@Testpublic void testUpdateUser() throws Exception {User user = new User();user.setId(4);user.setName("土土土雅");user.setPwd("10004");// 获取SqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();// 方式一UserMapper mapper = sqlSession.getMapper(UserMapper.class);int update = mapper.updateUser(user);// 方式二(以前的,不推荐写)// int update = sqlSession.update("com.sunny.dao.UserMapper.update",user);if (update > 0) {System.out.println("成功修改了:" + update + " 条语句!");}// 增删改必须提交事务sqlSession.commit();// 关闭资源sqlSession.close();}/*** 插入一条数据* @throws Exception*/@Testpublic void testInsertUser() throws Exception {// 获取sqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();/*执行SQL: UserMapper.xml中的namespace:绑定一个对应的Dao/Mapper接口相当于UserMapper接口的实现类,这里用UserMapper.class,就是面向接口编程,相当于获取UserMapper的实现类,然后通过实现类来调用接口方法*/UserMapper mapper = sqlSession.getMapper(UserMapper.class);User u = new User("coder", "10007");int count = mapper.insertUser(u);if (count > 0){System.out.println("插入成功!");}// 提交事务sqlSession.commit();// 关闭资源sqlSession.close();System.out.println(u);}/*** 根据id来删除用户* @throws Exception*/@Testpublic void testDeleteUser() throws Exception{// 加载mybatis全局配置文件InputStream in = Resources.getResourceAsStream("mybatis-config.xml");// 构建SqlSessionFactory工厂对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 根据工厂对象来创建SqlSession对象SqlSession sqlSession = factory.openSession();// 根据sqlSession对象来获取mapperUserMapper mapper = sqlSession.getMapper(UserMapper.class);// 通过mapper来调用接口方法int count = mapper.deleteUser(5);if (count > 0){System.out.println("删除成功");}// 提交事务sqlSession.commit();// 关闭资源sqlSession.close();}
}
二、MyBatis拓展
跳转到目录
1、别名配置处理
跳转到目录
- Mapper.xml中的查询操作
<select id="getUserList" resultType="com.sunny.domain.User">SELECT * FROM user;</select><!-- #{id} 相当于在测试方法中selectOne传递过来的值 --><select id="getUser" resultType="com.sunny.domain.User">SELECT * FROM user WHERE id = #{id};</select>
注意: 当写resultType结果类型时,都使用全限定类名com.sunny.domain.User
,很麻烦,可以使用类型别名
使用别名(typeAlias)是一个类全限定名太长,不方便.MyBatis中别名不区分大小写
1.2、 自定义别名
跳转到目录
- 在全局配置文件mybatis-config.xml中定义别名
- 直接给某一个类起别名
<typeAlias type="com.sunny.domain.User" alias="User" />
- 给一个包(包含子包)中所有的类起别名
一般写到domain包就可以了,自动为该包中的类名起别名,默认的别名就是类名首字母小写(不区分大小写)<package name="com.sunny.domain"/>
- @Alias注解可以用于设置类的别名(优先级最高)
<!--类型别名--><!--在实体类比较少的时候,使用第一种方式。如果实体类十分多,建议使用第二种方式。--><typeAliases><!--<typeAlias type="com.sunny.domain.User" alias="User" />--><!--一般写到domain包就可以了,自动为该包中的类名起别名,默认的别名就是类名首字母小写(不区分大小写)--><package name="com.sunny.domain"/></typeAliases>
前两种设置别名的使用:
-
在实体类比较少的时候,使用第一种方式。
-
如果实体类十分多,建议使用第二种方式。
-
Mapper.xml中的查询操作(使用别名)
<select id="getUserList" resultType="com.sunny.domain.User">SELECT * FROM user;</select><!-- #{id} 相当于在测试方法中selectOne传递过来的值 --><select id="getUser" resultType="com.sunny.domain.User">SELECT * FROM user WHERE id = #{id};</select>
注意: 在全局配置文件中<configuration>
标签中属性设置,日志设置,别名设置.都有严格的顺序,不能打乱.
eg:
- UserMapper.java
public interface UserMapper {// 只查询User表的id和name列List<User> queryUserByIdAndName();List<Map<Integer, Object>> queryUserByIdAndName2();
}
- UserMapperTest
public class UserMapperTest {/*** 只查询User表中的id和name列* @throws Exception*/@Testpublic void testQueryUserByIdAndName(){/*这种方式来查询User表中的部分列,其他列会显示null,可以将*//*SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.queryUserByIdAndName();for (User user : users) {System.out.println(user);}*/SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<Map<Integer, Object>> maps = mapper.queryUserByIdAndName2();for (Map<Integer, Object> map : maps) {System.out.println(map);}}
}
- UserMapper.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">
<!--命名空间,类似包的概念: namespace:绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.sunny.dao.UserMapper"><!--只查询user表的id和name列-->
<!-- <select id="queryUserByIdAndName" resultType="User">-->
<!-- SELECT id,name FROM user;-->
<!-- </select>--><select id="queryUserByIdAndName2" resultType="map">SELECT id, name FROM user;</select></mapper>
1.3、 系统自带的别名
跳转到目录
一般用于接口方法返回值类型, 当接口方法返回为为int时, 可以在Mapper.xml文件中ResultType设置为int(默认), _int(别名)
,对大小写不敏感.
2、 属性配置处理
跳转到目录
property元素
- 修改mybatis-config.xml文件,新增
<!--属性配置--><properties><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="1111"/></properties>
- 数据库配置中,使用$表达式获取属性值
<!--连接池--><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource>
db.properties文件
- 新增
db.properties
文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=1111
- 修改mybatis-config.xml文件:
<!--属性配置--><properties resource="db.properties"/>
3、 查询结果映射
跳转到目录
- 在CRUD中查询方法直接通过设置别名的方式
resultType="User"
来设置MyBatis把结果集中的每一行数据包装为User对象,此时必须要求数据表中的列名和对象的属性名一一对应.
如果表中的列名和对象属性名不匹配,此时的解决方案是?
3.1、 使用给字段起别名的方式
跳转到目录
- 将关系表中的列名设置和对象中属性同名
<select id="queryUserList" resultMap="BaseResultMap">SELECT u_id AS id, u_name AS name, u_pwd AS pwd FROM user1; </select>
3.2、 resultMap元素
跳转到目录
- 待解决问题: 结果集(表)中的列名和对象中的属性名称不匹配
- 解决方案: 使用resultMap元素
resultMap元素: 结果集对象的映射id属性: 当前Mapper文件中resultMap的唯一名称type属性: 把结果集中的每一行数据封装成什么类型的对象子元素:id元素: 功能和result一样,如果是主键,建议使用id元素,提升性能result元素: 匹配对象中的哪一个属性对应表中的哪一个列
<!--命名空间,类似包的概念: namespace:绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.sunny.dao.UserMapper"><!--查询一共有多少用户--><select id="queryUserCount" resultType="int">SELECT COUNT(id) FROM user1;</select><resultMap id="BaseResultMap" type="User"><result column="u_id" property="id" /><result column="u_name" property="name" /><result column="u_pwd" property="pwd" /></resultMap><select id="queryUserList" resultMap="BaseResultMap">select u_id, u_name, u_pwd from user1;</select></mapper>
4、 Mapper组件
跳转到目录
Mapper组件: Mapper接口 + Mapper文件
下面有两种方式通过sqlSession
来获取SQL并执行,下面说说两种方式的优缺点:
/*** 查询id为1的用户** @throws IOException*/@Testpublic void testQueryOneUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();// 使用方式一: 来找到SQL并执行//User user = sqlSession.selectOne("com.sunny.dao.UserMapper.getUser", 1L);// 使用方式二: 来找到SQL并执行UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 实际上底层调用的还是sqlSession的方法,注意:sqlSession调用CRUD方法只能传递一个参数User user = mapper.getUser(1);System.out.println(user);sqlSession.close();}
- 使用
namespace.id
(方式一)的方式去找到SQL元素的方式,会有几个问题:
- namespace.id使用的是String类型,一旦编写错误,只有等到运行代码才能报错。
- 传入的实际参数类型不能被检查。
- 每一个操作的代码模板类似。
这种方式相对于方式二,我觉得唯一的优点就是在接口中不需要定义接口方法,直接和映射文件关联起来了.
解决方案: 使用Mapper接口,类似DAO接口,在Mapper接口中定义每一个操作方法.(上面已经使用过,这里总结一下)
4.1、 Mapper接口
跳转到目录
使用Mapper组件:
-
创建一个Mapper接口(类似于DAO接口) , 接口的要求:
①这个接口的全限定名称对应着 Mapper文件的namespace ;
②这个接口中的方法和Mapper文件中的SQL元素一一对应 ;方法的名字对应SQL元素的id ;方法的参数类型对应SQL元素中定义的paramterType类型( -般不写) ;方法的返回类型对应SQL元素中定义的resultType/resultMap类型;
-
创建SqlSession ;
-
通过SqlSession.getMapper(XxxMapper.class)方法得到一个Mapper对象;
-
调用Mapper对象上的方法完成对象的CURD ;
5、 参数处理
跳转到目录
注意: 在SqlSession中的CRUD方法最多只能传递一个惨. 即使上面的方式二,底层仍是使用SqlSession来调用CRUD方法,如何来解决CRUD方法中只能传递一个参数呢?
方式一: 将参数封装到一个JavaBean中,将JavaBean对象作为参数传递
方式二: 使用Map来封装参数_键值对的方式
方式三: 使用注解 @Param
Param注解中的字符串就是Map中的key
- ClientMapper.java
public interface ClientMapper {// 方式一: 把多个参数封装成JavaBeanClient login1(LoginVO vo);// 方式二: 使用Map对象封装多个参数Client login2(Map<String, Object> paramMap);// 方式三: 使用Param注解, 原理是方式二. Param注解中的字符串就是Map中的keyClient login3(@Param("username") String username, @Param("password") String password);
}
- ClientMapper.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">
<!--命名空间,类似包的概念: namespace:绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.sunny.dao.ClientMapper"><select id="login1" parameterType="LoginVo" resultType="Client">SELECT id, username, password FROM client WHERE username = #{username} AND password = #{password};</select><select id="login2" parameterType="map" resultType="Client">SELECT id, username, password FROM client WHERE username = #{username} AND password = #{password};</select><select id="login3" resultType="Client">SELECT id, username, password FROM client WHERE username = #{username} AND password = #{password};</select></mapper>
- ClientMapperTest.java
public class ClientMapperTest {/*** 方式一: 使用JavaBean来封装*/@Testpublic void testLogin1(){LoginVO vo = new LoginVO("zy", "1111");SqlSession sqlSession = MybatisUtils.getSqlSession();ClientMapper mapper = sqlSession.getMapper(ClientMapper.class);// mapper调用方法,实际底层仍是sqlSession来调用select方法Client client = mapper.login1(vo);System.out.println(client);sqlSession.close();}/*** 使用Map来封装*/@Testpublic void testLogin2(){Map<String, Object> paramMap = new HashMap<String, Object>();paramMap.put("username", "zy");paramMap.put("password", "1111");SqlSession sqlSession = MybatisUtils.getSqlSession();ClientMapper mapper = sqlSession.getMapper(ClientMapper.class);// mapper调用方法,实际底层仍是sqlSession来调用select方法.// 注意: sqlSession调用的方法,只能传递一个参数.Client client = mapper.login2(paramMap);System.out.println(client);sqlSession.close();}/*** 方式三: 使用Param注解,原理是方式二*//*HelloWorld*/@Testpublic void testLogin3(){SqlSession sqlSession = MybatisUtils.getSqlSession();ClientMapper mapper = sqlSession.getMapper(ClientMapper.class);// mapper调用方法,实际底层仍是sqlSession来调用select方法.// 注意: sqlSession调用的方法,只能传递一个参数.Client client = mapper.login3("zy", "1111");System.out.println(client);sqlSession.close();}
}
6、 # 和 $ 的区别
跳转到目录
-
使用 #
Preparing: SELECT id, username, password FROM client WHERE username = ? AND password = ?; Parameters: zy(String), 1111(String)
-
使用 $
Preparing: SELECT id, username, password FROM client WHERE username = root AND password = 1111; Parameters:
一、两者的异同
相同: 都可以通过 # 和 $ 来获取对象中的信息
不同:
1. 使用#传递的参数会先转换为占位符?, 通过设置占位符参数的方式来设置值(会给值使用单引号引起来)
2. 使用$传递的参数,直接把解析出来的数据作为SQL语句的一部分
二、推论
#: 好比使用PrepareStatement,不会导致SQL注入问题,相对安全
$: 好比使用Statement, 可能会导致SQL注入问题,相对不安全.
三、如何选择
- 如果需要设置占位符参数的地方,全部使用 # ,也就是SQL之后可能使用 ? 的情况
- 如果我们写的内容应该作为SQL的一部分, 此时使用 $ , 比如 排序、分组查询等
三、MyBatis使用注解开发
跳转到目录
- 之前的开发MyBatis都使用XML来配置,也可以直接用注解来开发,当SQL很复杂的时候,推荐使用XML来配置
注意: 使用注解来配置的话, 就不需要Mapper.xml文件了,在主配置文件中注册映射文件的方式就要改为:
<mapper class="com/sunny/dao/UserMapper" />
在接口方法上添加注解
- Insert注解
跳转到目录
// 插入一条用户信息@Insert("INSERT INTO user (id, name, pwd) VALUES (null , #{name}, #{pwd})")@Options(useGeneratedKeys = true, keyProperty = "id") //生成主键int insertUser(User user);
- Delete注解
跳转到目录
// 根据id来删除用户@Delete("DELETE FROM user WHERE id = #{id}")int deleteUser(int id);
- Update注解
跳转到目录
// 根据id来更新用户信息@Update("UPDATE user SET name = #{name}, pwd = #{pwd} WHERE id = #{id}")int updateUser(User user);
- Select注解
跳转到目录
// 查询某个用户@Select("SELECT id AS u_id, name AS u_name, pwd AS u_pwd FROM user WHERE id = ${id}")@ResultMap("BaseResultMap")User getOneUser(int id);// 查询所有用户@Select("SELECT id AS u_id, name AS u_name, pwd AS u_pwd FROM user")@Results(id = "BaseResultMap", value = {@Result(column = "u_id", property = "id"),@Result(column = "u_name", property = "name"),@Result(column = "u_pwd", property = "pwd")})List<User> getUserList();
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 石头剪刀布
4石头剪刀布(10分) 题目内容: 石头、剪刀、布分别用1,2,3表示。输入数字,输出相应的词,如果输的数不是1,2,3,输出“不认识”。 输入格式: 整数 输出格式: “石头”、“剪刀”、“布"或"不认识"四个词之一。 输入样例: 1 输出样例: 石头 技巧提示:表示…...
2024/4/21 23:54:27 - 听课笔记
哲学: 我可以学+多去社交+安逸使人死亡 目标 明确自己未来的样子,符合实际。通过结果(证书,以考促学)来反应自己学会了 一周一个新技术, 方法: 费曼学习法。把自己的想法教给别人 不正确的方法:996的人是有问题的。练武不练功,到老一场空。 架构师的最难的地方是系统…...
2024/4/14 11:53:10 - clipboardjs实现点击拷贝复制
1、文档 英文:https://clipboardjs.com/ 中文http://www.clipboardjs.cn/ 2、安装 npm install clipboard --save3、使用示例 demo.vue <template><div><input type="text" v-model="message" /><button class="btn" :data…...
2024/4/25 3:38:42 - SpringBoot源码分析之@Scheduled
Springboot写上注解@Scheduled就可以实现定时任务,这里对其源码做一点分析@Service public class MyScheduled {@Scheduled(cron="${time.cron}")void paoapaoScheduled() {System.out.println("Execute at " + System.currentTimeMillis());} }配置文件1…...
2024/4/14 11:53:02 - 【解决方案】log4j2配置日志打印时区
日志设置时区:<!--log4j2 配置timezone --> <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS}{GMT+8} %-5level [%thread] %logger{36}-[%M]-[%L] - %msg%n" />{GMT+8} 可将日志打印日期为:GMT时间+8小时,即中国时区时…...
2024/4/14 11:52:58 - html2canvas实现页面截图
文档: https://html2canvas.hertzen.com/ 安装 npm install --save html2canvas简单实例 <template><div id="capture" style="padding: 10px; background: #f5da55"><h4 style="color: #000; ">Hello world!</h4><…...
2024/4/14 11:52:54 - 不定积分的概念和性质
一、原函数与不定积分的概念 1.1、原函数1.2、原函数存在定理: 连续函数一定有原函数1.3、不定积分定义二、基本积分表三、不定积分的性质...
2024/4/24 15:38:44 - Ubuntu部署和体验Nexus3
关于Nexus 如下图,在局域网部署了Nexus之后,可以缓存中央仓库的jar,开发的二方库发布到Nexus上,局域网内的其他人也可以从Nexus下载这些二方库使用:环境信息 本次实战是在Linux服务器上通过Docker安装Nexus3:操作系统:Ubuntu 18.04.3 LTS Docker:19.03.5 Nexus:3.19.1…...
2024/4/24 14:40:39 - 概率论与数理统计初学印象(浙大四版+猴博士网课)
本科时专业必修课只有微积分和线代,概率论与数理统计为选修,但自己怠惰畏难没有去选,致使时至今日不得不选择自学,也算一大遗憾…… 去年七月开始看浙大四版的pdf,学了前两章便暂时搁置。这段时间由于疫情许多慕课免费,我也跟随潮流选了数门,其中包括猴博士的四小时课程…...
2024/4/22 5:55:51 - 第一周 UGUI mvvm框架、UIText本地化、csv转json文件、从谷歌下载csv表格
第一周 新项目熟悉 UGUI mvvm框架、UIText本地化、csv表格转为json文件、从谷歌服务器下载csv表工具制作 一、UGUI Mvvm框架 第一次接触mvvm框架,首先不管是什么,先看看这个东西是怎么用的,之后再来分析一下。 首先需要再 canvas 节点上放置 Root Model View,这个脚本会在运…...
2024/4/14 11:52:37 - MATALB断点颜色变灰色
Matlab调试时遇到断点的颜色发生变化 在操作matlab调试的时候,发现设置的断点由红色变成了灰色,如图你会发现这种断点可以放在任何位置,而平常的红色断点只能放在有效代码那一行,不能放在注释行。这个问题就算你点了清除所有断点也还是解决不了。 主要原因是当前节A在调试的…...
2024/4/24 17:37:00 - Java 知识点 --- 静态代码块初始化问题
1.变量是 static final 修饰的“编译期常量”,如 public static final String c = "C";public class Test {public static void main(String[] args) {System.out.println(A.c);}}class A {public static final String c = "C";static {System.out.print(&…...
2024/4/25 13:44:25 - 您没有可用的IOS App套装ID 无法创建苹果app的问题
这两天在提交苹果应用的时候遇到下面问题:应该是两天可能苹果系统的同步问题,添加了应用id但在https://appstoreconnect.apple.com/ 后台无法创建APP,无法选择新添加的应用id创建APP。 这个问题是因为苹果那边系统同步的问题,经测试,新添加的应用id要过一天才能同步过来,…...
2024/4/14 11:52:26 - java笔记第四章续
...
2024/4/14 10:23:06 - Matlab2-特殊矩阵
通用的特殊矩阵zeros函数:产生全0矩阵,即零矩阵。 ones函数:产生全1矩阵,即幺矩阵。 eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。 rand函数:产生一个矩阵,矩阵元素在(0,1)上服从正态分布。 fix(a + (b-a+1)*rand() ):产生一个矩阵,其中元素在[a…...
2024/4/14 11:52:22 - SpringBoot第一章:SpringBoot简介
(这只是个人的学习笔记记录,如有哪里写得错误,可以指出,会做出修改)一、什么是SpringBoot?SpringBoot它本身并不是提供spring框架的核心特性以及扩展功能,只是用于快速,敏捷地开发新一代基于spring框架的应用程序,也就是说,它并不是用来替代spring的解决方案,而是和…...
2024/4/16 14:03:06 - c++面向对象程序设计 笔记一
1.版本c++98 1.0c++03 TR1c++11 2.0c++14(语言, 标准库)2.书籍《C++ Primer》《The C++ programming language》《Effective C++》 (3 bu)《The C++ STANdard library》《STL 源码剖析》...
2024/4/24 3:41:48 - Python之递归
python之递归 递归的特征:有调用自身函数的行为 2.有正确的返回条件(不能写成死循环了) 1. 汉诺塔 def hanoi(n,x,y,z): #n代表盘子的层数(个数),x代表盘子的初始位置,y代表盘子中间缓存的位置,z代表盘子的目的位置,这三个位置一定要搞清楚!!!if n == 1:print(x,"-->…...
2024/4/14 11:52:10 - JavaIO流之文件路径
斜杠和反斜杠正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。在Unix/Linux中,路径的分隔采用正斜"/",比如"cd /home/java";而在Windows中,路径分隔采用反斜杠"\",比如"F:\yihong_\book"。我…...
2024/4/24 11:04:40 - 数据压缩·课前任务二(PCA)
要求:主成分分析:步骤、应用及代码实现目的: 降维。简介: 通俗易懂见详解:https://www.matongxue.com/madocs/1025.html 这里举一个例子帮助理解。 首先我们观察一下下面这个矩阵:会发现,这个矩阵的第一列,第二列,第四列这三个列向量在空间中的指向是没有变的,仅仅…...
2024/4/25 4:08:24
最新文章
- 建造者模式(装修公司装修套餐)
目录 定义 装修公司装修套餐 物料接⼝ 吊顶(ceiling) ⼀级顶 ⼆级顶 涂料(coat) 多乐⼠ ⽴邦 地板(floor) 德尔 圣象 地砖(tile) 东鹏 ⻢可波罗 代码实现 定义装修包接⼝ 装修包实现 建造者⽅法 测试验证 定义 建造者模式所完成的内容就是通过将多个简单对…...
2024/4/26 0:15:27 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - golang的引用和非引用总结
目录 概述 一、基本概念 指针类型(Pointer type) 非引用类型(值类型) 引用类型(Reference Types) 解引用(dereference) 二、引用类型和非引用类型的区别 三、golang数据类型…...
2024/4/18 18:39:21 - xv6项目开源—05
xv6项目开源—05.md 理论: 1、设备驱动程序在两种环境中执行代码:上半部分在进程的内核线程中运行,下半部分在中断时执行。上半部分通过系统调用进行调用,如希望设备执行I/O操作的read和write。这段代码可能会要求硬件执行操作&…...
2024/4/23 6:25:25 - 论文阅读AI工具链
文献检索 可以利用智谱清言来生成合适的文献检索式,并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时,您可以使用类似的逻辑来构建您的搜索式,但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索,但是…...
2024/4/23 6:25:51 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/25 11:51:20 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/25 18:39:24 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/25 18:38:39 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/25 18:39:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/25 18:39:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/25 13:39:44 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/25 18:39:12 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/25 13:19:01 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/25 18:38:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57