通用Mapper簡單使用


 

通用Mapper

 

1、通用Mapper的使用

1.0、實體類

 1 @Table(name = "tb_user")
 2 public class User {
 3 
 4 
 5     @Id
 6     @GeneratedValue(generator = "JDBC")
 7     private Long id;
 8     // 用戶名
 9     private String userName;
10     // 密碼
11     private String password;
12     // 姓名
13     private String name;
14     // 年齡
15     private Integer age;
16     // 性別,1男性,2女性
17     private Integer sex;
18     // 出生日期
19     private Date birthday;
20     // 創建時間
21     private Date created;
22     // 更新時間
23     private Date updated;
24    //set、get方法....
25     
26 }

 

泛型(實體類)<T>的類型必須符合要求

 1 1、表名默認使用類名,駝峰轉下划線(只對大寫字母進行處理),如UserInfo默認對應的表名為user_info。
 2 
 3 2、表名可以使用@Table(name = "tableName")進行指定,對不符合第一條默認規則的可以通過這種方式指定表名.
 4 
 5 3、字段默認和@Column一樣,都會作為表字段,表字段默認為Java對象的Field名字駝峰轉下划線形式.
 6 
 7 4、可以使用@Column(name = "fieldName")指定不符合第3條規則的字段名
 8 
 9 5、使用@Transient注解可以忽略字段,添加該注解的字段不會作為表字段使用.
10 
11 6、建議一定是有一個@Id注解作為主鍵的字段,可以有多個@Id注解的字段作為聯合主鍵.
12 
13 獲取自增主鍵:
14 
15 //不限於@Id注解的字段,但是一個實體類中只能存在一個(繼承關系中也只能存在一個)
16 @GeneratedValue(generator = "JDBC")
17 private Integer id;
18 這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關系數據庫管理系統的自動遞增字段)。

1.1、導入依賴

1 <!-- 通用mapper -->
2         <dependency>
3             <groupId>tk.mybatis</groupId>
4             <artifactId>mapper-spring-boot-starter</artifactId>
5             <version>2.0.2</version>
6         </dependency>

1.2、開啟包掃描

注意導入的包,一定要和導入的的依賴有關的包

 

 1 import org.springframework.boot.SpringApplication;
 2 import org.springframework.boot.autoconfigure.SpringBootApplication;
 3 import tk.mybatis.spring.annotation.MapperScan;
 4 
 5 @SpringBootApplication
 6 @MapperScan("com.myx.demo.mapper")
 7 public class Application {
 8     public static void main(String[] args) {
 9         SpringApplication.run(Application.class);
10     }
11 }

 

1.3、UserMapper接口繼承通用Mapper

1 package com.myx.demo.mapper;
2 import com.myx.demo.pojo.User;
3 import tk.mybatis.mapper.common.Mapper;
4 
5 public interface UserMapper extends Mapper<User>{
6 
7 }

1.4、SpringBoot默認的文件名Application.yml配置

 1 server:
 2   port: 8080
 3 
 4 logging:
 5   level:
 6     com.myx.demo:
 7       debug
 8 spring:
 9   datasource: #spring數據源的配置
10     url: jdbc:mysql://localhost:3306/day11mybatis
11     username: root
12     password: 123

1.5、通用Mapper的測試類

1 @RunWith(SpringRunner.class)
2 @SpringBootTest(classes = Application.class)
3 public class NewUserMapperTest {
4 
5     @Autowired
6     private UserMapper userMapper;
7 
8 
9 }

1.5.1 id 的專用查詢方法

1 @Test
2     public void testSelectId() {
3         userMapper.selectByPrimaryKey(1L);//id專用查詢方法
4         System.out.println( userMapper.selectByPrimaryKey(1L));
5     }

1.5.2 屬性查詢

1 @Test
2     public void testSelectName() {
3         User user = new User();
4         user.setName("張三");//哪個屬性有值where條件就根據哪個屬性生成,id除外
5         List<User> select = userMapper.select(user);
6         System.out.println(select);
7     }

1.5.3 屬性值唯一查詢

1 @Test
2     public void testSelectOne() {
3         User user = new User();
4         user.setUserName("zhangsan");//查詢值有多個會報錯
5 
6         System.out.println(userMapper.selectOne(user));
7 
8     }

1.5.4 統計個數

