1. 程式人生 > 其它 >【Spring 框架(自學)】Day06(重點)--2022/4/6

【Spring 框架(自學)】Day06(重點)--2022/4/6

Spring與Mybatis的整合

就是將spring與mybatis框架整合,整合的時候,以Spring為主,包住整個框架通過IOC(控制反轉)=來實現Mybatis的物件建立,所以配置檔案也需要做出改變:


環境配置

基礎配置:

<!--配置Mysql驅動-->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.23</version>
</dependency>

 <!--資料庫連線池:Mybatis自帶的資料連線池效能太弱,改用阿里的-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.2.8</version>
</dependency>

<!--德魯伊Druid連線池:Mybatis自帶的資料連線池效能太弱,改用阿里的-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.2.8</version>
</dependency>

<!--配置junit-->
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
   <scope>test</scope>
</dependency>

Spring環境配置:

<!--Spring本體-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<!--Spring事務-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<!--Spring訪問資料庫-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

Mybatis環境配置

<!--Mybatis本體-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

<!--Mybatis整合Spring的依賴:建立Mybatis物件-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.3</version>
</dependency>

其他配置:

<build>
    <!--用來包含src/main/resources的檔案輸出到結果中,輸出到classes目錄中-->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

這幾個配置是固定的,也是做專案之前的基礎配置


整合的實現

Mybatis實現資料庫的CRUD

首先進行Mybatis框架的搭建(對映資料庫、並進行資料庫的CRUD操作):

//建立對映資料庫的Pojo實體類:User

public class User{
    private Integer id;
    private String username;
    private String password;
    private Integer role;
    
    //構造方法
    //Getter()和Setter()方法
    //toString()方法
}
//建立持久層(Dao)的介面,並書寫方法:USerMapper

public interface UserMapper{
 	
    int addUser(User user);
    
    List<User> queryUser();
}
<!--Mybatis框架對持久層進行方法的實現:com/mybatis/Dao
	UserMapper.xml
-->

<!--標頭檔案-->
<mapper namespace = "持久層(Dao)的介面" useGeneratedKeys="true" keyProperty="id">
	<insert id = "addUser" parameterType="Pojo中的實體類">
    	insert into tbuser (username, password, role) 
        			values (#{username},#{password},#{role})
    </insert>
    
    <select id = "queryUser" resultType = "Pojo中的實體類">
    	select * from tbuser
    </select>
</mapper>

配置Mybatis-config檔案

<!--標頭檔案-->
<configuration>

    <!--日誌工廠設定-->
    <settings>
        <!--
            LOG4J:LOG4J日誌輸出
            <setting name="logImpl" value="LOG4J"/>
        -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <typeAliases>
        <!--自動識別,並設定別名-->
        <package name="com.mybatis"/>
    </typeAliases>


    <mappers>
        <package name="com.mybatis.Dao"/>
    </mappers>
    
</configuration>

配置資料庫檔案(db.properties)

mysql.driver= com.mysql.cj.jdbc.Driver

mysql.url=jdbc:mysql://localhost:3306/db_mybatisweb?useSSL=false&Timezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8

mysql.username= root

mysql.password= 123456

mysql.max= 20

建立業務層(Service),實現持久層方法並專注業務的開發

//業務層介面建立
public interface UserService{
    
    int addUser(User user);
    
    List<User> queryUser();
}
//介面實現類
public class UserServiceImpl implements UserService{
    //建立持久層(Dao)介面的物件
    private UserMapper userMapper;
    //因為是屬性,所以要進行set賦值,繫結持久層(Dao)介面
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
    
    //實現方法
    public int addUser(User user){
        int num = userMapper.addUser();
        return num;
    }
    
    public List<User> queryUser(){
        List<User> userList = userMapper.queryUser();
        return userList;
    }
}

將Mybatis框架交給Spring來管理

通過IOC(控制反轉),將Mybatis框架全權交給Spring容器進行物件的建立和管理:

  • 宣告db.properties

  • 宣告資料來源,連線資料庫

  • 宣告SqlSessionFactory,建立Sqlession工廠

  • 宣告持久層(Dao)的物件

<!--標頭檔案-->

<!-- 1 .宣告database配置檔案 -->
<context:property-placeholder location="classpath:資料庫配置檔案"></context:property-placeholder>
<!-- 2 .宣告資料來源,連線資料庫 -->
<bean id="myDataBaseSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--宣告資料庫連線的資訊-->
        <property name="driverClassName" value="${mysql.driver}"></property>
        <property name="url" value="${mysql.url}"></property>
        <property name="username" value="${mysql.username}"></property>
        <property name="password" value="${mysql.password}"></property>
        <!--資料庫最大連線數:20-->
        <property name="maxActive" value="${mysql.max}"></property>
    </bean>
<!-- 3 .宣告SqlSessionFactory
	 3.1 傳入資料來源
  	 3.2 mybatis配置檔案交給spring容器管理
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--set注入,將資料庫連線池賦給了dataSource屬性-->
    <property name="dataSource" ref="myDataBaseSource"></property>

    <!--宣告mybatis-config檔案的位置
                configLocation是Resource型別,用來讀取配置檔案的
                其用value來傳值給configLocation,其中classpath:用來尋找配置檔案的位置
        -->
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>

<!-- 4 .將持久層(Dao)交給Spring容器管理,建立Mapper物件 
	 4.1 傳入SqlSession,得到getMapper()方法
	 4.2 指定持久層(Dao)所在的包名,併為每個Mapper建立物件
	
	MapperScannerConfigurer屬性:會為所有Dao層介面執行getMapper()方法
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--指定已經建立好的sqlSession物件-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    <!--指定Dao介面所在的包名
            MapperScannerConfigurer會掃描包中所有的介面,併為每個介面執行一遍getMapper()方法,得到每個介面的Dao物件
            然後把它放到Spring的容器當中
        -->
    <property name="basePackage" value="com.mybatis.Dao"></property>
</bean>
<!--建立Service物件,將Dao層物件賦予給Service層
		實現功能、層級的分離
-->
<bean id="userService" class="com.mybatis.Service.Impl.UserServiceImpl">
    <property name="userMapper" ref="userMapper"></property>
</bean>