激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - MyBatis-Ext快速入門實(shí)戰(zhàn)

MyBatis-Ext快速入門實(shí)戰(zhàn)

2022-03-01 00:47Hydra Java教程

MyBatis-Ext是MyBatis的增強(qiáng)擴(kuò)展,和我們平常用的Mybatis-plus非常類似,本文主要介紹了MyBatis-Ext快速入門實(shí)戰(zhàn),感興趣的可以了解一下

最近在工作中,接觸到了一個MyBatis擴(kuò)展工具包MyBatis-Ext,可以說很大程度上減輕了使用mybatis時的工作量,本文就和大家來分享一下這個輕量的擴(kuò)展工具。

MyBatis-Ext是MyBatis的增強(qiáng)擴(kuò)展,和我們平常用的Mybatis-plus非常類似,簡化了MyBatis對單表增刪改查的操作,提供通用的增刪改查,支持函數(shù)式編程,支持分頁查詢,支持用戶自定義通用方法,并且能夠防止SQL注入。集成起來也非常簡單,對MyBatis只做增強(qiáng)不做修改。

以spring-boot項(xiàng)目為例,集成非常簡單。pom導(dǎo)入核心依賴:

<dependency>
  <groupId>tech.wetech.mybatis</groupId>
  <artifactId>mybatis-ext-core</artifactId>
  <version>1.5.2</version>
</dependency>
<dependency>
  <groupId>tech.wetech.mybatis</groupId>
  <artifactId>mybatis-ext-spring-boot-starter</artifactId>
  <version>1.5.2</version>
</dependency>    

需要注意的是,引入mybatis-ext-spring-boot-starter后無需再引入mybatis-spring-boot-starter。
和以往一樣,在application.yml配置一下數(shù)據(jù)源:

spring:
datasource:
  username: dater
  password: 123456
  url: jdbc:mysql://127.0.0.1:3306/datacenter?useUnicode=true&characterEncoding=utf-8
  driver-class-name: com.mysql.jdbc.Driver
  type: com.alibaba.druid.pool.DruidDataSource
  druid:
    initial-size: 8
    min-idle: 1
    max-active: 20
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
type-aliases-package: com.mybatis.ext.test.mybatisexttest.entity
spring:
datasource:
  username: dater
  password: 123456
  url: jdbc:mysql://127.0.0.1:3306/datacenter?useUnicode=true&characterEncoding=utf-8
  driver-class-name: com.mysql.jdbc.Driver
  type: com.alibaba.druid.pool.DruidDataSource
  druid:
    initial-size: 8
    min-idle: 1
    max-active: 20
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
type-aliases-package: com.mybatis.ext.test.mybatisexttest.entity

創(chuàng)建一個映射的實(shí)體類:

@Data
@Table(name = "user")
public class User {
  @Id
  String identifycard;
  @Column(name="name")
  String name;
  String money;
  String card;
  String phone;
  String rate;
}

mybatis-ext使用了Jpa的注解,目前實(shí)現(xiàn)了@Table、@Id、@Column、@Transient、@Version。其中@Table、@Id是必須添加的注解,其他非必須添加。使用@Table指定數(shù)據(jù)表名,@Id指定數(shù)據(jù)表主鍵。

查詢的Mapper接口繼承BaseMapper接口,泛型中填寫實(shí)體類:

public interface UserMapper extends BaseMapper<User> {
}

我們來看一下能夠直接調(diào)用的方法,為在BaseMapper中內(nèi)置了很多通用方法,可以直接調(diào)用,非常簡便:

int deleteByPrimaryKey(PK id);
<S extends T> int insert(S record);
<S extends T> int insertAll(Iterable<S> record);
<S extends T> int insertSelective(S record);
<S extends T> S selectByPrimaryKey(PK id);
<S extends T> Optional<S> selectByPrimaryKeyWithOptional(ID id);
<S extends T> int updateByPrimaryKey(S record);
<S extends T> int updateByPrimaryKeySelective(S record);
<S extends T> List<S> selectAll();
<S extends T> List<S> selectList(S record);
<S extends T> S selectOne(S record);
<S extends T> S selectOneWithOptional(S record);
boolean existsByPrimaryKey(PK id);
<S extends T> int count(S record);
<S extends T> List<S> selectByExample(Example<S, Object> example);
<S extends T> int countByExample(Example<S, Object> example);
<S extends T> int deleteByExample(Example<S, Object> example);
<S extends T> int updateByExample(@Param("record") S record, @Param("example") Example<S, Object> example);
<S extends T> int updateByExampleSelective(@Param("record") S record, @Param("example") Example<S, Object> example);

來進(jìn)行一下接口調(diào)用的測試,先試一下selectAll方法:

@GetMapping("getUser")
public void getUser(){
  List<User> users = userMapper.selectAll();
  for (User user : users) {
      System.out.println(user.getName()+" "+user.getIdentifycard());
  }
}

測試結(jié)果:

MyBatis-Ext快速入門實(shí)戰(zhàn)

