spring(二):第一个hello world程序
Hello Spring新建一个实体类12345678910111213141516171819public class Hello { private String str; public String getStr() { return str; } public void setStr(String str) { this.str = str; } @Override public String toString() { return "Hello{" + "str='" + str + '\'' + '}'; }}
编写xml配置文件123456789101112131415161718192021222324252627<?x ...
spring(一):spring简介与IOC初探
简介
Spring:春天—->给软件行业带来了春天!
2002,首次推出了Spring框架的雏形:interface21框架!
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版。
Rod Johnson,Spring Framework创始人,著名作者。很难想象Rod Johnson的学历,真的让好多人大吃一惊,他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。
Spring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架!
SSH:Struct2 + Spring + Hibernate!
SSM:SpringMVC + Spring + Mybatis!
依赖
123456<!--spring框架依赖支持--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> ...
mybatis(九):缓存
首先,频繁的查询数据库,也就是进行IO操作,是很消耗资源的.所以我们就想:能不能将一次查询的结果暂存到一个可以直接读取的内存的一小块,需要用到时直接拿,就不用再去查询数据库了。这一小块就被称为缓存
我们知道:频繁的查询数据库,也就是进行IO操作,是很消耗资源的.
所以我们就想:能不能将一次查询的结果暂存到一个可以直接读取的内存的一小块,需要用到时直接拿,就不用再去查询数据库了。
这一小块就被称为缓存
什么是缓存
存在内存中的临时数据
将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
为什么使用缓存?
减少和数据库的交互次数,减少系统开销,提高系统效率。
什么样的数据能使用缓存?
经常查询并且不经常改变的数据。
Mybatis的缓存MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大提升查询效率。
MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存
默认情况下,只有一级缓存开启。(SqlSession级别的缓存,sql ...
mybatis(八):动态sql
什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句,摆脱拼接sql的苦。如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。 借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
环境搭建创建blog表12345678CREATE TABLE `blog`( `id` VARCHAR(50) NOT NULL COMMENT '博客id', `title` VARCHAR(100) NOT NULL COMMENT '博客标题', `author` VARCHAR(30) NOT NULL COMMENT '博客作者', `create_time` DATETIME NOT NULL COMMENT '创建时间', `views` INT(30) NOT NULL COM ...
mybatis(七):多对多查询的实现
多对一准备工作
数据库中创建student和teacher表,并插入数据
创建实体类student
1234567public class Student { private int id; private String name; //学生要关联一个老师 private Teacher teacher;}
创建实体类teacher
1234public class Teacher { private int id; private String name;}
创建Mapper
多对一处理方法一:按照查询嵌套处理 —>子查询首先学生有一个老师属性,学生跟老师是多对一的(一个老师可以对应多个学生),回想mysql语句,要想得到所有学生及对应的老师,就得先查出所有学生的信息,然后根据查出来的学生的tid,找出对应的老师
123select * from mybatis.student;/*根据上面从数据库查到的student的tid取找对应的老师*/select * from mybatis.t ...
mybatis(六):lombok
lombok简介一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,并且没有如反射那样降低程序的性能。
使用步骤:
在IDEA中下载lombok插件
file —>settings —> plugins
导入依赖的jar包
123456<!--Lombok--><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version></dependency>
之后在实 ...
mybatis(五):面向注解开发
使用注解开发面向接口编程大家之前都学过面向对象编程,也学习过接口,但在真正开发中,很多时候我们会选择面向接口编程
根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体实现,大家都遵守共同的标准,使得开发变得容易,规范性更好
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;
而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
对于接口的理解:
从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:
第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。抽象体与抽象面是有区别的。
三个面向区别
面向对象是指,我们考虑问题时,以 ...
mybatis(四):日志与分页
日志日志工厂
如果一个数据库操作,出现了异常,我们需要排错。日志就是最好的助手
曾经:sout、debug | 现在:日志工厂
在mybatis-config.xml中用<setting name="logImpl" value=""/>配置
标准日志输出STDOUT_LOGGING
在mybatis-config.xml中用 <setting name="logImpl" value="STDOUT_LOGGING"/>配置
注意在别名<typeAliases/>前面
不需要额外添加任何东西,设置了就可以直接使用
Log4j因为有安全漏洞,所以不再详细展开分页为什么要分页减少数据的处理量,使用Limit分页
使用Limit分页(sql语句中实现)
接口的对应方法的属性设成map类型:List<User> getUserByLimit(HashMap<String,Integer> map)
Mapper.xml文件中直接取map对应的 ...
mybatis(三):解决属性名和字段名不一致的问题
问题:
数据库中字段名和pojo中对应实体类的属性名不一致导致查出来的对应属性值为null
查询时,对应不一致的属性无法查出来,因为从数据库查到数据之后,会根据字段名创建一个user对象,(创建时是mybatis底层整合的,没有用类的set,get和有参构造方法,也就是没有用反射)如果字段名和类属性不一致,创建的类对象这个属性就相当于没有被赋值,也就是null
解决方法:
起别名:很麻烦,而且还需要我们知道数据库存储的数据
1select id,name,pwd as password from mybatis.user where id = #{id}
resultMap 结果集映射12345678910111213<!--结果集映射--><resultMap id="userMap" type="com.hanser.pojo.User"> <!--column列,代表数据库中的字段名,property属性,代表实体类中的属性--> <!--建立需要重新映射的属性 ...
mybatis(二):mybatis配置文件解析
核心配置文件mybatis-config.xmlmybatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息,如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
环境配置(environments)mybatis可以配置多个环境,尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境。
直接在配置文件设置属性值
1234567891011121314151617<!--default="development"就代表默认的环境是"development"--> ...