首页 > 其他分享 >06day

06day

时间:2024-12-06 20:45:09浏览次数:7  
标签:name spring 06day org import com public

06day

spring

1.对比以往项目,Spring优势有哪些:方便解耦,简化开发;AOP切面级
程;声明式事务;整合各种优秀的框架,
2.发明者:Rod Johnson(罗宾·约翰逊)--Java世界的传奇大师,神级人
物;Spring FrameWork的缔造者;旷世奇书"葵花宝典"《Expert one on
one J2EE Design and Development》作者:Servlet2.4和JDO2.0的规
范专家;Java Development Community杰出人物。
3.不重复造轮子
4.使用Spring所需jar包
5.Spring官网:去spring官网找:https://spring.io/

image-20241203152437196

核心在core Container(核心组件)

Data Access:对数据库访问层进行了封装

web:springmvc

spring IOC/DI(IOC和DI是同一个时间的两个名字)

注:不能构建控制层的对象

loC(lnversion of Control)中文名称:控制反转,也被称为Dl(dependency injection ):依赖注入。注意:属于同一件事情的两个名称。

创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转。

由于控制反转概念比较含糊,所以在 2004 年大师级人物Martin Fowler又给出了一个新
的名字:“依赖注入”,相对loC而言,“依赖注入”明确描述了“被注入对象依赖loC容器来配置依赖对象”,DI(英文全称为DependencyInjection,中文译名为依赖注入)是loC的别名。

前后端通信中的java服务器分层结构

image-20241203193739304

控制层(例子:BookController):获取前端的数据,进行页面的跳转,调用业务层

业务层(例子:BookService):处理业务( 完成对于数据库的增删改查的上层语言调用的构建),代用数据库连接层

数据库连接层(例子:BooMapper):跟数据库进行交互(增删改查)

注:可以间的理解为一个一个类

注:为了让类的命名规则有一定的规范这里每一层又分为(接口和实现类)

具体统一命名规则是用接口等于类的多态形式

image-20241203195315033

而在spring框架中利用接口创建对象的逻辑则使用spring进行管理的

在程序中不手动创建对象了,则在程序中添加配置文件让框架进行创建

pwnda:框架自动实现的功能其中参数的传递都是用xml的配置文件完成的

IOC/DI的原理

image-20241203200651980

首先框架会根据xml中传入的参数进行对象的创建,然后将创建的对象传入到spring容器当中,再有spring的容器出给java程序

spring的容器本质是一个map集合(stl的容器那种)。

(spring)属性的注入方式

以前的setter对应属性注入的设值注入

以前构造器方式对应属性注入的构造注入

属性注入- 设值注入

<bean id="b" class="com.msb.pojo.Book">
<property name="id" value="1"></property>
<property name="name" value="项目驱动零起点学Java"></propqrty>
</bean>

其中的name=id至于get,set方法有关系,与变量的名字没有关系

属性注入-构造注入

<beanid="b" class="com.msb.pojo.Book">
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="项目驱动零起点学Java"></constructor-arg>
</bean>

实例代码:

package com.day03.test1;

import com.day03.pojo.Book;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
//创建spring的容器
//        创建容器之后框架的底层就已经创建对象了并且已经方法spring的容器里面了
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//    获取具体的对象
        Book book = (Book)context.getBean("b");
        System.out.println(book.getName());
        Book book1 = (Book)context.getBean("b1");
        System.out.println(book1.getName());

    }
}

<?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
         https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    其中id就是对象的名字-->
<!--    <bean id="b" class="com.day03.pojo.Book">-->
<!--        <property name="id1" value="1"></property>-->
<!--        <property name="name1" value="觅长生"></property>-->
<!--    </bean>-->
    <bean id="b1" class="com.day03.pojo.Book">
<!--        构造器保证有带参数的构造函数-->
<!--        方法的名字与传入的形参有关系与变量名字无关-->
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="name" value="活着"></constructor-arg>
    </bean>
    <bean id="girl" class="com.day03.pojo.Girl">
        <constructor-arg name="age" value="25"></constructor-arg>
        <constructor-arg name="name" value="未知"></constructor-arg>

    </bean>
    <bean id="boy" class="com.day03.pojo.Boy">
        <constructor-arg name="age" value="24"></constructor-arg>
        <constructor-arg name="name" value="小宇"></constructor-arg>
        <constructor-arg name="girlfriend" ref="girl"></constructor-arg>
    </bean>

</beans>

注入属性为引用类型

