复制代码
3.21
1. 会创建 父子工程
父 --Project
子--- Module -- 模块化开发
2. maven的目录结构
src/main/java 存放java的源文件
src/main/resources 存放配置文件 spring.xml
src/main/webapp 存放 页面 css js html jsp
3. spring 框架 https://spring.io/
spring 可以简化开发, 开源的,
spring 分为 aop(面向切面的编程) 和ioc (控制反转)
4. 添加依赖 -----pom.xml
spring-core.jar 核心库
spring-beans.jar bean 豆, java豆, 操作java源文件
spring-expression.jar 表达式
spring-context.jar 上下文
commons-logging.jar 日志
5. 编写java 文件
建包 建类
类:要求: 体现封装
a. 属性私有化
b. 为每个属性 生成 get/set 方法
getXXXX() 获得属性
setXXX() 设置属性
b. 编写测试用例
junit , 添加 依赖
在测试类中编写 方法, 方法上 增加 @Test 进行 单元测试用例
6. IOC
IOC 控制反转, 主要为了 降低程序的耦合度
把 创建对象 及对象调用的过程 交给 spring处理
7. 为spring 添加 applicationContext.xml------- src/main/resources
每一个类 都可以配置成一个 bean
<bean id="值必须唯一" class="包名.类名"> </bean>
8. 测试类中 获得bean ,
先读取 applicationContext.xml 通过调用 getBean("bean的id的值") 获取的对象
9. ioc的注入方法
如果创建一个类, 自己没有编写 构造方法, 则编译器自动增加 一个 无参数的构造
如果 自己编写了, 则 编译器不会生成 无参 构造
今后
类 必须 具有 属性, 属性的get/set方法
无参及全参数的构造方法
a. 构造方法注入
<bean id="student" class="com.ly.Student" >
<constructor-arg value="liuli" name="name"/>
<constructor-arg name="sno" value="2024"/>
</bean>
b. 属性注入: 属性 必须具有 set/get 方法
<bean id="student" class="com.ly.Student">
<property name="name" value="wanglili"/>
<property name="sno" value="1002"/>
</bean>
c. p命名空间
3.22 模拟 jdbc 连接数据库,并交给spring进行管理
分层开发: 控制层 controller ----servlet 充当
业务层 service ------ 主要调用 dao
数据访问层 dao ------- 主要连接db, 进行增删改查
创建 service 及 dao 进行模拟开发
service 调用 dao, dao 返回数据
实现步骤:
添加依赖pom.xml
<!-- 添加 spring 的相关依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.24</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.24</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.24</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.24</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
复制代码
a. 编写 实体层 Student.java
get/set 全参及无参构造
package com.ly;
public class Student {
private int sno;//学号
private String name;//姓名
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", name='" + name + '\'' +
'}';
}
public Student(int sno, String name) {
this.sno = sno;
this.name = name;
}
public Student() {
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
复制代码
b. 编写dao层(数据访问层) StudentDao.java 及 StudentDaoImpl.java
StudentDao.java 是接口 -- 只编写 声明方法
StudentDaoImpl.java 是类-- 写 方法的具体实现
package com.ly.dao;
import com.ly.Student;
import java.util.List;
public interface StudentDao {
List<Student> findAll();
}
package com.ly.dao.impl;
import com.ly.Student;
import com.ly.dao.StudentDao;
import java.util.ArrayList;
import java.util.List;
public class StudentDaoImpl implements StudentDao {
@Override
public List<Student> findAll() {
List<Student> list = new ArrayList<>();
Student student = new Student(1001,"lisi");
Student student1 = new Student(1002,"lisi5");
Student student2 = new Student(1003,"lisi4");
list.add(student);
list.add(student1);
list.add(student2);
return list;
}
}
复制代码
c. 编写service层(业务层) StudentService.java 及 StudentServiceImpl.java
StudentService.java 接口
StudentServiceImpl.java 实现类, 要把 StudentDao 作为属性
package com.ly.service;
import com.ly.Student;
import java.util.List;
public interface StudentService {
/**
* 查询全部
* @return 返回 数据库的信息
*/
List<Student> query();
}
package com.ly.service.impl;
import com.ly.Student;
import com.ly.dao.StudentDao;
import com.ly.dao.impl.StudentDaoImpl;
import com.ly.service.StudentService;
import java.util.List;
public class StudentServiceImpl implements StudentService {
private StudentDao dao;
public StudentDao getDao() {
return dao;
}
public void setDao(StudentDao dao) {
this.dao = dao;
}
@Override
public List<Student> query() {
return dao.findAll();
}
}
复制代码
d. 编写 applicationContext.xml 配置 bean
为 属性赋值时,如果 属性的数据类型 为 String+8种基本数据类型 则 使用value 进行赋值
如果 属性的数据类型 不是 String 或 8种 基本数据类型 则 使用 ref (引用) 赋值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="studentService" class="com.ly.service.impl.StudentServiceImpl">
<property name="dao" ref="StudentDao"/>
</bean>
<bean id="StudentDao" class="com.ly.dao.impl.StudentDaoImpl">
</bean>
</beans>
复制代码
e. 编写测试用例
import com.ly.Student;
import com.ly.service.StudentService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class TestStudent {
@Test
public void testQuery(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentService ser = (StudentService)context.getBean("studentService");
List<Student> list = ser.query();
System.out.println(list);
}
}