通用Mapper

1、通用Mapper的使用

1.0、实体类

 @Table(name = "tb_user")
public class User { @Id
@GeneratedValue(generator = "JDBC")
private Long id;
// 用户名
private String userName;
// 密码
private String password;
// 姓名
private String name;
// 年龄
private Integer age;
// 性别,1男性,2女性
private Integer sex;
// 出生日期
private Date birthday;
// 创建时间
private Date created;
// 更新时间
private Date updated;
//set、get方法.... }

泛型(实体类)<T>的类型必须符合要求

 1、表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。

 2、表名可以使用@Table(name = "tableName")进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.

 3、字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.

 4、可以使用@Column(name = "fieldName")指定不符合第3条规则的字段名

 5、使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用.

 6、建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.

 获取自增主键:

 //不限于@Id注解的字段,但是一个实体类中只能存在一个(继承关系中也只能存在一个)
@GeneratedValue(generator = "JDBC")
private Integer id;
这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。

1.1、导入依赖

 <!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>

1.2、开启包扫描

注意导入的包,一定要和导入的的依赖有关的包

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication
@MapperScan("com.myx.demo.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}

1.3、UserMapper接口继承通用Mapper

 package com.myx.demo.mapper;
import com.myx.demo.pojo.User;
import tk.mybatis.mapper.common.Mapper; public interface UserMapper extends Mapper<User>{ }

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

 server:
port: 8080 logging:
level:
com.myx.demo:
debug
spring:
datasource: #spring数据源的配置
url: jdbc:mysql://localhost:3306/day11mybatis
username: root
password: 123

1.5、通用Mapper的测试类

 @RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class NewUserMapperTest { @Autowired
private UserMapper userMapper; }

1.5.1 id 的专用查询方法

 @Test
public void testSelectId() {
userMapper.selectByPrimaryKey(1L);//id专用查询方法
System.out.println( userMapper.selectByPrimaryKey(1L));
}

1.5.2 属性查询

 @Test
public void testSelectName() {
User user = new User();
user.setName("张三");//哪个属性有值where条件就根据哪个属性生成,id除外
List<User> select = userMapper.select(user);
System.out.println(select);
}

1.5.3 属性值唯一查询

 @Test
public void testSelectOne() {
User user = new User();
user.setUserName("zhangsan");//查询值有多个会报错 System.out.println(userMapper.selectOne(user)); }

1.5.4 统计个数

 @Test
public void testSelectCount() {
System.out.println(userMapper.selectCount(null));//没有查询条件就全查
}

1.5.5 插入

 @Test
public void testInsert() {
User user = new User();
user.setUserName("孙悟空");
user.setName("sunwukong");
user.setAge(500);
user.setId(50L);
user.setPassword("234");
int insert = userMapper.insert(user);
System.out.println(insert);
}

1.5.6 selective插入

 /*
* insertSelective方法:有值才操作,没有值不理会,比上insert方法效率高
* */
@Test
public void testInsertSelective() {
User user = new User();
user.setUserName("猪八戒");
user.setName("sunwukong");
user.setAge(500);
user.setId(51L);
user.setPassword("234");
user.setCreated(new Date());
int insert = userMapper.insertSelective(user);
System.out.println(insert);
}

1.5.7 删除

  @Test
public void testDelete() {
User user = new User();
user.setUserName("孙悟空");
int delete = userMapper.delete(user);
System.out.println(delete);
}

1.5.8 根据id删除,主键的特有方法

   @Test  public void testDeleteByPrimaryKey() {  userMapper.deleteByPrimaryKey(51L);  } 

1.5.9 修改

 /*
* 指定的属性改变为指定的值,其余的为null
* */
@Test
public void testUpdateByPrimaryKey() {
User user = new User();
user.setId(36L);
user.setUserName("李白");
user.setName("libai"); userMapper.updateByPrimaryKey(user);
}

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)); }

