精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot 優(yōu)雅使用 Mybatis 的幾種姿勢!

開發(fā) 前端
兩種模式各有特點,注解版適合簡單快速的模式,其實像現(xiàn)在流行的這種微服務模式,一個微服務就會對應一個自已的數(shù)據(jù)庫,多表連接查詢的需求會大大的降低,會越來越適合這種模式。

ORM 框架的本質(zhì)是簡化編程中操作數(shù)據(jù)庫的編碼,發(fā)展到現(xiàn)在基本上就剩兩家了,一個是宣稱可以不用寫一句 Sql 的 Hibernate,一個是可以靈活調(diào)試動態(tài) Sql 的 Mybatis ,兩者各有特點,在企業(yè)級系統(tǒng)開發(fā)中可以根據(jù)需求靈活使用。發(fā)現(xiàn)一個有趣的現(xiàn)象:傳統(tǒng)企業(yè)大都喜歡使用 Hibernate ,互聯(lián)網(wǎng)行業(yè)通常使用 Mybatis 。

Mybatis 初期使用比較麻煩,需要各種配置文件、實體類、Dao 層映射關聯(lián)、還有一大推其它配置。當然 Mybatis 也發(fā)現(xiàn)了這種弊端,初期開發(fā)了generator可以根據(jù)表結果自動生產(chǎn)實體類、配置文件和 Dao 層代碼,可以減輕一部分開發(fā)量;后期也進行了大量的優(yōu)化可以使用注解了,自動管理 Dao 層和配置文件等,發(fā)展到最頂端就是今天要講的這種模式了, mybatis-spring-boot-starter就是 Spring Boot+ Mybatis 可以完全注解不用配置文件,也可以簡單配置輕松上手。

現(xiàn)在想想 Spring Boot 就是牛逼呀,任何東西只要關聯(lián)到 Spring Boot 都是化繁為簡。

mybatis-spring-boot-starter主要有兩種解決方案,一種是使用注解解決一切問題,一種是簡化后的老傳統(tǒng)。

當然任何模式都需要首先引入 mybatis-spring-boot-starter的 Pom 文件。

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

好了下來分別介紹兩種開發(fā)模式。

無配置文件注解版

就是一切使用注解搞定。

1、添加相關 Maven 文件

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

完整的 Pom 包這里就不貼了,大家直接看源碼。

2、添加相關配置

mybatis.type-aliases-package=com.neo.model

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Spring Boot 會自動加載 spring.datasource.* 相關配置,數(shù)據(jù)源就會自動注入到 sqlSessionFactory 中,sqlSessionFactory 會自動注入到 Mapper 中,對了,你一切都不用管了,直接拿起來使用就行了。

在啟動類中添加對 mapper 包掃描@MapperScan

@SpringBootApplication
@MapperScan("com.neo.mapper")
public class MybatisAnnotationApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisAnnotationApplication.class, args);
    }
}

或者直接在 Mapper 類上面添加注解@Mapper,建議使用上面那種,不然每個 mapper 加個注解也挺麻煩的。

3、開發(fā) Mapper

第三步是最關鍵的一塊, Sql 生產(chǎn)都在這里。

public interface UserMapper {

    @Select("SELECT * FROM users")
    @Results({
        @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
        @Result(property = "nickName", column = "nick_name")
    })
    List<UserEntity> getAll();

    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({
        @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
        @Result(property = "nickName", column = "nick_name")
    })
    UserEntity getOne(Long id);

    @Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
    void insert(UserEntity user);

    @Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
    void update(UserEntity user);


    @Delete("DELETE FROM users WHERE id =#{id}")
    void delete(Long id);

}

為了更接近生產(chǎn)我特地將usersex、nickname兩個屬性在數(shù)據(jù)庫加了下劃線和實體類屬性名不一致,另外user_sex使用了枚舉。

  • @Select 是查詢類的注解,所有的查詢均使用這個
  • @Result 修飾返回的結果集,關聯(lián)實體類屬性和數(shù)據(jù)庫字段一一對應,如果實體類屬性和數(shù)據(jù)庫屬性名保持一致,就不需要這個屬性來修飾。
  • @Insert 插入數(shù)據(jù)庫使用,直接傳入實體類會自動解析屬性到對應的值
  • @Update 負責修改,也可以直接傳入對象
  • @delete 負責刪除

注意,使用#符號和$符號的不同:

