spring

  1. 轻量级 Spring采用了轻量级的设计原则,核心容器的大小很小,可以灵活地部署和使用。

  2. 依赖注入(Dependency Injection,DI):通过IoC容器将对象之间的依赖关系进行解耦,使得应用程序更加灵活和可测试。

  3. 控制反转(Inversion of Control,IoC):由Spring容器主动创建和管理对象,并负责对象间的依赖关系,而不是由开发者手动管理。

  4. 面向切面编程(Aspect-Oriented Programming,AOP):通过在应用程序中插入切面来解决横切关注点的问题,例如日志、事务、安全等。

  5. 数据访问(Data Access):Spring提供了对数据库访问的支持,包括JDBC、ORM(对象关系映射)框架如Hibernate、MyBatis等。

  6. Web开发支持:Spring MVC是一种基于MVC(Model-View-Controller)设计模式的Web框架,简化了Web应用程序的开发和测试。

  7. 安全性(Security):Spring Security提供了一套全面的认证和授权解决方案,用于保护应用程序的安全性。

  8. 测试支持:Spring框架提供了丰富的测试支持,例如通过JUnit对代码进行单元测试、Mock对象来模拟依赖等。

Spring 的优势

  1. 松耦合和高度可测试性


  2. 声明式事务管理:Spring提供了声明式事务管理的机制,可以通过简单的配置来管理事务。开发者不需要手动处理事务的启动、提交和回滚等操作,而是通过注解或XML配置来定义事务边界,简化了事务管理的编码过程。

  3. AOP支持:Spring对面向切面编程(AOP)提供了强大的支持。通过切面的方式,可以将通用的横切关注点(如日志、事务、安全等)与业务逻辑分离,实现了更好的模块化和复用性。

  4. 容器管理:Spring框架提供了一个IoC(Inversion of Control,控制反转)容器,负责管理对象的创建、销毁和生命周期等。开发者只需要通过配置文件或注解描述对象的依赖关系,而不需要手动管理对象的创建和销毁,提高了开发效率。

  5. 数据访问支持:Spring对数据访问提供了丰富的支持,包括对JDBC、ORM框架(如Hibernate、MyBatis)和NoSQL数据库的集成。通过简化数据访问的代码,提供了更高层次的抽象,使得开发者可以更方便地操作和管理数据。

  6. 灵活性和可扩展性:Spring框架采用模块化的设计,由多个独立的模块组成,每个模块都提供不同的功能。开发者可以根据需求选择性地使用这些模块,从而实现灵活和轻量级的应用程序开发,并且可以很容易地集成第三方库或自定义功能。

  7. 社区支持和丰富的生态系统:Spring是一个非常流行的开源框架,拥有庞大的开发者社区和丰富的生态系统。在社区中,您可以获得大量的文档、教程、示例代码和问题解答,以及与其他开发者的交流和分享经验。

实战思路

咱先建个user类 ,mapper包service这些搭好。

package domain;

import lombok.Data;

@Data
public class User {
    private Integer id;
     private String  name;
    private Integer gradeid;

}

mapper

package mapper;

import domain.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {
    List<User> getAllUser();
}

service

package service;

import domain.User;

import java.util.List;

public interface UserService {
    List<User> getAllUser();
}
package service;

import domain.User;
import mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
}

resources测试资源根下

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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--1.配置数据源-->
<context:property-placeholder location="database.properties"></context:property-placeholder>
    <!--4.2第二部 配置环境 给数据源添加首饰-->
    <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--配置SqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>

    <!--配置扫描包-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="mapper"></property>
    </bean>
    <context:component-scan base-package="service"/>
</beans>

 database.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3350/cvs_db?characterEncoding=utf-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root

log4j.properties

log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.cvs.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug

######################################################################################
# Console Appender  \u65E5\u5FD7\u5728\u63A7\u5236\u8F93\u51FA\u914D\u7F6E
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n


######################################################################################
# DailyRolling File  \u6BCF\u5929\u4EA7\u751F\u4E00\u4E2A\u65E5\u5FD7\u6587\u4EF6\uFF0C\u6587\u4EF6\u540D\u683C\u5F0F:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n


log4j.logger.com.opensymphony.xwork2=error  

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 这里可以定义命名空间或其他全局设置 -->
    <!--   <properties resource="database.properties"></properties>-->
    <settings>
        <setting name="autoMappingBehavior" value="FULL"/>
        <setting name="logImpl" value="LOG4J"/>
        <!-- <setting name="cacheEnabled" value="true"/>-->
    </settings>


    <typeAliases>
        <package name="domain"/>
      <!--  <package name="vo"/>-->
    </typeAliases>

    <!--2.设置 日志 缓存 自动匹配-->
    <!--   <settings>
           <setting name="logImpl" value="LOG4J"/>
       </settings>-->
    <!--3.环境配置-->
    <!--   <environments default="development">
           <environment id="development">
               &lt;!&ndash;mybatis对JDBC封装&ndash;&gt;
               <transactionManager type="JDBC"></transactionManager>
               <dataSource type="POOLED">
                   <property name="driver" value="${driver}"/>
                   <property name="url" value="${url}"/>
                   <property name="username" value="${username}"/>
                   <property name="password" value="${password}"/>
               </dataSource>
           </environment>
       </environments>-->

    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>

        <!--映射文件位于统一包路径下-->
    </mappers>

</configuration>
  <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

        <!-- 1.Spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 2.Spring dao依赖-->
        <!-- spring-jdbc包括了一些如jdbcTemplate的工具类-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 3.Spring web依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 4.Spring test依赖:方便做单元测试和集成测试 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>1.9.5</version>
        </dependency>

        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.0</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.8</version>
        </dependency>
 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.20.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.jboss</groupId>
            <artifactId>jboss-vfs</artifactId>
            <version>3.2.15.Final</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
    </dependencies>

建议这里慢慢的添加jar包依赖,新手不要把这些依赖一下子加进去只拿自己要用的依赖就行了。

再来到resources测试资源根下的mapper

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper">
        <select id="getAllUser" resultType="User">
                select * from user
        </select>
</mapper>

测试结果:

Spring总结

  1. 在Spring容器中,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的IOC,一句话搞定就是:对象由Spring创建,管理,装配!

  2. 在Spring容器中,用户如果想要访问不同的数据,只需在bean.xml文件中进行配置即可。不需要操纵其他的代码。测试文件也是可以写死的。因此使用了Spring容器之后,程序员把主要的精力放在实现业务逻辑以及系统性能上面即可。

  3. 并且在bean中可以绑定dao层的所有内容,每个类只需要一行代码即可,非常方便。

  4. Spring在我们创建bean.xml的时候它已经帮我们实例化了。我们在测试的时候,及时你没有new其它类中无参构造的内容,那些内容也会自动输出。------得到的想法:在以后项目开发的时候不要在无参构造中写入内容,除非是想每次都让项目输出一个特定的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值