首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,087 阅读
2
类的加载
742 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
589 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
390
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
157
篇与
的结果
2020-12-13
多对一
多对一处理多对一:多个学生对应一个老师对学生而言:关联,关联一个老师【多对一】对老师而言,集合,一个老师有很多学生【一对多】Demo实例:CREATE TABLE `teacher`( `id` int(11) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, PRIMARY KEY (id) )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO teacher(`id`,`name`) VALUES(1,'孙笑川'); CREATE TABLE `student`( `id` int(11) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `tid` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fktid` (`tid`), CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO student(`id`,`name`,`tid`) VALUES(1,'小明',1); INSERT INTO student(`id`,`name`,`tid`) VALUES(2,'小红',1); INSERT INTO student(`id`,`name`,`tid`) VALUES(3,'小蓝',1); INSERT INTO student(`id`,`name`,`tid`) VALUES(4,'小绿',1); INSERT INTO student(`id`,`name`,`tid`) VALUES(5,'小华',1);测试环境搭建:1、导入Lombok2、新建实体类Teacher,Student3、建立Mapper接口4、建立Mapper.xml5、在mybatis-config.xml核心配置文件中注册绑定接口6、测试查询是否成功按照嵌套查询处理:<mapper namespace="com.sw.dao.StudentMapper"> <select id="findStudent" resultMap="StudentTeacher"> select * from student; </select> <resultMap id="StudentTeacher" type="Student"> <result property="id" column="id"/> <result property="name" column="name"/> <!--复杂属性需要单独处理 对象:association 集合:collection --> <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <select id="getTeacher" resultType="Teacher"> select * from teacher where id = #{id}; </select> </mapper>按照结果嵌套处理:<!--按结果集嵌套处理--> <select id="findStudent2" resultMap="StudentTeacher2"> select s.id sid,s.name sname,t.name tname from student s,teacher t where s.tid = t.id; </select> <resultMap id="StudentTeacher2" type="Student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" javaType="Teacher"> <result property="name" column="tname"/> </association> </resultMap>
2020年12月13日
93 阅读
0 评论
0 点赞
2020-12-13
Lombok
Lombok使用步骤:1、在IDEA中安装Lombok插件2、在pom.xml导入lombok依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>3、在实体类上加注解说明:@Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog @Data @Builder @SuperBuilder @Singular @Delegate @Value @Accessors @Wither @With @SneakyThrows @val @var experimental @var @UtilityClass Lombok config system Code inspections Refactoring actions (lombok and delombok)@Data:无参构造,get、set、toString、hashcode、equals @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode @toString @Getter
2020年12月13日
193 阅读
0 评论
0 点赞
2020-12-13
CRUD(Mybatis注解开发)
CRUD(Mybatis注解)1、在创建工具类时可以设置自动提交事务public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true); } 2、接口package com.sw.dao; import com.sw.pojo.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; /** * @Author suaxi * @Date 2020/12/11 17:00 */ public interface UserMapper { //删除用户 @Delete("delete from user where id = #{uid}") int deleteUserById(@Param("uid")int id); //根据id查询 //注意:有多个参数时必须加上@Param("")注解 //例:根据id和用户名查询 //User finUser(@Param("id")int id,@Param("username")String name) @Select("select * from user where id = #{id}") User findUserById(@Param("id")int id); //查询所有用户 @Select("select * from user") List<User> findUser(); } 3、测试类package com.sw; import com.sw.dao.UserMapper; import com.sw.pojo.User; import com.sw.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * @Author suaxi * @Date 2020/12/12 21:49 */ public class UserMapperTest { @Test public void findUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); // List<User> userList = mapper.findUser(); // for (User user : userList) { // System.out.println(user); // } // User user = mapper.findUserById(1); // System.out.println(user); mapper.deleteUserById(4); sqlSession.close(); } } 4、注:在mybatis-config.xml中必须注册绑定接口<mappers> <mapper class="com.sw.dao.UserMapper"/> </mappers>5、关于@Parm()注解基本类型的参数或String类型需要加上引用类型不需要加如果只有一个基本类型的话可以忽略(本身就只有它一个值)在SQL中引用的就是@Param()中设定的属性名6、#{}与${}的区别#{}采用预编译的方式,相当于JDBC的占位符PreparedStatement一个#{}就是一个占位符Mybatis在为#{}设置值时会加引号${}采用直接拼接的方式,不对数值做预编译Mybatis在为${}设置值时不加引号存在sql注入的问题
2020年12月13日
78 阅读
0 评论
0 点赞
2020-12-13
分页
分页使用的Limit分页:--语法:SELECT * FROM USER LIMIT startIndex,pageSize SELECT * FROM USER LIMIT 0,2; --每页显示2条数据,从0开始查使用Mybatis分页:1、接口//分页 List<User> getUserByLimit(Map<String,Integer> map);2、UserMapper.xml<!--分页--> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from user limit #{startIndex},#{pageSize}; </select>3、测试package com.sw.test; import com.sw.dao.UserMapper; import com.sw.pojo.User; import com.sw.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author suaxi * @Date 2020/12/11 17:08 */ public class UserDaoTest { @Test public void getUserByLimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String, Integer> map = new HashMap<>(); map.put("startIndex",0); map.put("pageSize",2); List<User> userlist = mapper.getUserByLimit(map); for (User user : userlist) { System.out.println(user); } sqlSession.close(); } }RowBounds分页:不再使用sql实现分页1、接口//分页2 List<User> getUserByRowBounds();2、UserMapper.xml<!--分页2--> <select id="getUserByRowBounds" resultMap="UserMap"> select * from user; </select>3、测试package com.sw.test; import com.sw.dao.UserMapper; import com.sw.pojo.User; import com.sw.utils.MybatisUtils; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author suaxi * @Date 2020/12/11 17:08 */ public class UserDaoTest { @Test public void getUserByRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); //RowBounds RowBounds rowBounds = new RowBounds(0, 2); List<User> userList = sqlSession.selectList("com.sw.dao.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); } } PageHelper链接:https://pagehelper.github.io/
2020年12月13日
78 阅读
0 评论
0 点赞
2020-12-13
日志(Mybatis)
日志1、日志工厂掌握LOG4J、STDOUT_LOGGINGSTDOUT_LOGGING标准日志输出在mybatis核心配置文件中配置:<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>2、log4j什么是log4j?是Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件可以控制每一条日志的输出格式定义每一条日志信息的级别可以灵活配置配置文件1、导入log4j依赖<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>2、log4j.properties#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/mybatis.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG简单使用:1.在要使用log4j的类中,导入import org.apache.log4j.Logger;2.日志对象,参数为当前类的classstatic Logger logger = Logger.getLogger(UserDaoTest.class);3.日志级别logger.info("info:进入testLog4j方法"); logger.debug("debug:进入testLog4j方法"); logger.error("error:进入testLog4j方法");
2020年12月13日
58 阅读
0 评论
0 点赞
2020-12-01
JMM(Java Memory Model)
1、Java内存模型2、作用:缓存一致性协议,用于定义数据读写的规则JMM中定义了线程工作内存和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存。注:通过volilate解决共享对象可见性问题3、JMM对八种指令的使用制定了如下规则:不允许read和load、store和write操作单独出现,即:使用read必须load,使用store必须write不允许线程丢弃它最近的assign操作,即:工作变量(工作内存中)的数据改变了之后,必须告知主存不允许一个线程将没有assign的数据从工作内存同步回主内存一个新的变量必须在主内存中诞生,不允许工作内存直接使用一个未被初始化的变量,即:对变量进行use、store操作之前,必须经过assign和load操作一个变量同一时间只有一个线程能对其进行lock。多次lock后,必须执行相同次数的unlock才能解锁如果对一个变量进行lock操作,会清空所有工作内存中此变量的值,在执行引擎使用这个变量之前,必须重新load或assign操作初始化变量的值如果一个变量没有被lock,就不能对其进行unlock操作,也不能unlock一个被其他线程锁住的变量对一个变量进行unlock之前,必须把此变量同步回主内存JMM对这八种操作规则和对volilate的一些特殊规则就能确定哪些线程是安全的,哪些是不安全的
2020年12月01日
62 阅读
0 评论
0 点赞
2020-11-30
GC垃圾回收
GC的作用区域:JVM在进行GC时,并不是对这三个区域统一回收(大部分在新生代(伊甸园区))新生代幸存区(from,to)老年区GC分为两类:轻GC(普通GC)、重GC(全局GC)GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法引用计数法:复制算法:优点:没有内存的碎片缺点:浪费了内存空间(有一半空间永远是空着的(to区))复制算法的最佳使用场景:对象存活度较低的时候(新生代)标记清除算法优点:不需要额外的空间缺点:两次扫描浪费时间,会产生内存碎片标记压缩对标记清除进行优化小结:内存效率:复制算法 > 标记清除算法 > 标记压缩 (时间复杂度)内存整齐度:复制算法 = 标记压缩 > 标记清除算法内存利用率:标记压缩 = 标记清除 > 复制算法新生代:存活率低复制算法老年代:区域大,存活率高标记清楚+标记压缩混合实现
2020年11月30日
74 阅读
0 评论
0 点赞
2020-11-30
堆内存调优
OOM错误:使用JProfiler工具分析OOM原因能够看到代码第几行出错:内存快照分析工具,MAT(Eclipse),JProfilerDebug,分析代码MAT,JPrifiler的作用:分析Dump内存文件,快速定位内存泄漏获得堆中的数据获得大的对象等等再通过JProfiler分析Dump下来的文件。
2020年11月30日
200 阅读
0 评论
0 点赞
1
...
13
14
15
...
20