• 通用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));
    
        }

  • 相关阅读:
    The Preliminary Contest for ICPC China Nanchang National Invitational and International Silk-Road Programming Contest
    HDU 5299 Circles Game
    UVALive
    算法笔记--匈牙利算法
    算法笔记--Splay && Link-Cut-Tree && fhq _treap
    P2685 [TJOI2012]桥
    2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
    ACM-ICPC2018南京赛区 Mediocre String Problem
    Project Euler 345: Matrix Sum
    算法笔记--manacher算法
  • 原文地址:https://www.cnblogs.com/myx-ah/p/10088962.html
Copyright © 2020-2023  润新知