手牵手入门Spring5.2.5.RELEASE整合Mybatis3.5(手牵手百科)
 南窗  分类:IT技术  人气:86  回帖:0  发布于1年前 收藏

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。

Spring致力于提供一种方法管理你的业务对象。 Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。 它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。 Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录

简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的ORM字段关系映射。 提供对象关系映射标签,支持对象关系组建维护。 提供xml标签,支持编写动态sql。 整体框架

MyBatisUtils工具类

public class MyBatisUtils {
        private static SqlSessionFactory sqlSessionFactory = null;
        static {
            String config="mybatis-config.xml";
            InputStream inputStream = null;
            try {
                inputStream = Resources.getResourceAsStream(config);
                //创建SqlSessionFactory对象
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        //获取sqlSession的方法,非自动提交事务
        public  static SqlSession getSqlSession(){
            SqlSession sqlSession = null;
            if (sqlSessionFactory!=null){
                sqlSession =  sqlSessionFactory.openSession();//非自动提交事务
            }
            return sqlSession;
        }
        //获取sqlSession的方法,自动提交事务
        public  static SqlSession getSqlSessionAuto(){
            SqlSession sqlSession = null;
            if (sqlSessionFactory!=null){
                sqlSession =  sqlSessionFactory.openSession(true);//自动提交事务
            }
            return sqlSession;
        }
}

所需依赖:

spring依赖 spring事务依赖 mybatis依赖 mybatis-spring依赖 mysql驱动 德鲁伊连接池 单元测试 @Resource注解的依赖

pom.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
    <artifactId>SSM01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- spring依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>

        <!-- spring事务依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>

        <!-- mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!-- mybatis-spring集成依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>

        <!-- 德鲁伊连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--   @Resource注解的依赖-->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>
jdbc.properties文件

jdbc.url=jdbc:mysql://116.205.131.136:3306/mysql?useUnicode=true&amp;characterEncoding=utf-8
jdbc.user= root
jdbc.password= 111111
mybatis-config.xml配置文件

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

    <!-- 设置日志 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <mappers>
        <!-- 将dao包下的所有mapper文件全部扫描 -->
        <package name="com.qgs.dao"/>
    </mappers>

</configuration>
SpringConfig.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"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
       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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
        <!--        组件扫描-->
        <context:component-scan base-package="com.qgs"></context:component-scan>
        <!--引入外部文件-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!--        声明数据来源-->
        <bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.user}"></property>
                <property name="password" value="${jdbc.password}"></property>
        </bean>

    <!-- 声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory对象,之后就可以获取SqlSession对象 -->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定数据源 -->
        <property name="dataSource" ref="dateSource"/>
        <!-- 指定mybatis主配置文件 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 指定SqlSessionFactory对象的名称 -->
        <property name="sqlSessionFactoryBeanName" value="factory"/>
        <!-- 指定基本包,dao接口所在的包名 -->
        <property name="basePackage" value="com.qgs.dao"/>
    </bean>
    
</beans>
Staff实体类

package com.qgs.pojo;
import java.util.Objects;

/**
 * @author QGS
 * @version 1.0.0
 * @date 2023年03月09日 18:03:23
 * @packageName com.object
 * @className staff
 * @describe TODO
 */
public class Staff {
    private int id;
    private String name;
    private String diploma;
    private String title;
    private String marriage;
    private String status;
    private String workTime;

    public Staff(int id, String name, String diploma, String title, String marriage, String status, String workTime) {
        this.id = id;
        this.name = name;
        this.diploma = diploma;
        this.title = title;
        this.marriage = marriage;
        this.status = status;
        this.workTime = workTime;
    }

    public Staff() {
    }

    @Override
    public String toString() {
        return "Staff{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", diploma='" + diploma + '\'' +
                ", title='" + title + '\'' +
                ", marriage='" + marriage + '\'' +
                ", status='" + status + '\'' +
                ", workTime='" + workTime + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getDiploma() {
        return diploma;
    }

    public void setDiploma(String diploma) {
        this.diploma = diploma;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getMarriage() {
        return marriage;
    }

    public void setMarriage(String marriage) {
        this.marriage = marriage;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getWorkTime() {
        return workTime;
    }

    public void setWorkTime(String workTime) {
        this.workTime = workTime;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Staff staff = (Staff) o;
        return id == staff.id && Objects.equals(name, staff.name) && Objects.equals(diploma, staff.diploma) && Objects.equals(title, staff.title) && Objects.equals(marriage, staff.marriage) && Objects.equals(status, staff.status) && Objects.equals(workTime, staff.workTime);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, diploma, title, marriage, status, workTime);
    }
}
StaffDao接口

package com.qgs.dao;
import com.qgs.pojo.Staff;
import java.util.List;
/**
 * @author QGS
 * @version 1.0.0
 * @date 2023年03月09日 19:58:46
 * @packageName com.myabtis.dao
 * @className StaffDao
 * @describe TODO
 */
public interface StaffDao {
    //查询所有
    List<Staff> selectALL();
  
}
StaffDao.xml-mapper映射文件

<?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.qgs.dao.StaffDao">

    <select id="selectALL" resultType="com.qgs.pojo.Staff">
        SELECT * FROM staff;
    </select>

</mapper>
BankDao 接口

public interface BankDao {

    List<Bank> selectAllBank();
}
BankDao.xml

<?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.qgs.dao.BankDao">

    <select id="selectAllBank" resultType="com.qgs.pojo.Bank">
        SELECT * FROM bank
    </select>

</mapper>
StaffDaoService接口

public interface StaffDaoService {
    List<Staff> selectALL();

    List<Bank> selectAllBank();
}

负责注入的注解

@Value

@Autowired

@Qualifier

@Resoure

当属性是简单数据类型的时候,可以使用@Value注解进行注入

@Value是用来代替<property name="name" value="张三"/>

@Value可以用在属性、方法、构造方法上

@Autowired(注入)注解 @Autowired可以用来注入非简单类型。单独使用@Autowired注解:默认根据类型装配。[默认byType] @Autowired可以出现在构造方法,方法,参数,属性,别的注解上。

@Qualifier(注入)注解 当有多个实现类对象时,@Autowired和Qualifier联合使用,可以根据名称进行装配 Qualifier可以指定要执行的实现类对象

使用@Resource注解注入

@Resource注解是JDK扩展包中的,也就是属于JDK的一部分。所以该注解是标准注解,更加具有通用性。(JSR-250标准中指定的注解类型。JSR是Java规范提案)

@Autowired注解是Spring框架自己的。

@Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。

@Autowired注解默认根据类型装配bybyType,想根据名称装配,需要配合@Qualifier注解一起用。

@Resource注解用在属性上,setter方法上。

@Autowired注解用在属性上,setter方法上,构造方法上,构造方法参数上。

@Resource注解是JDK扩展包,不在JDK当中,需要引入依赖。

Spring6不在支持JavaEE,它支持的是JakartaEE9。

Spring6使用这个依赖

Spring5使用这个依赖

实现类

@Service
public class StaffDaoServiceImpl implements StaffDaoService {

    @Resource(name ="staffDao")
    StaffDao staffDao;

    @Resource(name ="bankDao")
    BankDao bankDao;

    public void setStaffDao(StaffDao staffDao) {
        this.staffDao = staffDao;
    }

    @Override
    public List<Staff> selectALL() {
        return staffDao.selectALL();
    }

    @Override
    public List<Bank> selectAllBank() {

        return bankDao.selectAllBank();
    }
}
测试类

@Test
public void test(){
    ApplicationContext applicationContext =new ClassPathXmlApplicationContext("SpringConfig.xml");
    StaffDaoService staffDaoServiceImpl = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);
    List<Staff> staffs = staffDaoServiceImpl.selectALL();
    for (Staff staff : staffs) {
        System.out.println(staff.toString());
    }

    StaffDaoService staffDaoServiceImpl1 = applicationContext.getBean("staffDaoServiceImpl", StaffDaoService.class);
    List<Bank> banks = staffDaoServiceImpl1.selectAllBank();
    for (Bank bank : banks) {
        System.out.println(bank.toString());
    }
}

Spring.xml主配置文件引入其他Spring.xml子配置文件

<import resource="SpringConfig2.xml"/>
 标签:spring,

讨论这个帖子(0)垃圾回帖将一律封号处理……