设置属性的值:
方式1:value:简单数据类型(基本数据类型+String)直接设置:
方式2:ref:需要引用另一个bean的id。也就是说这个参数是一个类类型,且这个
类的对象也被Spring容器管理。

示例代码:

<?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
         https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    其中id就是对象的名字-->
<!--    <bean id="b" class="com.day03.pojo.Book">-->
<!--        <property name="id1" value="1"></property>-->
<!--        <property name="name1" value="觅长生"></property>-->
<!--    </bean>-->
    <bean id="b1" class="com.day03.pojo.Book">
<!--        构造器保证有带参数的构造函数-->
<!--        方法的名字与传入的形参有关系与变量名字无关-->
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="name" value="活着"></constructor-arg>
    </bean>
    <bean id="girl" class="com.day03.pojo.Girl">
        <constructor-arg name="age" value="25"></constructor-arg>
        <constructor-arg name="name" value="未知"></constructor-arg>

    </bean>
    <bean id="boy" class="com.day03.pojo.Boy">
        <constructor-arg name="age" value="24"></constructor-arg>
        <constructor-arg name="name" value="小宇"></constructor-arg>
        <constructor-arg name="girlfriend" ref="girl"></constructor-arg>
    </bean>

</beans>
package com.day03.pojo;

public class Boy {
    private int age;
    private String name;
    private Girl girlfriend;

    public Boy() {
    }