// This example creates a prepared statement, something like select * from teacher where name = ?;
@Select("Select * from teacher where name = #{name}")
Teacher selectTeachForGivenName(@Param("name") String name);


// This example creates n inlined statement, something like select * from teacher where name = 'someName';
@Select("Select * from teacher where name = '${name}'")
Teacher selectTeachForGivenName(@Param("name") String name);

4、使用

上面三步就基本完成了相關 Mapper 層開發(fā),使用的時候當作普通的類注入進入就可以了。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert() throws Exception {
        userMapper.insert(new User("aa1", "a123456", UserSexEnum.MAN));
        userMapper.insert(new User("bb1", "b123456", UserSexEnum.WOMAN));
        userMapper.insert(new User("cc1", "b123456", UserSexEnum.WOMAN));

        Assert.assertEquals(3, userMapper.getAll().size());
    }


    @Test
    public void testQuery() throws Exception {
        List<User> users = userMapper.getAll();
        System.out.println(users.toString());

    }


    @Test
    public void testUpdate() throws Exception {
        User user = userMapper.getOne(30l);
        System.out.println(user.toString());
        user.setNickName("neo");
        userMapper.update(user);
        Assert.assertTrue(("neo".equals(userMapper.getOne(30l).getNickName())));
    }

}

源碼中 Controller 層有完整的增刪改查,這里就不貼了。

極簡 xml 版本

極簡 xml 版本保持映射文件的老傳統(tǒng),接口層只需要定義空方法,系統(tǒng)會自動根據(jù)方法名在映射文件中找對應的 Sql。

1、配置

pom 文件和上個版本一樣,只是 application.properties新增以下配置。

mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

指定了 Mybatis 基礎配置文件和實體類映射文件的地址

mybatis-config.xml 配置

<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

這里也可以添加一些 Mybatis 基礎的配置