通用Mapper简单使用的更多相关文章

  1. (一 、上)搭建简单的SpringBoot + java + maven + mysql + Mybatis+通用Mapper 《附项目源码》

    最近公司一直使用 springBoot 作为后端项目框架, 也负责搭建了几个新项目的后端框架.在使用了一段时间springBoot 后,感觉写代码 比spring 更加简洁了(是非常简洁),整合工具也 ...

  2. 通用 mapper的简单使用

    通用 MAPPER的简单使用 官方  https://mapperhelper.github.io/docs/2.use/ 依赖 <dependency> <groupId>t ...

  3. (二、下) springBoot 、maven 、mysql、 mybatis、 通用Mapper、lombok 简单搭建例子 《附项目源码》

    接着上篇文章中 继续前进. 一.在maven 的pom.xm中添加组件依赖, mybatis通用Mapper,及分页插件 1.mybatis通用Mapper <!-- mybatis通用Mapp ...

  4. 在Spring4中使用通用Mapper

    在Spring4中使用通用Mapper http://my.oschina.net/flags/blog/355281#OSC_h2_2 目录[-] 在Spring4中使用通用Mapper 一.在Sp ...

  5. 如何使用通用Mapper

    集成方法请看上面的文档,集成后,可以继续阅读本页文档. 1. 继承通用的Mapper<T>,必须指定泛型<T> 例如下面的例子: public interface UserIn ...

  6. Mybatis通用Mapper

    极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...

  7. mybatis通用mapper的使用

    项目中持久层封装了两套,一个hibernate,一个是mybatis.hibernate中封装了一些通用的方法,但是mybatis中没有,基于这个需求开始使用mybatis的通用mapper.     ...

  8. 通用mapper认识和用法

    目录 0. 认识 1. 导包 2. mybatis的config文件:mybatis-mapper-config.xml 3. spring与mybatis整合配置文件:mybatis.xml 4. ...

  9. Spring4中使用通用Mapper

    1.  在Spring4中使用通用Mapper Spring4增加了对泛型注入的支持,这个特性对通用Mapper来说,非常的有用,可以说有了这个特性,可以直接在Service中写Mapper<U ...

随机推荐

  1. JS中的一元操作符

    表达式 一元操作符 优先级 结合性 运算顺序 表达式是什么? 就是JS 中的一个短语,解释器遇到这个短语以后会把对它进行计算,得到一个结果参与运算,我们把这种要参与到运算中的各种各样的短语称为表达式. ...

  2. js 音乐播放器

    在写之前先说下我遇到得两个问题,第一个问题是,在音乐标签,我希望得是切换数据做到得,但是出了问题,暂时为解决,第二个问题,页面切换时音乐继续播放由卡顿情况,未处理好. 好了,那我们开始做这个音乐播放器 ...

  3. 爬取QQ音乐歌手的歌单

    import requests# 引用requests库res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search ...

  4. react native 打包上架

    https://www.jianshu.com/p/ce71b4a8a246 react-native bundle --entry-file index.ios.js --platform ios ...

  5. Sublime Text 3 安装 Package Control

    1.打开sublime text 3 2.Ctrl+`打开控制台或者View->Show Console菜单打开命令行,输入下面这段代码后按Enter键 import urllib.reques ...

  6. js获取今天是星期几

  7. i love my girl

    for(int i=0;i<forever;i++) System.out.println("i love my girl!");

  8. QWaitCondition 的思考2

    本文章为原创,如引用请指明出处 问:QWaitCondition的 wake() ,wakeall() 函数唤醒的是哪些线程呢? 是不是在全局范围内该类的各个对象造成的悬挂线程都可以被唤醒呢? 回答: ...

  9. 【leetcode】485. Max Consecutive Ones

    problem 485. Max Consecutive Ones solution1: class Solution { public: int findMaxConsecutiveOnes(vec ...

  10. css常用选择器选择器

    tap选择器 ulclass选择器 .id选择器 #后代选择器 a b子代选择器 a>b兄弟选择器 a + b 以a为参考给b加样式属性选择器 input [type="text&qu ...