最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis 注解操作與 XML 配置增刪改查全流程實(shí)現(xiàn)代碼

 更新時(shí)間:2026年01月22日 16:43:35   作者:獨(dú)斷萬(wàn)古他化  
本文介紹了MyBatis,它是一款輕量級(jí)的持久層框架,能簡(jiǎn)化JDBC冗余代碼,支持自定義SQL與對(duì)象映射,并兼顧開發(fā)效率與靈活性,通過(guò)實(shí)例代碼介紹了MyBatis 注解操作與 XML 配置增刪改查全流程實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧

一、Mybatis 初識(shí)

1.1 Mybatis 定義

  • MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對(duì)象)為數(shù)據(jù)庫(kù)中的記錄。

web應(yīng)用程序?般分為三層,即:Controller、Service、Dao。持久層(Dao)是數(shù)據(jù)訪問(wèn)層,用來(lái)操作數(shù)據(jù)庫(kù)。

而 MyBatis 是更簡(jiǎn)單完成程序和數(shù)據(jù)庫(kù)交互的框架,也就是更簡(jiǎn)單的操作和讀取數(shù)據(jù)庫(kù)工具。

1.2 入門案例

  1. 數(shù)據(jù)準(zhǔn)備:
-- 創(chuàng)建表[用戶表]
DROP TABLE IF EXISTS user_info;
CREATE TABLE `user_info` (
        `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
        `username` VARCHAR ( 127 ) NOT NULL,
        `password` VARCHAR ( 127 ) NOT NULL,
        `age` TINYINT ( 4 ) NOT NULL,
        `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-女 0-默認(rèn)',
        `phone` VARCHAR ( 15 ) DEFAULT NULL,
        `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除',
        `create_time` DATETIME DEFAULT now(),
        `update_time` DATETIME DEFAULT now() ON UPDATE now(),
        PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 
-- 添加用戶信息
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.user_info( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
  1. 創(chuàng)建對(duì)應(yīng)實(shí)體類:
@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}
  1. 配置數(shù)據(jù)庫(kù)連接字符串
    Mybatis 中配置連接數(shù)據(jù)庫(kù),需要數(shù)據(jù)庫(kù)相關(guān)參數(shù)配置
    Mysql 驅(qū)動(dòng)類
    登錄名
    密碼
    數(shù)據(jù)庫(kù)連接字符串
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  1. 持久層代碼
@Mapper
public interface UserInfoMapper {
		@Select("select * from user_info")
    List<UserInfo> selectAll();
}
  • 持久層接口的命名規(guī)范一般為 XxxMapper
  • @Mapper 注解:用于標(biāo)識(shí)這是 MyBatis 中的 Mapper 接口
  • 程序運(yùn)行時(shí),框架會(huì)自動(dòng)為該接口生成實(shí)現(xiàn)類對(duì)象(代理對(duì)象),并將其交給 Spring 的 IOC 容器管理
  • @Select 注解:代表一個(gè) select 查詢,注解內(nèi)的內(nèi)容就是對(duì)應(yīng)方法的具體 SQL 實(shí)現(xiàn)
  1. 單元測(cè)試
    在創(chuàng)建出來(lái)的SpringBoot工程中,在src下的test目錄下,已經(jīng)自動(dòng)創(chuàng)建好了測(cè)試類,可以直接使用這個(gè)測(cè)試類來(lái)進(jìn)行測(cè)試。
@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Test
    void selectAll() {
        List<UserInfo> userInfos = userInfoMapper.selectAll();
        userInfos.forEach(System.out::println);
    }
}

運(yùn)行結(jié)果如下:

二、Mybatis 基礎(chǔ)操作

下面詳細(xì)講述MyBatis的增,刪,改,查操作。

2.1 打印日志

  • 在 MyBatis 中,我們可以借助日志查看 SQL 語(yǔ)句的執(zhí)行、執(zhí)行時(shí)傳遞的參數(shù),以及最終的執(zhí)行結(jié)果
  • 日志功能只需在配置文件中進(jìn)行配置即可啟用
#  配置打印MyBatis?志
mybatis:
  configuration: 
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl		

重新運(yùn)行可以得到如下內(nèi)容,傳遞參數(shù)和執(zhí)行結(jié)果:

2.2 參數(shù)傳遞

需求:根據(jù)id 查詢用戶,sql select * from user_info where id = ?。

  • 問(wèn)題:如果 SQL 語(yǔ)句中的 id 寫為固定數(shù)值(如 id=4),則只能查詢固定對(duì)應(yīng)的數(shù)據(jù),無(wú)法滿足動(dòng)態(tài)查詢的需求。
  • 解決方案:在 selectById 方法中添加參數(shù) (id),將方法的參數(shù)傳遞給 SQL 語(yǔ)句。
  • 具體用法:使用 #{} 的方式獲取方法中的參數(shù),從而讓 SQL 支持動(dòng)態(tài)數(shù)值。
	@Select("select id,username,`password`,age,gender,phone,delete_flag," +
            "create_time,update_time from user_info where id= #{id}")
    UserInfo selectById(Integer id);

如果mapper接口方法形參只有?個(gè)普通類型的參數(shù),#{…}里面的屬性名可以隨便寫,如:#{id}、#{value}。建議和參數(shù)名保持?致。但是參數(shù)有多個(gè)時(shí),必須和參數(shù)名保持一致。

測(cè)試用例:

	@Test
    void selectById() {
        UserInfo userInfo = userInfoMapper.selectById(1);
        System.out.println(userInfo);
    }

結(jié)果:

也可以通過(guò) @Param 設(shè)置參數(shù)的別名,如果使用 @Param 設(shè)置別名,#{...} 里面的屬性名必須和 @Param 設(shè)置的一樣,例:

	@Select("select id,username,`password`,age,gender,phone,delete_flag," +
            "create_time,update_time from user_info where id= #{id}")
    UserInfo selectById(@Param("id") Integer id);

2.3 增(Insert)

	@Insert("insertinto user_info (username, `password`, age, gender)" +
            "values (#{username},#{password},#{age},#{gender})")
    Integer insertUser(UserInfo userInfo);

可以直接使用UserInfo 對(duì)象的屬性名來(lái)獲取參數(shù)。也可以寫出所有屬性來(lái)獲取參數(shù)。
此時(shí)返回的是執(zhí)行的行數(shù)。

測(cè)試:

	@Test
    void insertUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("java1");
        userInfo.setPassword("java1");
        userInfo.setAge(20);
        userInfo.setGender(1);
        Integer result = userInfoMapper.insertUser(userInfo);
        log.info("影響行數(shù):{}",result);
    }

新增之后可以刷新數(shù)據(jù)庫(kù)查看執(zhí)行結(jié)果。

如果設(shè)置了 @Param 屬性,#{…}需要使用 參數(shù).屬性來(lái)獲取
@Insert("insert INTO user_info (username, password, age, gender) values (#{userInfo.username},#{userInfo.password},#{userInfo.age},#{userInfo.gender})") Integer insertUser2(@Param("userInfo") UserInfo userInfo);

  • 返回主鍵 @Options
    Insert 語(yǔ)句默認(rèn)返回的是受影響的行數(shù)
    但有些情況下,數(shù)據(jù)插入之后,還需要有后續(xù)的關(guān)聯(lián)操作,需要獲取到新插入數(shù)據(jù)的 id。如果想要拿到 id ,需要在Mapper 接口的方法上添加一個(gè)注解 @Options。
	@Options(useGeneratedKeys = true,keyProperty = "id") // 獲得自增ID,通過(guò)注解
    @Insert("insertinto user_info (username, `password`, age, gender)" +
            "values (#{username},#{password},#{age},#{gender})")
    Integer insertUser(UserInfo userInfo);
  • useGeneratedKeys:這會(huì)令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來(lái)取出由數(shù)據(jù)庫(kù)內(nèi)部生成的主鍵(比如像 MySQL 和 SQL Server 這樣的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的自動(dòng)遞增字段),默認(rèn)值:false。
  • keyProperty:指定能夠唯一識(shí)別對(duì)象的屬性,MyBatis 會(huì)使用 getGeneratedKeys 的返回值或 insert 語(yǔ)句的 selectKey 子元素設(shè)置它的值,默認(rèn)值:未設(shè)置(unset
  • 注意:設(shè)置 useGeneratedKeys=true 之后,方法返回值依然是受影響的行數(shù),自增 id 會(huì)設(shè)置在上述 keyProperty 指定的屬性中。

2.4 刪(Delete)

Mapper 接口:

	@Delete("delete from user_info where id = #{id}")
    Integer deleteUserById(Integer id);

測(cè)試:

	@Test
    void deleteUserById() {
        Integer result = userInfoMapper.deleteUserById(11);
    }

2.5 改(Update)

Mapper 接口:

	@Update("update user_info set gender = #{gender} where id = #{id}")
    void updateUserById(Integer gender,Integer id);

測(cè)試:

	@Test
    void updateUserById() {
        userInfoMapper.updateUserById(0,11);
    }

2.6 查(Select)

在上面查詢時(shí)發(fā)現(xiàn),有幾個(gè)字段是沒有賦值的,只有 Java 對(duì)象屬性和數(shù)據(jù)庫(kù)字段一模一樣時(shí),才會(huì)進(jìn)行賦值。查詢結(jié)果:

從運(yùn)行結(jié)果上可以看到,我們SQL語(yǔ)句中,查詢了delete_flag, create_time, update_time,但是這幾個(gè)屬性卻沒有賦值。

原因分析:
當(dāng)自動(dòng)映射查詢結(jié)果時(shí),MyBatis會(huì)獲取結(jié)果中返回的列名并在Java類中查找相同名字的屬性(忽略大小寫)。這意味著如果發(fā)現(xiàn)了ID列和id屬性,MyBatis會(huì)將列ID的值賦給id屬性

解決辦法:

  1. 起別名
  2. 結(jié)果映射
  3. 開啟駝峰命名

2.6.1 起別名

在SQL 語(yǔ)句中,給列名起別名,保持別名和實(shí)體類屬性名一樣。

    @Select("SELECT id,username,`password`,age,gender,phone,delete_flag as deleteFlag, " +
            "create_time as createTime, update_time as updateTime " +
            "from user_info") //起別名
    List<UserInfo> selectAll();

2.6.2 結(jié)果映射

使用Spring 提供的注解 @Results :

    @Results(id = "BaseMap",value = {
            @Result(column = "delete_flag",property = "deleteFlag"),
            @Result(column = "create_time",property = "createTime"),
            @Result(column = "update_time",property = "updateTime"),
    })  //通過(guò)注解映射
    @Select("select id,username,`password`,age,gender,phone,delete_flag," +
            "create_time,update_time from user_info")
    List<UserInfo> selectAll();

如果其他SQL 需要復(fù)用這個(gè)映射關(guān)系,可以給這個(gè)Results 定義一個(gè)名稱,如上id = "BaseMap" ,使用 @ResultMap 注解來(lái)復(fù)用即可,例:

    @ResultMap("BaseMap")
    @Select("select id,username,`password`,age,gender,phone,delete_flag," +
            "create_time,update_time from user_info where id= #{id}")
    UserInfo selectById(@Param("id") Integer id);

2.6.3 開啟駝峰命名

通常數(shù)據(jù)庫(kù)列使用蛇形命名法進(jìn)行命名(下劃線分割各個(gè)單詞),而 Java 屬性一般遵循駝峰命名法約定。為了在這兩種命名方式之間啟用自動(dòng)映射,需要將 mapUnderscoreToCamelCase 設(shè)置為 true。

mybatis:
  configuration:
    map-underscore-to-camel-case: true #配置駝峰自動(dòng)轉(zhuǎn)換

駝峰命名規(guī)則:abc_xyz => abcXyz

  • 表中字段名:abc_xyz
  • 類中屬性名:abcXyz

Java 代碼不做任何處理

通過(guò)上面三個(gè)方法后,執(zhí)行查詢發(fā)現(xiàn)所有字段都可以查詢到數(shù)據(jù),全部進(jìn)行正確賦值:

三、Mybatis XML 配置文件

Mybatis 的開發(fā)有兩種方式:

  1. 注解
  2. XML配置文件

3.1 配置

需要進(jìn)行數(shù)據(jù)庫(kù)連接字符串配置和Mybatis 的 XML 文件配置。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: whx041223
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml # 配置 mybatis xml 文件路徑;classpath 對(duì)應(yīng)resources
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #  配置打印MyBatis?志
    map-underscore-to-camel-case: true #配置駝峰?動(dòng)轉(zhuǎn)換

3.2 入門案例

進(jìn)行持久層代碼編寫

  1. 方法定義 Interface,添加Mapper 接口
@Mapper
public interface UserInfoXmlMapper {
    List<UserInfo> selectAll();
}
  1. 方法實(shí)現(xiàn),添加UserInfoXMLMapper.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="com.whx.mybatis.mapper.UserInfoXmlMapper">
    <select id="selectAll" resultType="com.whx.mybatis.entity.UserInfo">
        select id,username,`password`,age,gender,phone,delete_flag,
        create_time,update_time from user_info
    </select>
</mapper>

標(biāo)簽的說(shuō)明:

  • <mapper> 標(biāo)簽:需要指定 namespace 屬性,表示命名空間,值為 mapper 接口的全限定名,包括全包名.類名。
  • <select> 查詢標(biāo)簽:是用來(lái)執(zhí)行數(shù)據(jù)庫(kù)的查詢操作的:
    • id:是和 Interface(接口)中定義的方法名稱一樣的,表示對(duì)接口的具體實(shí)現(xiàn)方法。
    • resultType:是返回的數(shù)據(jù)類型,也就是開頭定義的實(shí)體類。

3.1 增(Insert)

接口:

	Integer insertUser(UserInfo userInfo);

方法實(shí)現(xiàn):

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into user_info (username, `password`, age, gender)
        values (#{username},#{password},#{age},#{gender})
    </insert>

返回自增id,接口定義不變,在Mapper.xml 中設(shè)置useGeneratedKeys和keyProperty屬性。

如果使用 @Param 設(shè)置參數(shù)名,使用方法和注解類似:
接口:

	Integer insertUser(@Param("userInfo") UserInfo userInfo);

方法實(shí)現(xiàn):

<insert id="insertUser">
        insert INTO user_info (username, `password`, age, gender)
        values (#{userInfo.username},#{userInfo.password},#{userInfo.age},#{userInfo.gender})
    </insert>

3.2 刪(Delete)

接口:

	Integer deleteUserById(Integer id);

方法實(shí)現(xiàn):

<delete id="deleteUserById">
        delete from user_info where id = #{id}
    </delete>

3.3 改(Update)

接口:

	void updateUserById(Integer gender,Integer id);

方法實(shí)現(xiàn):

<update id="updateUserById">
        update user_info set gender = #{gender} where id = #{id}
    </update>

3.4 查(Select)

和注解方式一樣,使用XML方式查詢也存在數(shù)據(jù)封裝的問(wèn)題。

結(jié)果顯示:deleteFlag,createTime,updateTime也沒有進(jìn)行賦值。
解決辦法和注解一樣:

  1. 起別名
  2. 結(jié)果映射
  3. 開啟駝峰命名

其中1,3的解決辦法和注解一樣,結(jié)果映射在XML中的方法:

    <resultMap id="BaseMapXml" type="com.whx.mybatis.entity.UserInfo">
        <id property="id" column="id"></id>
        <result property="deleteFlag" column="delete_flag"></result>
        <result property="createTime" column="create_time"></result>
        <result property="updateTime" column="update_time"></result>
    </resultMap>
	<select id="selectAll" resultMap="BaseMapXml">
        select id,username,`password`,age,gender,phone,delete_flag,
        create_time,update_time from user_info
    </select>

解析:

總結(jié):
本文圍繞 MyBatis 輕量級(jí)持久層框架展開,總結(jié)其核心使用要點(diǎn)。MyBatis 通過(guò)注解或 XML 配置簡(jiǎn)化 JDBC 冗余代碼,支持自定義 SQL 與對(duì)象映射,兼顧開發(fā)效率與靈活性。入門環(huán)節(jié)涵蓋數(shù)據(jù)庫(kù)準(zhǔn)備、實(shí)體類定義、配置編寫、Mapper 接口開發(fā)及單元測(cè)試,可快速搭建運(yùn)行環(huán)境?;A(chǔ)操作中,日志配置能查看 SQL 執(zhí)行細(xì)節(jié),#{}實(shí)現(xiàn)單參數(shù)、多參數(shù)等場(chǎng)景的動(dòng)態(tài)綁定,增刪改查操作可通過(guò)注解或 XML 配置獲取自增主鍵,查詢結(jié)果映射提供起別名、resultMap、駝峰命名轉(zhuǎn)換三種方案,解決數(shù)據(jù)庫(kù)與 Java 命名適配問(wèn)題。XML 配置適配復(fù)雜 SQL 場(chǎng)景,掌握這些核心點(diǎn)即可應(yīng)對(duì)日常持久層開發(fā)。

到此這篇關(guān)于MyBatis 注解操作與 XML 配置增刪改查全流程實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)MyBatis 注解與 XML 配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼

    Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼

    PDFBox是一個(gè)開源Java類庫(kù),用于讀取和創(chuàng)建PDF文檔,它支持文本提取、表單處理、文檔加密解密、合并分割、內(nèi)容覆蓋追加、文檔打印和轉(zhuǎn)換等功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • 詳解java中String值為空字符串與null的判斷方法

    詳解java中String值為空字符串與null的判斷方法

    這篇文章主要介紹了詳解java中String值為空字符串與null的判斷方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • redis與ssm整合方法(mybatis二級(jí)緩存)

    redis與ssm整合方法(mybatis二級(jí)緩存)

    本文給大家介紹redis與ssm整合方法(mybatis二級(jí)緩存)。主要是利用redis去做mybatis的二級(jí)緩存,mybaits映射文件中所有的select都會(huì)刷新已有緩存,如果不存在就會(huì)新建緩存,所有的insert,update操作都會(huì)更新緩存
    2017-12-12
  • SpringBoot項(xiàng)目如何把接口參數(shù)中的空白值替換為null值(推薦)

    SpringBoot項(xiàng)目如何把接口參數(shù)中的空白值替換為null值(推薦)

    這篇文章主要介紹了SpringBoot項(xiàng)目如何把接口參數(shù)中的空白值替換為null值(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java中的反射用法及說(shuō)明

    Java中的反射用法及說(shuō)明

    Java反射機(jī)制允許運(yùn)行時(shí)動(dòng)態(tài)獲取和操作類的成員(屬性、方法、構(gòu)造器),通過(guò)Class對(duì)象實(shí)現(xiàn),廣泛應(yīng)用于框架開發(fā)及動(dòng)態(tài)調(diào)用需求,支持繞過(guò)泛型限制、讀取配置文件等場(chǎng)景
    2025-07-07
  • Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位

    Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位

    這篇文章主要介紹了Springboot啟動(dòng)報(bào)錯(cuò)時(shí)實(shí)現(xiàn)異常定位,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Go并發(fā)編程中使用channel的方法

    Go并發(fā)編程中使用channel的方法

    本文給大家介紹Go并發(fā)編程中使用channel的方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Java如何通過(guò)Socket同時(shí)發(fā)送文本和文件

    Java如何通過(guò)Socket同時(shí)發(fā)送文本和文件

    這篇文章主要介紹了Java如何通過(guò)Socket同時(shí)發(fā)送文本和文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java設(shè)計(jì)模式之原型模式詳解

    Java設(shè)計(jì)模式之原型模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java Spring框架簡(jiǎn)介與Spring IOC詳解

    Java Spring框架簡(jiǎn)介與Spring IOC詳解

    Spring 框架是一個(gè)輕量級(jí)的解決方案,可以一站式地構(gòu)建企業(yè)級(jí)應(yīng)用。它是為了解決 企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的 JavaBean 來(lái)完成以前只可能由 EJB 完成的事情。IOC 是 Inversion of Control 的縮寫,多數(shù)書籍翻譯成控制反轉(zhuǎn)
    2021-09-09

最新評(píng)論

随州市| 晋城| 伊宁县| 清水县| 华阴市| 肇源县| 东台市| 泽州县| 正蓝旗| 清原| 伊宁市| 巴中市| 吐鲁番市| 波密县| 南岸区| 四川省| 福安市| 宁晋县| 革吉县| 平原县| 广饶县| 历史| 新巴尔虎左旗| 五常市| 麻栗坡县| 丰城市| 高碑店市| 博白县| 巴彦淖尔市| 岐山县| 阿鲁科尔沁旗| 潢川县| 泰州市| 新和县| 文成县| 商南县| 黎平县| 郧西县| 扎囊县| 高雄市| 通辽市|