<mapper namespace="com.neo.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.neo.entity.UserEntity" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="passWord" property="passWord" jdbcType="VARCHAR" />
        <result column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/>
        <result column="nick_name" property="nickName" jdbcType="VARCHAR" />
    </resultMap>

    <sql id="Base_Column_List" >
        id, userName, passWord, user_sex, nick_name
    </sql>


    <select id="getAll" resultMap="BaseResultMap"  >
       SELECT 
       <include refid="Base_Column_List" />
       FROM users
    </select>

    <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" >
        SELECT 
       <include refid="Base_Column_List" />
       FROM users
       WHERE id = #{id}
    </select>


    <insert id="insert" parameterType="com.neo.entity.UserEntity" >
       INSERT INTO 
               users
               (userName,passWord,user_sex) 
           VALUES
               (#{userName}, #{passWord}, #{userSex})
    </insert>

    <update id="update" parameterType="com.neo.entity.UserEntity" >
       UPDATE 
               users 
       SET 
           <if test="userName != null">userName = #{userName},</if>
           <if test="passWord != null">passWord = #{passWord},</if>
           nick_name = #{nickName}
       WHERE 
               id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Long" >
       DELETE FROM
                users 
       WHERE 
                id =#{id}
    </delete>

</mapper>

其實就是把上個版本中 Mapper 的 Sql 搬到了這里的 xml 中了

3、編寫 Mapper 層的代碼

public interface UserMapper {

    List<UserEntity> getAll();

    UserEntity getOne(Long id);

    void insert(UserEntity user);

    void update(UserEntity user);

    void delete(Long id);

}

對比上一步,這里只需要定義接口方法

4、使用

使用和上個版本沒有任何區(qū)別。

如何選擇

兩種模式各有特點,注解版適合簡單快速的模式,其實像現(xiàn)在流行的這種微服務模式,一個微服務就會對應一個自已的數(shù)據(jù)庫,多表連接查詢的需求會大大的降低,會越來越適合這種模式。

老傳統(tǒng)模式比適合大型項目,可以靈活的動態(tài)生成 Sql ,方便調(diào)整 Sql ,也有痛痛快快,洋洋灑灑的寫 Sql 的感覺。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2023-01-30 07:41:43

2024-08-02 09:15:22

Spring捕捉格式

2019-08-29 14:30:16

代碼開發(fā)工具

2024-08-28 08:45:22

2020-01-10 16:23:44

Springboot停止服務Java

2011-01-20 10:09:25

2020-04-13 15:25:01

MySQL數(shù)據(jù)庫模糊搜索

2025-03-11 00:55:00

Spring停機安全

2023-06-28 08:25:14

事務SQL語句

2021-01-13 08:14:36

Windows提權漏洞攻擊

2021-03-10 10:05:59

網(wǎng)絡釣魚攻擊黑客

2017-12-11 14:12:40

PythonMySQL連接

2024-11-06 09:26:48

SpringprofileENV

2019-03-11 09:18:20

Java 8Stream數(shù)據(jù)結構

2017-05-05 11:31:34

2017-02-23 15:37:44

OptionObject容器

2021-02-23 08:02:23

線程volatileinterrupt

2017-07-10 13:09:45

前端Flexbox

2017-07-26 11:32:50

NETRabbitMQ系統(tǒng)集成

2015-11-26 10:53:45

LinuxWindowsMac OS
點贊
收藏

51CTO技術棧公眾號

亚洲字幕一区二区| 亚洲激情播播| 最新亚洲一区| 欧美肥胖老妇做爰| 日产精品久久久一区二区| 国内偷拍精品视频| 男人在线资源站| 成人av影音| 日韩美女视频一区二区| 国产精品黄页免费高清在线观看| 国产精品成人无码专区| 国产日产一区二区三区| 麻豆精品久久久| 国产一区二区三区在线观看视频 | 亚洲人成网站在线| 国产精品情侣自拍| 国产精久久一区二区三区| 国产无遮挡裸体视频在线观看| 国产精品 欧美精品| 日韩中文字幕欧美| 中文字幕中文在线| 日本在线视频网| 韩日av一区二区| 久久精品99久久香蕉国产色戒| 国产无遮挡猛进猛出免费软件| 四虎影院在线播放| 男人的天堂亚洲在线| 亚洲精选中文字幕| 欧美日韩亚洲一二三| 青青青草原在线| 久久精品主播| 国模精品视频一区二区三区| av2014天堂网| 高潮一区二区| 国产精品女主播av| 91免费的视频在线播放| 九九热视频精品| 国产精品成人自拍| 欧美性极品少妇精品网站| 日本不卡一区二区三区在线观看| 亚洲成人av影片| 精品日韩免费| 欧美福利一区二区| 欧美伦理片在线看| 欧美大片1688| 中文字幕亚洲精品在线观看| 亚洲mv在线看| www.色视频| 亚洲欧美久久久| 中文字幕亚洲一区二区三区五十路 | 在线观看日产精品| 欧美三级午夜理伦三级老人| 韩国av永久免费| 日韩中文字幕不卡| 久久国产精品久久精品| 国产伦精品一区二区三区精品| 忘忧草在线日韩www影院| 国产精品人成在线观看免费| 日韩精品极品视频在线观看免费| 男男激情在线| 国产精品自拍在线| 国产成人精品国内自产拍免费看| 成人免费精品动漫网站| 国产精品网在线观看| 精品国产乱码久久久久久牛牛| 国产a级片免费观看| 中文字幕中文字幕在线中高清免费版 | 亚洲国产一区在线观看| 久久99精品久久久久久秒播放器| 中文字幕 亚洲视频| 亚洲性色视频| 中文国产亚洲喷潮| a级黄色免费视频| 欧美xxxx在线| 91精品麻豆日日躁夜夜躁| 精品少妇在线视频| 蜜桃视频网站在线| 亚洲狠狠丁香婷婷综合久久久| 青青成人在线| 99re在线视频| 久久久久国色av免费看影院| 成人18视频| 国产精品久久久久毛片| 美女国产精品| 国产三级精品网站| 丰满熟女人妻一区二区三| 亚洲毛片一区| 国产精品狠色婷| 国产麻豆一精品一男同| 日本视频中文字幕一区二区三区| 韩国19禁主播vip福利视频| 日本天堂中文字幕| 国产亚洲欧洲| 91成人在线播放| 久久免费精彩视频| 欧美88av| 久久视频免费在线播放| 老司机精品免费视频| 少妇一区二区视频| 国产偷国产偷亚洲清高网站| 国产黄色三级网站| 成人一区而且| 中文字幕av一区二区三区谷原希美| 日本裸体美女视频| 日韩图片一区| 97色在线观看免费视频| 亚洲天堂aaa| 久久精品国产精品青草| 国产综合欧美在线看| 日韩一级片免费看| 成人h动漫精品一区二区| 国产精品久久一区二区三区| 亚洲第一天堂影院| 丁香激情综合国产| 国产一区二区免费电影| 日韩免费啪啪| 日韩欧美国产视频| 在线观看欧美一区二区| 福利片在线一区二区| 中文字幕在线看视频国产欧美在线看完整| 精品午夜福利视频| 狠狠色丁香九九婷婷综合五月| 欧美日韩亚洲综合一区二区三区激情在线 | 欧美日韩免费一区二区三区| 五月婷婷狠狠操| 色猫猫成人app| 欧美午夜不卡视频| 五月天av在线播放| 999色成人| 精品欧美乱码久久久久久1区2区| 男女性杂交内射妇女bbwxz| 91精品综合久久久久久久久久久| 成人444kkkk在线观看| 夜夜躁日日躁狠狠久久av| 99精品在线免费| 日本一区二区精品| 小视频免费在线观看| 精品国产网站在线观看| 欧美日韩三级在线观看| 国产在线看一区| 国产伦精品一区二区三区高清| 超碰在线免费播放| 午夜精品久久久久久不卡8050| 日本中文字幕片| 欧美黄色a视频| 亚洲国产成人久久综合| 亚洲黄色免费视频| 亚洲精品国产成人影院| 国外色69视频在线观看| 亚洲黄色小说网| 亚洲久草在线视频| 激情五月开心婷婷| 亚洲调教一区| 国产91久久婷婷一区二区| 国产精品无码久久久久成人app| 中文字幕成人网| 亚洲熟妇无码一区二区三区导航| 午夜久久av| 一色桃子一区二区| 五月天综合在线| 老司机免费视频一区二区三区| 日韩国产精品一区二区| av免费在线一区| 日韩一区二区三区国产| jizz中国女人| 中文字幕免费观看一区| 午夜精品中文字幕| 欧美 日韩 国产 一区| 岛国视频一区免费观看| 天堂аⅴ在线地址8| 欧美福利视频导航| 久久久久久免费观看| 99精品在线免费| 午夜免费一区二区| 艳女tv在线观看国产一区| 日韩免费视频在线观看| lutube成人福利在线观看| 精品国产91久久久| av在线天堂网| 91精品久久久久久久久久不卡| 亚洲综合中文字幕68页| 电影在线观看一区| 中文字幕精品久久| 性生交生活影碟片| 91福利视频在线| 一区二区不卡免费视频| 精品999成人| 日本免费高清一区二区| 免费一级欧美在线大片| 色妞在线综合亚洲欧美| 美女又爽又黄免费视频| av一本久道久久综合久久鬼色| 青青草原网站在线观看| 成人性生交大片免费看中文视频 | 国产三级一区| 欧美劲爆第一页| 精品人妻av一区二区三区| 精品久久久久久中文字幕| 精品丰满少妇一区二区三区| 国产成人无遮挡在线视频| 日本熟妇人妻xxxxx| 欧美激情视频一区二区三区在线播放 | 亚洲色图17p| 国产一级片毛片| 国产精品电影院| 亚洲综合婷婷久久| 国产精品大片| 成人看片视频| 先锋欧美三级| 中文字幕日韩在线视频| 亚洲黄色精品视频| 51久久夜色精品国产麻豆| 日韩高清精品免费观看| 亚洲女性喷水在线观看一区| 中文字幕第20页| 9久草视频在线视频精品| 一级黄色免费毛片| 午夜视频一区| 亚洲 欧洲 日韩| 精品国产伦一区二区三区观看说明 | 欧美成人伊人久久综合网| 印度午夜性春猛xxx交| 国产一区二区福利视频| 黄色国产小视频| 国产情侣一区| 国产精品999视频| 九九在线精品| 国内成+人亚洲| 亚洲专区**| 欧美在线视频一二三| 国产精品影院在线| 欧美日韩国产另类不卡| 天天干,天天干| 国产精品私人自拍| 国产精品高清无码在线观看| 久久91精品久久久久久秒播| 黄色网络在线观看| 91中文字幕精品永久在线| 99视频免费观看| 玖玖玖电影综合影院| 91九色国产社区在线观看| 国产精品亚洲成在人线| 国产精品精品视频一区二区三区| 亚洲欧美韩国| 欧美一区二区三区…… | 亚洲欧美韩国综合色| 超碰97av在线| 成人a区在线观看| 在线观看一区二区三区四区| 久久久久久穴| 日本精品www| 石原莉奈在线亚洲二区| 成人高清dvd| 中文字幕精品影院| 欧美裸体网站| 欧美一区电影| 一区不卡字幕| 香蕉视频一区| 亚洲自拍高清视频网站| 玖玖玖视频精品| 国产另类自拍| 国产a久久精品一区二区三区| 91一区二区三区| 日韩中文在线播放| 国产日韩综合一区二区性色av| 久久69av| 狠狠色伊人亚洲综合网站色| 四虎精品一区二区免费| 538国产精品视频一区二区| 天堂电影一区| 国产精品欧美一区二区| 国产日韩在线观看视频| 国产精品91久久久| 欧美天堂一区| 国产精华一区| 国产精品亚洲片在线播放| 亚洲欧洲精品一区二区| 日韩母乳在线| 日韩精品极品视频在线观看免费| 羞羞色午夜精品一区二区三区| 一卡二卡三卡视频| 欧美一区国产在线| 国产精品国产亚洲精品看不卡| 日韩影院免费视频| 波多野结衣中文字幕在线播放| 97精品超碰一区二区三区| 成人性生交大片免费看无遮挡aⅴ| 亚洲欧美精品午睡沙发| av大全在线观看| 欧美一区二区三区四区五区 | 日韩手机在线导航| 91在线公开视频| 欧美午夜影院一区| 亚洲高清视频网站| 国产一区二区av| 俄罗斯一级**毛片在线播放| 欧美精品在线视频观看| 亚洲妇女成熟| 92国产精品视频| 精品国产日韩欧美| 每日在线观看av| 国内外成人在线| 丰满少妇高潮一区二区| 一区二区三区成人| 免费在线一级片| 在线观看亚洲精品视频| 男人天堂综合网| 日韩视频免费在线| 欧美大片免费观看网址| 99热在线播放| 小说区亚洲自拍另类图片专区| 成年人视频在线免费| www.日本不卡| 婷婷色中文字幕| 欧美日本在线一区| 酒色婷婷桃色成人免费av网| 高清在线视频日韩欧美| 高清不卡一区| 亚洲最大色综合成人av| 日韩中文字幕区一区有砖一区 | 欧美日韩伦理在线免费| 欧美日韩精品在线一区二区| 国产精品一级片在线观看| 日韩精品久久久久久久的张开腿让 | 中文字幕在线中文| 激情av综合网| 国产白丝一区二区三区 | 69av视频在线播放| 日韩区一区二| 久久免费一级片| 久久国产精品第一页| 夫妇露脸对白88av| 欧美视频日韩视频在线观看| 制服丝袜在线一区| 亚洲男人天堂九九视频| 桃色av一区二区| 久99久在线| 亚洲在线成人| 91精品人妻一区二区| 国产精品久久一卡二卡| а中文在线天堂| 中文字幕国产亚洲| 丁香婷婷久久| 国产精品大全| 激情国产一区| 黄色性生活一级片| 欧美日韩在线影院| 国产一区二区三区不卡在线| 精品国产一区二区在线| 精品自拍视频| 日本三级福利片| 国产ts人妖一区二区| www在线观看免费视频| 色琪琪一区二区三区亚洲区| 国产在线观看免费| 国产欧美日韩丝袜精品一区| 午夜精品一区二区三区国产| 午夜免费视频网站| 亚洲一区二区三区四区在线观看| 欧美 日韩 国产 成人 在线 91 | 久久99国产精品二区高清软件| 亚洲一区bb| 国产精品白丝jk黑袜喷水| 精品在线视频观看| 亚洲老头同性xxxxx| 偷拍中文亚洲欧美动漫| 一本一本a久久| 丰满白嫩尤物一区二区| 亚洲成人第一网站| 日韩亚洲欧美中文高清在线| 丁香5月婷婷久久| 久久久久久久久久久福利| 国产精品嫩草99a| 亚洲成人一二三区| 欧美主播福利视频| 国产大片一区| 中文字幕在线永久| 欧美色精品在线视频| 在线免费观看的av| 免费看成人午夜电影| 亚洲午夜激情在线| 野花社区视频在线观看| 欧美日韩国产成人在线免费| 国产亚av手机在线观看| 日韩午夜视频在线观看| 国产精品一区免费视频| 毛片毛片女人毛片毛片| 北条麻妃久久精品| 欧美顶级毛片在线播放| 亚洲天堂av一区二区| 精品国产乱码久久久久久婷婷| 91.xxx.高清在线| 国产一区再线| 国产做a爰片久久毛片| 亚洲免费黄色网址| 欧美猛男性生活免费| 久久国产精品美女| 国产精品免费成人| 亚洲精品欧美专区| av在线播放av|