1 @Test
2     public void testSelectCount() {
3         System.out.println(userMapper.selectCount(null));//沒有查詢條件就全查
4     }

1.5.5 插入

 1 @Test
 2     public void testInsert() {
 3         User user = new User();
 4         user.setUserName("孫悟空");
 5         user.setName("sunwukong");
 6         user.setAge(500);
 7         user.setId(50L);
 8         user.setPassword("234");
 9         int insert = userMapper.insert(user);
10         System.out.println(insert);
11     }

1.5.6 selective插入

 1 /*
 2     * insertSelective方法:有值才操作,沒有值不理會,比上insert方法效率高
 3     * */
 4     @Test
 5     public void testInsertSelective() {
 6         User user = new User();
 7         user.setUserName("豬八戒");
 8         user.setName("sunwukong");
 9         user.setAge(500);
10         user.setId(51L);
11         user.setPassword("234");
12         user.setCreated(new Date());
13         int insert = userMapper.insertSelective(user);
14         System.out.println(insert);
15     }

1.5.7 刪除

1  @Test
2     public void testDelete() {
3         User user = new User();
4         user.setUserName("孫悟空");
5         int delete = userMapper.delete(user);
6         System.out.println(delete);
7     }

 

 1.5.8 根據id刪除,主鍵的特有方法

 1  @Test 2 public void testDeleteByPrimaryKey() { 3 userMapper.deleteByPrimaryKey(51L); 4 } 

 1.5.9 修改

 1 /*
 2     * 指定的屬性改變為指定的值,其余的為null
 3     * */
 4     @Test
 5     public void testUpdateByPrimaryKey() {
 6         User user = new User();
 7         user.setId(36L);
 8         user.setUserName("李白");
 9         user.setName("libai");
10 
11         userMapper.updateByPrimaryKey(user);
12     }

1.5.10 selecttive修改

    /*
    * 只改變指定的屬性,其余屬性不變
    * */
    @Test
    public void testUpdatePriimarySelective() {
        User user = new User();
        user.setId(33L);
        user.setUserName("王昭君");
        user.setName("wangzhaojun");
        user.setUpdated(new Date());
        userMapper.updateByPrimaryKeySelective(user);
    }

2 通用Mapper分頁

2.1 分頁的依賴

<!--分頁的依賴-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

2.2 分頁方法的測試

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)

public class MapperPageQueryTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testPageQuery() {
        //開啟分頁
        PageHelper.startPage(3,5);
        //不包含總的頁數,總的元素個數
        List<User> select = userMapper.select(null);
        System.out.println(select);
    }

    @Test
    public void testPageInfoQuery() {
        //開啟分頁
        PageHelper.startPage(3,5);
        //用page類型或者pageInfo類型目的就是獲取總頁數以及總條數
        Page<User> userPage = (Page<User>) userMapper.select(null);
        //分頁返回的結果
        //PageInfo<User> pageInfo = new PageInfo<>(select);
        System.out.println(userPage);
    }
}

3 通用Mapper組合查詢和排序

3.1 添加普通條件

/*
    * example要表達的含義為???
    * 組合的查詢條件
    * */
    @Test
    public void testSelectByExample(){
        //條件的組合工具
        Example example = new Example(User.class);
        //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("sex","1");
        criteria.andBetween("age",20,30);
        List<User> users = userMapper.selectByExample(example);
        System.out.println("users = " + users);

    }

3.2 添加or條件的組合查詢

@Test
    public void testSelectByExampleOr(){
        //條件的組合工具
        Example example = new Example(User.class);
        //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("sex","1");
        Example.Criteria criteria1 = example.createCriteria();
        criteria1.andLike("name","%李%");
        //直接使用example的or方法使得第二個條件和原來的條件組合or關系
        example.or(criteria1);
        System.out.println(userMapper.selectByExample(example));

    }

3.3 排序

@Test
    public void testSelectByExampleOrder(){
        //條件的組合工具
        Example example = new Example(User.class);
        //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("sex","1");
        Example.Criteria criteria1 = example.createCriteria();
        criteria1.andLike("name","%李%");
        //直接使用example的or方法使得第二個條件和原來的條件組合or關系
        example.or(criteria1);
        //排序
        example.setOrderByClause("id DESC");
        System.out.println(userMapper.selectByExample(example));

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM