springboot数据库与mybatis

springboot数据库与mybatis入门配置 初始化工程 参考链接:https://blog.csdn.net/typa01_kk/article/details/76696618 数据库配置以及测试 在application.properties配置如下 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test spring.datasource.username=root spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.max-idle=10 spring.datasource.max-wait=10000 spring.datasource.min-idle=5 spring.datasource.initial-size=5 通过jdbcTemplate的方式访问数据库 @RunWith(SpringRunner.class) @SpringBootTest public class DemoSpringbootApplicationTests { @Autowired JdbcTemplate jdbcTemplate; @Test public void contextLoads() { String sql = "select * from user"; List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql); System.out.println("query result:" + JSON.toJSONString(resultList)); for (Map<String, Object> item: resultList) { for (Map.Entry<String, Object> entry: item.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue().toString()); System.out.println("\n"); } } } } 日志打印如下: query result:[{"id":1,"name":"test"}] id:1 name:test 成功访问数据库....

March 18, 2019

关于java 中的equals的一些记录

override equals方法的几个原则 自反性。对于任何非null的引用值x,x.equals(x)应返回true。 对称性。对于任何非null的引用值x与y,当且仅当:y.equals(x)返回true时,x.equals(y)才返回true。 传递性。对于任何非null的引用值x、y与z,如果y.equals(x)返回true,y.equals(z)返回true,那么x.equals(z)也应返回true。 一致性。对于任何非null的引用值x与y,假设对象上equals比较中的信息没有被修改,则多次调用x.equals(y)始终返回true或者始终返回false。 ...

October 21, 2018

session与cookie

session与cookie cookie 在服务端中设置,在前端中需要看情况 当设置了httponly时,仅能在服务端设置,js端既不能读取也不能够设置. 无设置httponly时,前端也可以设置和读取cookie的值 ...

February 7, 2018

servletRequest中读取body的问题

ServletRequest中读取body的数据 InputStream body = request.getInputStream(); 问题 数据流仅仅能够读取一次,如果你想要多次读取(在多个调用链中)(比如说在多个过滤器中),例如 chain.doFilter(request, response); 这样后面的调用中request将读取不到body的数据. ...

January 26, 2018

web线程安全

java web中的线程安全问题 问题描述: 伪代码: 判断redis是否有相应的键值对: 有: 读取redis 没有: 读取数据库 插入redis(列表的插入) 返回 问题 当请求并发时,第一个请求redis未插入而第二个请求也进入了判断,此时第二个请求的判断条件也是"否",所以就会出现redis数据重复的情况. 原因 虽然说对于每一个单独的请求,spring都是新建一个单独的线程来进行处理,但是这并不能够解决上面的问题,究其原因,则是访问了同一个全局数据(可以认为是redis) 解决: 增加一个全局变量,使用synchronize同步方法,伪代码如下 伪代码 全局变量 lock 判断redis是否有相应的键值对: 有: 读取redis 没有: synchronize(lock) 再次判断redis是否有相应的键值对 有: 读取redis 没有: 读取数据库 插入redis 再次判断的原因:加锁只是阻塞了第二个请求的读取数据库/插入redis操作,如果没有再次判断的话,那么当第一个请求释放锁之后第二个请求依旧会再次读取数据库/插入redis,问题依旧存在 参考 http://www.cnblogs.com/doit8791/p/4093808.html

January 24, 2018

JAVA NIO

参考资料:https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 主要概念: 通道(channel) 缓冲区(buffer) 主要思想: 在原来的IO的思想上封装,提高IO效率 方法: 通过缓冲区实现基于块的读写 具体: 先获得文件的输入输出流–>从文件的输入输出流获得通道(channel) –>分配缓冲区(buffer)–>从缓冲区中读取内容/将内容写入缓冲 缓冲区内部细节: 缓冲区的底层实现可以看成是一个字节数组, 三个变量 position:当前索引,也可以理解为指针所指的元素,初始值为0,指向第一个元素 limit:初始值为capacity,通过与position以clear函数和flip函数结合来确定写入写出的元素. capacity:总容量,可以理解为数组长度,limit<=capacity flip函数 1.将limit设置为position的值 2.将position设置为0 将buffer写入到输出通道时,调用此函数,注意在写入到输出通道时(foutchanel.write(buffer)), position会步进,而limit不变,所以想要循环读取时,需要调用clear函数重置缓冲区的状态. clear函数 1.将limit设置为capacity的值 2.将position设置为0 文件输入输出流会记住输入输出的位置,每个字节仅能被读取一次.

August 23, 2017

Java中的synchronized和volatile

volatile关键字 程序在运行时,为了提高性能可能会将主存中的变量拷贝到CPU缓存当中, ...

October 26, 2016

Java中的单例模式

Java中的单例模式 多线程中可能会导致对象的多次初始化. 懒汉式的实现 之所以成为懒汉,个人认为应该是类的初始化只在需要的时候进行,所以很"懒". ...

October 26, 2016

Java正则表达式SomeTips

默认的写法均为贪婪的 加?之后修改为最短匹配 Pattern pattern = Pattern.compile("\\d{1,3}"); String s = "123-456-789"; Matcher matcher = pattern.matcher(s); ...

October 16, 2016

JAVA中的引用

String str=new String("abc"); // 强引用 SoftReference<String> softRef=new SoftReference<String>(str); 弱引用WeakReference 比软引用更加弱,当垃圾收集器回收时就会被回收。 虚引用

October 7, 2016