(一)Spring框架
SpringMVC框架:基于【MVC】原理的【控制层】框架。
Spring框架:是基于【IOC和DI】原理的【JavaEE】框架。
IOC:控制反转的思想。是由工厂模式演化过来的。
工厂容器(IOC容器)控制用户所需要的外部资源(奔驰,宝马,奥迪等)(工厂角度)
理解:IOC容器就是生产对象的工厂。
以前代码:正向调用
问题:紧密耦合(下图这种情况是A依赖于B,如果B有变化,一定会影响到A)
A -> B
new B();
现在代码:控制反转
控制理解:IOC容器控制用户所需要的外部资源。
控制运行:启动应用就会扫描,谁的类上方有这个注解就自动new一个对象,封装在工厂里
反转理解:返回用户所需要的资源(对象)
反转:new好的对象赋值给变量
A B D E F
| | |
IOC容器(B、D)
@Component注解 组件注解(创建实例)
@Autowired注解 注入注解
IOC:控制反转。
DI:依赖注入。
DI理解:用户以来容器给他注入资源(用户角度)
(二)Mybatis框架:基于【ORM】原理的【数据层】框架
ORM:对象关系映射原理。
数据层DAO | 企业信息系统层EIS |
---|---|
Mybatis | Mysql |
类 | 表 |
成员变量 | 字段 |
对象 | 记录 |
(一)创建SpringBoot工程
(1)选择Mysql驱动、Mybatis框架、SpringMVC框架。
(2)配置SpringBoot工程的核心配置文件application.properties
数据库连接参数
(3)DAO数据层开发步骤:实体类(DAO(Data Access Object) [数据库访问对象]))
com.zhaoyang.bean.Person
public class Person {
Integer id;
String name;
Double sal;
String bir;//根据数据库表格定义好4个成员变量,注意用类类型来定义而不是基本数据类型
//定义好成员变量后,按照那5步走
public Person(String name, Double sal, String bir) {
//这里注意的是,在数据库里,由于id是主键,已经选择了自动递增,这里在生成有参数的方法时就不用勾选id了
super();
this.name = name;
this.sal = sal;
this.bir = bir;
}
(4)DAO数据层开发步骤:数据层接口
com.zhaoyang.dao.PersonDAO
public interface PersonDAO {
int insert(Person person);// 添加(添加的是整个人的信息)
int update(Person person);// 修改(根据id修改其它)
int delete(int id);// 删除(根据id删除)
Person getPersonByID(int id);// 查询(根据id查询一个对象)
List<Person> getPersonByName(String name);// 查询(根据名字查询多个对象)
}
(5)DAO数据层开发步骤:实现数据层接口
以前:com.zhaoyang.dao.PersonDAOImpl用JDBC实现。
现在:用SQLMapper.xml映射文件来实现接口。
id=“方法名” parameterType="参数类型’’ resultType="返回类型’’ concat(’%’,#{name},’%’)连接
<mapper namespace="com.cuiyudong.dao.PersonDAO">
<insert id="insert" parameterType="Person">
insert into person(name,sal,bir) values(#{name}, #{sal}, #{bir})
</insert>
<update id="update" parameterType="Person">
update person set name=#{name}, sal=#{sal}, bir=#{bir} where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from person where id = #{id}
</delete>
<select id="getPersonByID" parameterType="int" resultType="Person">//注意:查询语句需要有返回值
select * from person where id = #{id}
</select>
<select id="getPersonByName" parameterType="string" resultType="Person">
select * from person where name like concat('%',#{name},'%')
</select>
</mapper>
(6)控制器测试数据层的5个方法
com.zhaoyang.controller.PersonAction
@RestController
@RequestMapping("person")
public class PersonAction {
@Autowired//注入对象
PersonDAO dao;//创建对象
@RequestMapping("m1")
public int m1(Person person) {
int i = dao.insert(person);//调用方法
return i;
}
@RequestMapping("m2")
public int m2(Person person) {
int i = dao.update(person);
return i;
}
@RequestMapping("m3")
public int m3(int id) {
int i = dao.delete(id);
return i;
}
@RequestMapping("m4")
public Person m4(int id) {
Person person = dao.getPersonByID(id);
return person;
}
// 查询(搜索 + 分页)
// 前台分页参数说明:
// 参数一:页码、第几页
// 参数二:条数、每页按几条显示
@RequestMapping("m5")
public List<Person> m5(String name, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Person> list = dao.getPersonByName(name);
return list;
}
(7)启动类上方添加扫描包注解
@MapperScan(“dao接口所在包”)
@MapperScan("com.cuiyudong.dao")
public class Springboot07Application {
(8)测试
测试添加方法
http://127.0.0.1:8080/person/m1?name=a&sal=3&bir=20001111
测试修改方法
http://127.0.0.1:8080/person/m2?name=b&sal=4&bir=20211212&id=11
测试删除方法
http://127.0.0.1:8080/person/m3?id=11
测试查询方法
http://127.0.0.1:8080/person/m4?id=1
http://127.0.0.1:8080/person/m5?name=a
http://127.0.0.1:8080/person/m5?name=a&pageNum=1&pageSize=3 //每页3条第1页