【Spring 框架(自學)】Day06(重點)--2022/4/6
阿新 • • 發佈:2022-04-07
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>