    public Boy(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Boy(int age, String name, Girl girlfriend) {
        this.age = age;
        this.name = name;
        this.girlfriend = girlfriend;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Girl getGirlfriend() {
        return girlfriend;
    }

    public void setGirlfriend(Girl girlfriend) {
        this.girlfriend = girlfriend;
    }
}

package com.day03.pojo;

public class Girl {
    private int age;
    private String name;

    public Girl(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Girl() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package com.day03.test1;

import com.day03.pojo.Boy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test1 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Boy boy = (Boy)context.getBean("boy");
        System.out.println(boy.getName());
        System.out.println(boy.getGirlfriend().getName());
    }
}

注解

注解使用的目的

什么是注解?
注解其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理
通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工
具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

注解的使用:
使用注解时要在其前面增加@符号,并把该注解当成一个修饰符使用。用于修饰它支持的程序元素
(包、类、构造器、方法、成员变量、参数、局部变量的声明)。

注解的重要性:
在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Arldroid中注
解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和
XML配置等。未来的开发模式都是基干注解的。一定程度上可以说:框架=注解+反射+设计模式。

IoC/DI相关的注解

image-20241204100853051

其中前5个作用一样,用法也差不多

@Component的使用

在要创建对象的类中加入@Component注解,对象名字默认为:类名首字母变小写注解在哪个包下?要想找到这些注解,需要将注解所在的包进行扫描:设置需要扫描的包。并且需要在applicationContext.xml中添加context命名空间

前五个注解作用一样,只所以搞出这么多,就是在语义上给你区别,放入不同层用不同的注解,但是作用
都是创建对象。

代码示例核心(核心配置文件):

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd">


<!--这个语句就会会让框架扫描出所有的包(com.day03.pojo)中的注解-->
        <context:component-scan base-package="com.day03.pojo"></context:component-scan>
<!--    其中id就是对象的名字-->
<!--    <bean id="b" class="com.day03.pojo.Book">-->
<!--        <property name="id1" value="1"></property>-->
<!--        <property name="name1" value="觅长生"></property>-->
<!--    </bean>-->
<!--    <bean id="b1" class="com.day03.pojo.Book">-->
<!--        构造器保证有带参数的构造函数-->
<!--        方法的名字与传入的形参有关系与变量名字无关-->
<!--        <constructor-arg name="id" value="2"></constructor-arg>-->
<!--        <constructor-arg name="name" value="活着"></constructor-arg>-->
<!--    </bean>-->
<!--    <bean id="girl" class="com.day03.pojo.Girl">-->
<!--        <constructor-arg name="age" value="25"></constructor-arg>-->
<!--        <constructor-arg name="name" value="未知"></constructor-arg>-->

<!--    </bean>-->
<!--    <bean id="boy" class="com.day03.pojo.Boy">-->
<!--        <constructor-arg name="age" value="24"></constructor-arg>-->
<!--        <constructor-arg name="name" value="小宇"></constructor-arg>-->
<!--        <constructor-arg name="girlfriend" ref="girl"></constructor-arg>-->
<!--    </bean>-->

</beans>

类对象(标记):

package com.day03.pojo;

import org.springframework.stereotype.Component;
//底层识别这个注解之后会帮我们构建boy这个类的具体的对象
//要让框架识别注解的话就要对注解所在的包进行扫描
@Component
//创建对象的对象名字默认为是类名字的首字母小写
public class Boy {
    private int age;
    private String name;
    private Girl girlfriend;

    public Boy() {
    }

    public Boy(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Boy(int age, String name, Girl girlfriend) {
        this.age = age;
        this.name = name;

        this.girlfriend = girlfriend;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Girl getGirlfriend() {
        return girlfriend;
    }

    public void setGirlfriend(Girl girlfriend) {
        this.girlfriend = girlfriend;
    }
}
package com.day03.test1;

import com.day03.pojo.Boy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test1 {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Boy boy = (Boy)context.getBean("boy");
        System.out.println(boy.getName());
        System.out.println(boy.getGirlfriend());
    }
}

@Value的使用

给普通数据类型赋值的注解,普通数据类型包括:八种基本数据类型+String,也不需要set方法

@Autowired的使用

添加@Autowired注解后会把容器中的对象自动注入进来,并且不需要依赖set方法.

会自动注入,默认是byType(根据类型注入),如果是多个同类型的bean,则使用byName

pwnda:根据注释生成的对象,怎么生成多个不同的对象

Web项目

Java(jar)项当和web(war)项目的区别

Java项目是由main()方法来开始的,直接依赖JVM就能被编译执行。Java项目不需要服务器

Web项目中的Java文件是tomcat服务器来触发的,脱离了web服务器就无法启动。Web项目需要服务
器。Web项目部署到服务器上,任何用户都可以通过浏览器来访问。将本地资源共亨给外部访问。

使用服务器

tomcat服务器对Servlet,Jsp,JNDl,JavaMail有很好的的支持,并目这个Web容器是开源免费的
(Apache 开源免费)

通过Maven构建项目

1.Maven构建项目类型:
Java项目-->jar项目
Web项目-->war项目
2.创建Maven-war项目步骤:
(1)创建Maven项目,添加webapp模板
先勾选create from archetype前面的复选框。
然后选择org.apache.maven.archetypes:maven-archetype-webapp
新建项目的剩余步骤都点击Next按钮即可,和不使用原型时创建Maven项目类似。
(2)注意pom.xml中是war项目
(3)观察目录结构与jar项目不同之处
(4)设置java目录为资源目录
(5)添加tomcat

image-20241204110935077

(6)将项目添加到tomcat中

image-20241204110944469

(7)运行

pwnda:每个模块都可以对应一个不同的项目

pwnda:导入tomcat服务器的两种方式:1、配置本地的Tomcat服务器。2、用maven的tomcat插件

SpringMVC(web项目)

可以实现控制层的对象的创建

springMVC的原因:可以获取前端传过来的而数据,也可以响应内容到前端

SpringMVC环境搭建

1.创建maven-web项日
2.补全目录
3.添加依赖
4.加入tomcat插件

5.创建控制器类,跳转到index.jsp

注:web文件的入口为:webapp/WEB_INF/web.xml

获取普通参数

获取普通参数,只需要在控制单元中提供与请求参数同名的方法参数即可,Spring MVC会自动进行类型转换。

使用类对象作为控制单元参数

一个包含私有属性,getter/setter方法和无参构造方法的Java类。是不是感觉
JavaBean:
和实体类特别像。其实写法上和实体类相同。唯一区别是实体类是数据库层面的概念,类型中属性要和数据库字段对应。而JavaBean的属性是灵活的,不是必须和哪里对应的。JavaBean是一个专业概念,可以简单点理解:使用类对象做为控制单元参数,接收请求参数。如果不是特别较真,狭义上可以认为JavaBean就是项目中的实体类。

在控制单元中放置一个类型对象,对象名称没有要求,只需要保证请求参数名和类的属性名
相同就可以了。

其中传入参数的名字与类中的变量名字必须相同

SSM整合

1、删除多余的东西

2、补全目录

3、添加依赖和插件

【1】mybatis的依赖
【2】连接mysql的依赖
【3】log4j的依赖
【4】spring的核心依赖
【5】springjdbc依赖
【6】spring整合mybatis的依赖
【7】springwebmvc的依赖

4、处理spring整合mybatis部分:

pwnda:当初用mybatis实现的一些与数据库连接的方法经过spring的整合之后就都用spring的底层去实现

重点:配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">


<!--数据库连接的方法都封装到类里面,然后让spring框架的底层去实现-->
    <!-- 【1】连接数据库,获取数据源,配置数据源,设置数据库连接的四个参数 -->
    <!-- 利用setter方法完成属性注入,四个参数名固定的,注意源码中虽然没有driverClassName属性,但是有
    driverClassName的setter方法-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://127.0.0.1:3306/book?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/></bean>


<!--也是用spring的底层去实现-->
<!--    【2】获职SqlSessionFactory对象-->
    <!-- 以前SqlSessionFactory都是在测试代码中我们自己创建的,但是现在不用了,整合包中提供的对于
    5qlSessionFactory的封装。里面提供了MyBatis全局配置文件所有配置的属性-->
<!--    id确定的名字都是底层确定好的类的名字-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据源-->
<!--        就是上面封装的数据源信息-->
        <property name="dataSource" ref="dataSource"/>
        <!--给包下类起别名-->
<!--        利用bean的属性将其注入-->
        <property name="typeAliasesPackage" value = "com.day03.pojo"></property>
        </bean>



<!--    【3】扫描mapper文件-->
    <!--设置扫描哪个包,进行接口绑定-->
<!--    所有Mapper接口代理对象都能创建出来,可以直接从容器中获取出来。-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--    <!-和SqlSessionFactory产生联系,以前接口绑定sqlSession.getMapper(BookMapper.class);-->
<!--    都是通过以前接口绑定sq1Session来调用mapper,所以这里一定要注入工厂啊-->
<!--    注意这里sqlSessionFactoryBeanName类型为String,所以用value把工厂名字写过来就行&ndash;&gt;-->
<!--        这里面的factory是上面工厂类的-->
<!--pwnda:这里十一层套一层的,先用类去实现数据库对象,再用数据库对象去注入到类中实现工厂(与数据库通信)
       再用生成的工厂类扔到下面的类中去实现映射文件(对数据库进行操作)-->
        <property name="sqlSessionFactoryBeanName" value="factory"></property>
<!--        其中ref是类-->
    <!--扫描的包 -->
    <property name="basePackage" value="com.day03.mapper"></property>
</bean>

<!--【4】扫描包下注解-->
<context:component-scan base-package="com.day03.service"></context:component-scan>

</beans>

整合springmvc

pwnda:就是配置springMVC然后调用service曾传入的数据库

代码展示:

mybatis层:

package com.day03.mapper;

import java.util.List;

public interface BookMapper {
    List selectAllBooks();
}
<?xml version="1.0" encoding="UTF-8"?>
<!--约束(命名)-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.day03.mapper.BookMapper">
    <select id="selectAllBooks" resultType="book">
        SELECT * FROM t_book;
    </select>
</mapper>

service:

package com.day03.service;

import java.util.List;

public interface BookService {
    List findAll();
}
package com.day03.service.impl;

import com.day03.mapper.BookMapper;
import com.day03.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper bookMapper;
    public List findAll() {

//        从这里面调用数据库连接层,与其传递信息
        return bookMapper.selectAllBooks();
    }
}

controller:

package com.day03.controller;

import com.day03.pojo.Book;
import com.day03.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class BookerController {
    @Autowired
    private BookService bookService;
    @RequestMapping("/testbook")
//    具体的定义返回的数据
    @ResponseBody
    public String findAll(){
        List list = bookService.findAll();
//        定义一个字符串用来接收响应的字符串
        String books = "";
        for (int i = 0;i<list.size();i++){
            Book book = (Book)list.get(i);
            books = books + book.getName();
            books = books + book.getAuthor();
        }
//        System.out.println("一共有基本书:" + list.size());
        return books;
    }

}

spring mvc配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc
         https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--    扫描控制器类,千万不要把service等扫描进来,也千万不要在Spring配置文件扫描控制器类所在包-->
    <context:component-scan base-package="com.day03.controller"></context:component-scan>
    <!--    SprinlMVc的注解生效:@RequestMapping-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">


<!--数据库连接的方法都封装到类里面,然后让spring框架的底层去实现-->
    <!-- 【1】连接数据库,获取数据源,配置数据源,设置数据库连接的四个参数 -->
    <!-- 利用setter方法完成属性注入,四个参数名固定的,注意源码中虽然没有driverClassName属性,但是有
    driverClassName的setter方法-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://127.0.0.1:3306/book?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/></bean>


<!--也是用spring的底层去实现-->
<!--    【2】获职SqlSessionFactory对象-->
    <!-- 以前SqlSessionFactory都是在测试代码中我们自己创建的,但是现在不用了,整合包中提供的对于
    5qlSessionFactory的封装。里面提供了MyBatis全局配置文件所有配置的属性-->
<!--    id确定的名字都是底层确定好的类的名字-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据源-->
<!--        就是上面封装的数据源信息-->
        <property name="dataSource" ref="dataSource"/>
        <!--给包下类起别名-->
<!--        利用bean的属性将其注入-->
        <property name="typeAliasesPackage" value = "com.day03.pojo"></property>
        </bean>



<!--    【3】扫描mapper文件-->
    <!--设置扫描哪个包,进行接口绑定-->
<!--    所有Mapper接口代理对象都能创建出来,可以直接从容器中获取出来。-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--    <!-和SqlSessionFactory产生联系,以前接口绑定sqlSession.getMapper(BookMapper.class);-->
<!--    都是通过以前接口绑定sq1Session来调用mapper,所以这里一定要注入工厂啊-->
<!--    注意这里sqlSessionFactoryBeanName类型为String,所以用value把工厂名字写过来就行&ndash;&gt;-->
<!--        这里面的factory是上面工厂类的-->
<!--pwnda:这里十一层套一层的,先用类去实现数据库对象,再用数据库对象去注入到类中实现工厂(与数据库通信)
       再用生成的工厂类扔到下面的类中去实现映射文件(对数据库进行操作)-->
        <property name="sqlSessionFactoryBeanName" value="factory"></property>
<!--        其中ref是类-->
    <!--扫描的包 -->
<!--        这个是basePack底层函数,其中其中的参数是接口BookMapper和其对应的配置文件-->
    <property name="basePackage" value="com.day03.mapper"></property>
</bean>

<!--【4】扫描包下注解-->
<context:component-scan base-package="com.day03.service"></context:component-scan>

</beans>

Springboot

Spring Boot是Spring公司的一个顶级项目,和Spring Framework是 个级别的。

Spring Boot实际上是利用Spring Framework4 自动配置特性完成。编写项目时不需要编写
xml文件。发展到现在,Spring Boot已经具有很很大的生态圈,各种主流技术已经都提供了
Spring Boot的启动器。

核心思想:约定大于配置

为什么使用springboot(boot启动):因为在spring中我们要写大量的xml配置文件,并且要自己导入一些依赖和插件。而springboot就是一个零配置的简化版的spring

pwnda:使用ssm是为了简化一些类和对象以及前端交互的步骤,而使用springboot是在ssm(不只是ssm)的基础上进一步封装将xml的功能封装成框架自动实现的

Springboot项目的搭建

案例:springboot整合springMVC的工程

(1)创建maven工程
(2)选择springboot的版本
启动器:正常导入springMVC包用spring-web-mvc而在springboot中使用的是spring-boot-starter-web其中的spring-boot-starter叫启动器

什么是启动器

Spring框架在项目中作用是Spring整合各种其他技术,让其他技术使用更加方便。Spring Boot的启
动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配
置,以前绝大多数XML配置都不需要配置了。以后每次使用Spring Boot整合其他技术时首先需要考
虑导入启动器。

代码:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.day03</groupId>
  <artifactId>TestSpringBoot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>TestSpringBoot</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.7.6</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.6</version>
    </dependency>

  </dependencies>
</project>

什么是启动类

Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的(是整个项目的入口)。并且启动类运行的时候会对同包或子包下的注解进行一个扫描(一般放到与持久层、service,contoller一个目录下)

代码:

package com.day03;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//加上注解框架才能识别这是一个启动类
@SpringBootApplication
public class TestSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestSpringBootApplication.class,args);

    }
}

