- 博客(33)
- 收藏
- 关注
原创 Java的基本数据类型
Java的基本数据类型整型:byte、short、int、lang浮点型:float、double字符型:char布尔型:boolean基本数据类型之间的运算规则:前提:只讨论七种基本类型之间的运算,除了Boolean类型1、自动类型提升当容量小的数据类型变量和容量大的数据类型变量做运算时,结果自动提升为容量大的数据类型。(此时的容量大小指的是表示数的范围的大和小,比如float的容量大于long的容量)byte、char、short --> int --> long --&g
2020-10-05 10:14:01
278
1
原创 Spring视图、视图解析器和国际化
视图的顶级接口:View视图解析器:ViewResolver常见的视图和解析器:InternalResourceView、InternalResourceViewResolver。springMVC解析jsp时,会默认使用InternalResourceView,如果发现jsp中包含了jstl语言,则自动转化为JstlView。JstlView可以解析jstl实现国际化操作。国际化:针对不同地区、不同国家进行不同显示。实现国际化的步骤:a、创建资源文件基名_语言_地区.properties或基
2020-07-17 15:16:07
208
原创 Spring处理模型数据
Spring处理模型数据,如果跳转时需要带数据:view和model,则可以使用以下方式:ModelAndView、ModelMap、Map、Model,将数据放在request作用域。还有@SessionAttributes和@ModelAttributeModelAndView@RequestMapping(value="testModelAndView") public ModelAndView testModelAndView() {//ModelAndView既有数据也有视图 Model
2020-07-17 14:57:11
182
原创 第一个SpringMVC程序
创建Spring配置文件:springmvc.xml,并选中常用的命名空间:beans、aop、context、mvc普通的servlet流程:请求url-pattern交给对应的servlet去处理,如果现在要使用springmvc,为不是普通的servlet,如何告知程序?如何让springmvc介入程序?需要配置一个springmvc自带的servlet。通过以下配置,拦截所有请求,交给springmvc处理:<servlet> <servlet-name>spr
2020-07-16 11:40:32
121
原创 Spring整合MyBatis框架
MyBatis是通过SqlSessionFactory==>SqlSession==>StudentMapper==>CRUD,来对数据库进行操作。可以发现MyBatis最终是通过SqlSessionFactory来操作数据库,Spring整合MyBatis其实就是将SqlSessionFactory交给Spring。整合步骤:1、引入jar包2、创建类和数据库表public class Student { private int stuNum; private Strin
2020-07-14 10:30:39
106
原创 Spring基于注解形式的aop实现
第一步:导入jar包,注解形式的aop实现和通过实现接口的aop需要的jar包相同。第二步:将业务类和通知纳入ioc容器中;<bean id="studentService" class="org.yao.service.StudentServiceImpl"> <property name="studentDao" ref="studentDao"></property> </bean> <bean id="studentDao" cl
2020-07-13 16:40:22
161
原创 前置通知、后置通知、异常通知和环绕通知
Spring配置通知需要的jar:aopaliance.jar和aspectjweaver.jar前置通知首先让一个类实现前置通知接口,并实现接口中的抽象方法public class LogBefore implements MethodBeforeAdvice{ //前置通知的具体内容 @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.ou
2020-07-12 20:46:02
2038
1
原创 Spring使用注解实现声明式事务
使用注解定义bean,通过注解的形式将bean以及相应的属性值放入ioc容器中。<!-- 配置扫描器 base-package="org.yao.dao.impl"放有注解的包,如果有多个包,都写进引号内,用逗号隔开 Spring在启动时,会根据base-package在该包中扫描所有类,查找这些类是否 有注解@Component("studentDao"),如果有,则将该类加入ioc容器 --> <context:component-scan base-package
2020-07-12 20:34:02
228
原创 Spring框架的FactoryBean
Spring中有两种类型的bean,一种是普通bean,另一种是工厂bean,即FactoryBean。工厂bean和普通bean不同,其返回的对象不是指定类的一个实例,而是该工厂bean的getObject方法所返回的对象。工厂bean必须实现org.springframework.beans.factory.FactoryBean接口。实体类public class Car { private String brand; private Double price;工厂类MyFactor
2020-07-11 17:59:55
115
原创 Spring的依赖注入
依赖注入的三种方式:1、set注入:使用setxxx()的方式赋值赋值默认使用的是set方法,依赖注入的底层是通过反射实现的。<bean id="s1" class="com.yao.spring.di.Student"> <property name="id" value="10055"></property> <property name="name" value="张三三"></property> <property
2020-07-11 17:52:01
87
原创 第一个Spring程序
IOC控制反转、DI依赖注入。可以把DI看作IOC的一种实现方式。Person类public class Person { private Integer id; private String name;applicationContext.xml配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="h
2020-07-11 17:12:50
79
原创 MyBatis的逆向工程
逆向工程所需要的jar包提取码:1wov引入jar包后,在项目中创建generator.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.d
2020-07-10 10:52:17
83
原创 MyBatis查询缓存
一级缓存:同一个SqlSession对象,MyBatis默认开启一级缓存。如果用同样的SqlSession对象查询相同的数据,则只会在第一次查询时向数据库发送SQL语句,并将查询结果放入到SqlSession中(作为缓存存在),后续再次查询该同样的对象时,则直接从缓存中查询该对象即可(即省略了数据库的访问)。当SqlSession执行commit()方法,则清除所有缓存对象。二级缓存:MyBatis自带二级缓存,同一个namespace生成的mapper对象,所以只要产生的xxxMapper对象来自于
2020-07-10 10:44:55
151
原创 MyBatis整合log4j
日志第一步:添加log4j.jar包第二步:开启日志,在conf.xml文件中配置<settings> <!-- 开启日志,并指定使用的日志 --> <setting name="logImpl" value="LOG4J"/> </settings>如果不指定log4j,MyBatis就会根据以下顺序寻找日志SLF4J==>Apache Commons Logging==>Log4j 2==>Kog4j==>
2020-07-09 17:18:45
209
原创 MyBatis框架的关联查询:一对一、一对多
一对一方法一:使用业务扩展类,即用resultType指定类的属性,包含多表查询的所有字段。比如学生表和学生证表中的数据一一对应。步骤一:创建业务扩展类StudentBusiness继承一个属性多的类(Student),并在扩展类中加上另一个类的属性,使得查询后的字段可以和扩展类的属性一一对应。public class StudentBusiness extends Student{ private int cardId; private String cardInfo;步骤二:在Stude
2020-07-09 17:11:39
242
原创 MyBatis的输出参数:resultType和resultMap
输出参数resultType1、简单类型(8个基本类型+String)2、输出参数为实体对象类型3、输出参数为实体对象类型的集合:虽然输出类型为集合,但是resultType依然写集合的元素类型4、输出参数类型为HashMap,如: <select id="queryStudentByHashMap" resultType="HashMap"> select stuno "no",stuname "name" from student </select>测试方法
2020-07-09 13:57:50
147
原创 当MyBatis的parameterType是HashMap时
StudentMapper.xml文件中<select id="query" parameterType="HashMap" resultType="student"> select stuno,stuname,stuage from student where stuage = #{stuAge} or stuname like '%${stuName}%' </select>测试方法Map<String,Object> studentMap = ne
2020-07-09 11:33:27
490
原创 MyBatis的两种取值符号以及parameterType为简单类型,对象类型及嵌套对象类型
MyBatis有两种取值符号:#{}和KaTeX parse error: Expected 'EOF', got '#' at position 50: …个基本类型+String)时#̲{}和{}的区别a、#{任意值},任意值是指任意的合法标识符即可获得用户传入的参数,但一般为了见名知意都使用对应的变量名。${value},其中标识符必须为valueb、#{}:如果输出参数的类型为String,则自动为变量加上单引号(自动类型转换)。${}:原样输出,但是适用于动态排序(动态字段)如:se
2020-07-09 08:15:13
824
原创 MyBatis的类型转换器
自定义MyBatis类型转换器比如:实体类Student中的变量stuSex是Boolean类型,true表示男,false表示女。在student表中字段stuSex是int类型,1表示男,0表示女。当要向数据库中存取数据时,就需要自定义类型转换器,完成Boolean类型和INTEGER类型之间的相互转换。自定义类型转换器的步骤:创建转换器需要实现TypeHandler接口,但是通过源码发现,此接口有一个实现类BaseTypehandler,因此要实现转换器有两种选择:1、实现接口TypeH
2020-07-08 18:42:41
446
原创 MyBatis的推荐写法
具体的实现步骤:1、基础环境:MyBatis的jar包、数据库jar包、conf.xml、mapper.xml2、不同的地方:约定的目标,省略掉statement,根据约定可直接定位到sql语句。接口中的方法必须遵循一下的约定:1、方法名和mapper.xml文件中标签的id值相同2、方法的输入参数和mapper.xml文件中标签的parameterType类型一致,如果没有paramenterType,说明方法没有输入参数。3、方法的返回值和mapper.xml文件中标签的resultType
2020-07-08 16:30:43
171
原创 第一个MyBatis程序的增删改查
MyBatis框架的作用:可以简化JDBC操作,实现数据的持久化。ORM(Object Relational Mapping):对象关系映射。将数据库中的表和实体类一一映射,可以使开发人员像操作对象一样操作数据库的表。MyBtais可以理解为ORM的一种实现,除了MyBatis外,还有Hibernate等等。开发MyBatis的步骤:1、在数据库中创建表(person)2、创建与表对应的实体类(Person) private int id; private String name; pri
2020-07-07 18:36:01
145
原创 jsp内置对象(pageContext、request、session、application),cookie与session
在eclipse中创建的动态web工程下,WEB-INF中的文件,无法通过客户端(浏览器)直接访问,只能通过请求转发来访问。注意:不是所有的内部跳转都能访问WEB-INF,只有请求转发可以,重定向不能访问。JSP的页面元素:a.脚本i.<%局部变量、Java语句%>ii.<%!全局变量、定义方法%>iii.<%=输出表达式%>输出表达式和out.print()是等价的,即out.print(“hello”)等价于<%=“hello”%>
2020-06-23 20:07:31
376
原创 数据库连接池
JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:1、在主程序中建立数据库连接2、进行sql操作3、断开数据库连接在这种模式开发存在问题:1、普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立的时候都要将Connection加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式会消耗大量的资源和时间。数据库的连接资源并没有得到很好的重复利用。
2020-06-22 18:33:08
86
原创 事务的属性、数据库并发问题和隔离级别
事务的ACID属性1、原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。2、一致性(Consistency)事务必须使数据库从一个一致性状态转换到另一个一致性状态。3、隔离性(Isolation)事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。4、持久性(Durablilty)持久性是指一个事务一旦被提交,它对数据库中的数据的改变就是永久性的
2020-06-22 17:57:05
255
原创 数据库事务
数据库事务:是一组逻辑操作单元,使数据从一种状态转变到另一种状态。事务处理的原则:保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都提交(commit),那么这些修改就会永久的保存下来,要么数据库管理系统将放弃所有的修改,整个事务回滚(rollback)到最初状态。数据一旦提交,就不可回滚。会导致数据自动提交的操作:1、DDL操作一旦执行,都会自动提交。2、DML默认情况下,一旦执行成功,就会自动提交。(可以通过setAut
2020-06-22 14:51:17
69
原创 PreparedStatement与Statement相比的优点之批处理
使用PreparedStatement进行批处理方式一:向数据表中插入两万条数据,耗时80多秒 conn = JDBCUtils.getConnection(); String sql = "insert into goods(name) values(?)"; ps = conn.prepareStatement(sql); for(int i = 1; i <= 20000;i++) { ps.setObject(1, "name_"+i); ps.ex
2020-06-17 21:50:16
240
原创 PreparedStatement与Statement相比的优点之操作BOLB类型
前面提到Statement存在拼串、和sql注入的问题。因为PreparedStatement会预编译sql语句,所以能很好的解决上面两个问题。除此之外,PreparedStatement还有如下两个好处:1、PreparedStatement可以操作Blob类型的字段,而Statement做不到。2、PreparedStatement可以实现高效的批量操作。操作Blob类型...
2020-06-17 21:23:12
154
原创 execute()、executeQuery()和executeUpdate()之间的区别
PreparedStatement对象执行sql语句的方法。execute()可执行任何sql语句,方法返回值是Boolean类型。如果执行的是查询操作,并由返回结果,则此方法返回true;如果执行的是增删改操作,没有返回结果,则此方法返回false。executeQuery()只能用来执行查询语句,执行后返回结果集ResultSet对象。executeUpdate()返回值是一个整数,表示受影响的行数。用来执行insert、update和delete语句以及DDL(数据定义语言)如create
2020-06-17 20:50:07
822
原创 Java与SQL对应数据类型转换表
Java类型SQL类型booleanBITbyteTINYINTshortSMALLINTintINTEGERlongBIGINTStringCHAR
2020-06-16 20:46:55
342
原创 PreparedStatement的通用增删改操作
public void update(String sql,Object ...args) { Connection conn = null; PreparedStatement ps = null; try { conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); for(int i = 0; i < args.length; i++) { ps.setObject(i + 1, a
2020-06-16 20:43:27
196
原创 使用PreparedStatement实现对于不同表的通用的查询操作
只有一个结果的resultsetpublic <T> T getInstance(Class<T> clazz,String sql,Object ...args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection();//获取连接 ps = conn.prepareStateme
2020-06-16 20:40:37
433
原创 Statement
数据库连接被用于向数据库服务器发送命令和SQL语句,并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。在java.sql包中有3个接口分别定义了对数据库调用的不同方式:1、Statement:用于执行静态SQL语句并返回它所生成结果的对象。2、PreparedStatement:SQL语句被预编译在此对象中,可以使用此对象多次高效的执行该语句。3、CallableStatement:用于执行SQL存储过程。使用Statement操作数据表的弊端通过调用Connection
2020-06-16 20:26:39
168
原创 JDBC连接数据库的五种方式
方式一 //获取driver的实现类对象,是由数据库厂商提供的 Driver driver = new com.mysql.jdbc.Driver(); //jdbc:mysql:协议 //localhost:ip地址 //3306:默认mysql的端口号 //test:test数据库 String url = "jdbc:mysql://localhost:3306/test"; Properties info = new Properties(); info.setP
2020-06-16 19:14:21
266
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人