1. 程式人生 > 其它 >HDU1560 DNA sequence(迭代加深搜尋)

HDU1560 DNA sequence(迭代加深搜尋)

Spring 整合 MyBatis

​ 將 MyBatis與 Spring 進行整合,主要解決的問題就是將 SqlSessionFactory 物件交由 Spring來管理。所以,該整合,只需要將 SqlSessionFactory 的物件生成器 SqlSessionFactoryBean 註冊在 Spring 容器中,再將其注入給 Dao 的實現類即可完成整合。
​ 實現 Spring 與 MyBatis 的整合常用的方式:掃描的 Mapper 動態代理 Spring 像插線板一樣,mybatis 框架是插頭,可以容易的組合到一起。插線板 spring 插上 mybatis,兩個框架就是一個整體。

1.1 MySQL 建立資料庫 springdb, 新建表 Student

1.2 maven 依賴 pom.xml

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring核心ioc用到的-->
    <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>

    <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>

    <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>

外掛:

<resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目錄-->
        <includes><!--包括目錄下的.properties,.xml 檔案都會掃描到-->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>

1.3 定義實體類 Student

package com.g0rez.entity;

public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;

    public Student(Integer id, String name, String email, Integer age) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

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

1.4 定義 StudentDao 介面

package com.g0rez.dao;

import com.g0rez.entity.Student;

import java.util.List;

public interface StudentDao {
    int insertStudent(Student student);
    List<Student> selectStudents();
}

1.5 定義對映檔案 mapper

在 Dao 介面的包中建立 MyBatis 的對映檔案 mapper,命名與介面名相同,本例為
StudentDao.xml。mapper 中的 namespace 取值也為 Dao 介面的全限定性名。

<?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="com.g0rez.dao.StudentDao">
    <insert id="insertStudent">
        insert into student values (#{id},#{name},#{email},#{age})
    </insert>
    <select id="selectStudents" resultType="com.g0rez.entity.Student">
        select id,name,email,age from student order by id desc
    </select>
</mapper>

1.6 定義 Service 介面和實現類

介面定義:

package com.g0rez.service;

import com.g0rez.entity.Student;

import java.util.List;

public interface StudentService {
        int addStudent(Student student);
        List<Student> queryStudents();
}

實現類定義:

package com.g0rez.service.impl;

import com.g0rez.dao.StudentDao;
import com.g0rez.entity.Student;
import com.g0rez.service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao;
    //使用set注入
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public int addStudent(Student student) {
        int nums = studentDao.insertStudent(student);
        return nums;
    }

    @Override
    public List<Student> queryStudents() {
        List<Student> students = studentDao.selectStudents();
        return students;
    }
}

1.7 定義 MyBatis 主配置檔案

在 src 下定義 MyBatis 的主配置檔案,命名為 mybatis.xml。
這裡有兩點需要注意:
(1)主配置檔案中不再需要資料來源的配置了。因為資料來源要交給 Spring 容器來管理了。
(2)這裡對 mapper 對映檔案的註冊,使用標籤,即只需給出 mapper 對映檔案
所在的包即可。因為 mapper 的名稱與 Dao 介面名相同,可以使用這種簡單註冊方式。這種
方式的好處是,若有多個對映檔案,這裡的配置也是不用改變的。當然,也可使用原來的
標籤方式。

<?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>
    <!--  settings  控制mybatis全域性行為-->
    <settings>
        <!--        設定mybatis輸出日誌-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
<!--    設定別名-->
    <typeAliases>
        <package name="com.g0rez.entity" />
    </typeAliases>
    <mappers>
        <package name="com.g0rez.dao"/>
    </mappers>
</configuration>

1.8 修改 Spring 配置檔案

1.8.1. 資料來源的配置( 掌握)

使用 JDBC 模板,首先需要配置好資料來源,資料來源直接以 Bean 的形式配置在 Spring 配
置檔案中。根據資料來源的不同,其配置方式不同:
Druid 資料來源 DruidDataSource
Druid 是阿里的開源資料庫連線池。是 Java 語言中最好的資料庫連線池。Druid 能
夠提供強大的監控和擴充套件功能。Druid 與其他資料庫連線池的最大區別是提供資料庫的
官網:https://github.com/alibaba/druid
使用地址:https://github.com/alibaba/druid/wiki/常見問題
配置連線池:

<!--    宣告資料來源DataSource 作用是連線資料庫的-->
        <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
              destroy-method="close">
            <!--setter注入給DruidDataSource資料來源連線資料庫的資訊-->
            <property name="url" value="${jdbc.url}" /><!--setUrl()-->
            <property name="name" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="maxActive" value="${jdbc.maxActive}" />
        </bean>