启动类与启动器区别

启动类表示项目的启动入口
启动器表示jar包的坐标

springboot内置了tomcat

server.port=8888(端口配置)
server.servlet.context-path=/springboot01(上下文配置)

YML配置文件的介绍

springboot官方推荐的配置文件是yml文件,yml是用层级表示关系的一种配置文件。yml中没有标签,而是通过两个空格的缩进来表示层级结构。

properties中 :
serverport=8080
yml中:
server:
port: 8080
层级结构怎么找(SpringBoot常见配置,查看官网文档)
https://docs.spring.io/spring-boot/docs/2.7.6/reference/html/application
properties.html#appendix.application-properties
注意:文件名字为:application.yml,文件名字application开头,不能随意动。
注意冒号后空格。

SpringBoot整合SSM

导入依赖

代码:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.day03</groupId>
  <artifactId>TestSpringBoot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>TestSpringBoot</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.7.6</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

    </dependencies>
  </dependencyManagement>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.6</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.3</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

  </dependencies>
</project>

编写配置文件

server:
  port: 9898
  servlet:
    context-path: /123
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/book?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    password: root
    username: root

3.编写实体类,配置文件中加入别名
mybatis:
type-aliases-package: com.msb.pojo

4.定义mapper接囗
5.定义mapper.xml映射文件
在resource下新建mybatis文件夹
,mapper.xml文件名没有要求了,
不需要和接口名完全对
应了,是根据namespace去找接口。但是最好还是和接口名字保持一致
配置文件中加入映射文件位置:
6.
mybatis:
mapper-locations: classpath:mybatis/*.xml
7.定义启动类,在启动类加入mapper的包扫描
@springBootApplication
@MapperScan("com.msb.mapper")
public class MyApplication {
public static void main(Stringll args) {
SpringApplication.run(MyApplication.class,args);

代码:

mepper层:

package com.day03.mapper;

import com.day03.pojo.Book;

import java.util.List;

public interface BookMapper {

    List selectAllBooks();
}

<?xml version="1.0" encoding="UTF-8"?>
<!--约束(命名)-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.day03.mapper.BookMapper">
    <select id="selectAllBooks" resultType="book">
        SELECT * FROM t_book;
    </select>
</mapper>

service:

package com.day03.service;

import java.util.List;



public interface BookService {
    List findAllBooks();
}
package com.day03.service.impl;

import com.day03.mapper.BookMapper;
import com.day03.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service

public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper bookMapper;
    @Override
    public List findAllBooks() {
        return bookMapper.selectAllBooks();
    }
}

contoller层:

package com.day03.controller;

import com.day03.pojo.Book;
import com.day03.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class BookController {
    @Autowired
    private BookService bookService;

    @ResponseBody
    @RequestMapping("/test01")
    public String findBooks(){
        String books = "";
        List allBooks = bookService.findAllBooks();
        for(int i=0;i<bookService.findAllBooks().size();i++){
            Book book = (Book)bookService.findAllBooks().get(i);
            books += book.getAuthor()+book.getName();
        }
        return books;
    }
}

启动类:

package com.day03;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//加上注解框架才能识别这是一个启动类
@SpringBootApplication
@MapperScan("com.day03.mapper")
public class TestSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestSpringBootApplication.class,args);

    }
}

application.yml

<?xml version="1.0" encoding="UTF-8"?>
<!--约束(命名)-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.day03.mapper.BookMapper">
    <select id="selectAllBooks" resultType="book">
        SELECT * FROM t_book;
    </select>
</mapper>

标签:name,spring,06day,org,import,com,public
From: https://www.cnblogs.com/pwnda/p/18591405

相关文章

  • flask_06days
    flask-session#django中session都是放在django-session表中 #flask的session,是加密后放到cookie中了#现在向把session存在服务端--——》不放在cookie中了 -表中:跟djagno默认一样-缓存(redis):性能高#第三方模块:解决了这个问题--》flask-sessio......
  • 爬虫_06days
    #1scrapy框架架构 -爬虫:我们写爬取起始地址,解析数据的位置-引擎:控制数据流向-调度器:控制爬取的先后-下载器:负责下载,建立在twisted之上-pipline:持久化#2目录结构 -创建爬虫命令:scrapygensipder名字网址-运行爬虫:scrapycraw......
  • luffy_06days 短信++
    昨日回顾#1Git的作用1对文件(代码)进行版本管理2完成协同开发项目,帮助程序员整合代码i)帮助开发者合并开发的代码ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突#2Git简介Git是分布式版本控制系统(在本地进行版本管理),控制的对象......
  • vue入门——???06days
    案例回顾:点击显示小电影案例-按钮点击事件-axios.get().then(res=>{res.data#响应体的内容})-v-for循环---》div#2计算属性-必须要有返回值,返回值当做属性的值-方法当属性用-computed中-它依赖的变量发生变......
  • Cadence SPB 22.1 -- 层次原理图设计06Day
    1、自上而下:先设计好母图,再用母图的方块图来设计子图①、创建分级模块(HierarchicalBlock),在原理图设计的页面,执行菜单命令“Place”→“HierarchicalBlock”。    ②、在弹出的对话框中,输入分级模块的名称,选择合适的参数,单击“OK”按钮。     ......
  • 机器学习基础06DAY
    模型检验-交叉验证一般在进行模型的测试时,我们会将数据分为训练集和测试集。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进......