這樣,通過調(diào)用內(nèi)置方法就實(shí)現(xiàn)了不寫sql語句直接進(jìn)行查詢。同樣,如果想根據(jù)主鍵進(jìn)行查詢也很簡單,直接調(diào)用selectByPrimaryKey方法:

@PostMapping("getUserById")
public void getUserByIdentifycard(@RequestBody User user){
  User retUser = userMapper.selectByPrimaryKey(user);
  System.out.println(retUser.toString());
}

查詢結(jié)果:

MyBatis-Ext快速入門實(shí)戰(zhàn)

另外,還可以使用Optional包裹查詢,修改一下上面主鍵查詢的方法:

@PostMapping("getUserById")
public void getUserByIdentifycard(@RequestBody User user){
  User retUser = userMapper.selectByPrimaryKeyWithOptional(user)
          .orElseThrow(()->new RuntimeException("未查到數(shù)據(jù)"));
  System.out.println(retUser.toString());
}

這樣,在傳入一個不存在的主鍵時,就會直接拋出自定義的異常:

還有其他很多簡單的查詢,大家可以根據(jù)上面列出api自行測試一下。此外,還可以使用Criteria,使用邏輯組合,進(jìn)行函數(shù)式查詢:

@GetMapping("criteriaTest")
public void testCreateCriteria(){
  List<User> list = userMapper.createCriteria()
          .andEqualTo(User::getName, "Trunks")
          .andBetween(User::getMoney, 100, 300)
          .andNotLike(User::getRate, "6")
          .orIn(User::getCard, Arrays.asList("10"))
          .selectList();

  list.forEach(user -> {
      System.out.println(user.toString());
  });
}

查詢結(jié)果:

MyBatis-Ext快速入門實(shí)戰(zhàn)

也可以使用Example進(jìn)行查詢:

@GetMapping("exampleTest")
public void testExample(){
  Example<User> example=Example.of(User.class);
  example.createCriteria()
          .andEqualTo(User::getName, "Trunks")
          .andBetween(User::getMoney, 100, 300)
          .andNotLike(User::getRate, "6")
          .orIn(User::getCard, Arrays.asList("10"));

  example.setDistinct(true);
  List<User> list = userMapper.selectByExample(example);
  list.forEach(user -> {
      System.out.println(user.toString());
  });
}

結(jié)果與使用Criteria結(jié)果相同。另外,還可以將多個條件組合使用:

GetMapping("testExampleWithSub")
public void selectByExampleWithSub(){
  try (SqlSession session = sqlSessionFactory.openSession()) {
      UserMapper userMapper1 = session.getMapper(UserMapper.class);
      Example<User> example=Example.of(User.class);
      example.and()
              .andEqualTo(User::getName, "Trunks");
      example.and()
              .andEqualTo(User::getCard,"10");
      example.and()
              .andLessThanOrEqualTo(User::getRate,300);

      Criteria<User> criteria=new Criteria<>();
      criteria.andIsNotNull(User::getPhone);
      example.and(criteria);
      List<User> list = userMapper1.selectByExample(example);

      list.forEach(user -> {
          System.out.println(user.toString());
      });
  }
}

 

結(jié)果:

MyBatis-Ext快速入門實(shí)戰(zhàn)

除了上面介紹的這些功能與基礎(chǔ)的sql增刪改查外,MyBatis-Ext還實(shí)現(xiàn)了很多其他功能,例如排序和分頁,并且支持自定義通用接口方法等等,大家可以在使用中通過實(shí)踐繼續(xù)探索一下。

 

最后

到此這篇關(guān)于MyBatis-Ext快速入門實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)MyBatis-Ext 入門內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7022908036989583397

延伸 · 閱讀

精彩推薦
498
主站蜘蛛池模板: 久章草在线观看 | hd日本xxxx| 久久精品首页 | 九九热视频在线免费观看 | 色天天综合网 | 久久久三级免费电影 | 欧美在线 | 亚洲 | 91短视频网址 | 亚洲视色| 国产精品视频yy9299一区 | 国产精品视频一区二区三区四区国 | 精品国产乱码久久久久久预案 | 黑人一区| 69性欧美高清影院 | av在线免费看片 | 国产成人在线网址 | 日日鲁夜夜视频热线播放 | 久色视频网站 | 黄色av.com | 美女扒开胸罩给男生看视频 | 久久成人黄色 | 成人午夜免费看 | 成人免费看片视频 | 免费一级毛片在线播放视频老 | 色成人在线 | 欧美一区二区三区免费不卡 | 免费在线看a | 亚洲国产色婷婷 | 一级网站| h视频免费观看 | 色呦呦一区二区三区 | 欧美激情区 | 萌白酱福利视频在线网站 | 成人性视频在线 | 久久精品久久久久 | 日日操夜 | 国人精品视频在线观看 | 青青草免费观看完整版高清 | 国产精品视频yy9299一区 | 欧美黑人伦理 | 黄色网址入口 |