Spring 配置檔案:

1.8.2. 從屬性檔案讀取資料庫連線資訊

為了便於維護,可以將資料庫連線資訊寫入到屬性檔案中,使 Spring 配置檔案從中讀取資料。屬性檔名稱自定義,但一般都是放在 src 下。
Spring 配置檔案從屬性檔案中讀取資料時,需要在的 value 屬性中使用${ },
將在屬性檔案中定義的 key 括起來,以引用指定屬性的值。該屬性檔案若要被 Spring 配置檔案讀取,其必須在配置檔案中進行註冊。使用標籤。
context:property-placeholder/ 方式( 掌握)
該方式要求在 Spring 配置檔案頭部加入 spring-context.xsd 約束檔案
context:property-placeholder/標籤中有一個屬性 location,用於指定屬性檔案的位置。

<context:property-placeholder location="jdbc.properties" />

1.8.3. 註冊 SqlSessionFactoryBean

    <!--宣告的是mybatis中提供的SqlSessionFactoryBean類 這個類內部建立的就是SqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!--            set注入吧資料庫的連線池賦給了dataSource這個屬性-->
            <property name="dataSource" ref="myDataSource" />
<!--            mybatis主配置檔案的位置
                 configLocation屬性是Resource型別,讀取配置檔案
                 它的賦值,使用value ,指定檔案的路怪,使用classpath:表示檔案的位置
-->
            <property name="configLocation" value="classpath:mybatis.xml" />
        </bean>

1.8.4. 定義 Mapper 掃描配置器 MapperScannerConfigurer

Mapper 掃描配置器 MapperScannerConfigurer 會自動生成指定的基本包中 mapper 的代
理物件。該 Bean 無需設定 id 屬性。basePackage 使用分號或逗號設定多個包。

    <!--建立dao物件,使用sqlsession的getMapper ( StudentDao.class )
        MapperScannerConfigurer:在內部呼叫getMapper()生成每個dao介面的代理物件。
-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--指定SqlSessionFactory物件的id-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <!--指定包名
                指定包名,包名是dao介面所在的包名。
                MapperScannerConfigurer會掃描這個包中的所有介面,
                把每個介面都執行一次getMapper()方法,得到每個介面的dao物件。
                建立好的dao物件放入到spring的容器中的。
            -->
            <property name="basePackage" value="com.g0rez.dao" />
        </bean>

1.9 向 Service 注入介面名

向 Service 注入 Mapper 代理物件時需要注意,由於通過 Mapper 掃描配置器
MapperScannerConfigurer 生成的 Mapper 代理物件沒有名稱,所以在向 Service 注入 Mapper
代理時,無法通過名稱注入。但可通過介面的簡單類名注入,因為生成的是這個 Dao 介面
的物件。

    <bean id="studentService" class="com.g0rez.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao" />

    </bean>

1.10 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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <context:property-placeholder location="jdbc.properties" />
<!--    宣告資料來源DataSource 作用是連線資料庫的-->
        <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
              destroy-method="close">
            <!--setter注入給DruidDataSource資料來源連線資料庫的資訊-->
            <property name="url" value="${jdbc.url}" /><!--setUrl()-->
            <property name="name" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="maxActive" value="${jdbc.maxActive}" />
        </bean>
    <!--宣告的是mybatis中提供的SqlSessionFactoryBean類 這個類內部建立的就是SqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!--            set注入吧資料庫的連線池賦給了dataSource這個屬性-->
            <property name="dataSource" ref="myDataSource" />
<!--            mybatis主配置檔案的位置
                 configLocation屬性是Resource型別,讀取配置檔案
                 它的賦值,使用value ,指定檔案的路怪,使用classpath:表示檔案的位置
-->
            <property name="configLocation" value="classpath:mybatis.xml" />
        </bean>
    <!--建立dao物件,使用sqlsession的getMapper ( StudentDao.class )
        MapperScannerConfigurer:在內部呼叫getMapper()生成每個dao介面的代理物件。
-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--指定SqlSessionFactory物件的id-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <!--指定包名
                指定包名,包名是dao介面所在的包名。
                MapperScannerConfigurer會掃描這個包中的所有介面,
                把每個介面都執行一次getMapper()方法,得到每個介面的dao物件。
                建立好的dao物件放入到spring的容器中的。
            -->
            <property name="basePackage" value="com.g0rez.dao" />
        </bean>
    <bean id="studentService" class="com.g0rez.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao" />

    </bean>
</beans>

本文來自部落格園,作者:g0rez,轉載請註明原文連結:https://www.cnblogs.com/g0rez/p/15379444.html