通用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. MySQL安装与启动——Windows系统下

    以下书写结合菜鸟教程以及本人理解书写. 数据库下载(开源免费) MySQL数据库下载地址https://dev.mysql.com/downloads/mysql/ 可自由选择版本,一般选择Achiv ...

  2. 微信小程序(mpvue)—解决视频播放bug的一种方式

    // 第一页 <div @click="play(video.src, video.width, video.height)"></div> methods ...

  3. 启动fiddler导致浏览器无法上网的解决方法

    1. 开发fiddler,进入Tools->Fiddler Tools,按照如图3部配置,即可实现无法上网的问题. 2. 见图1: 3.见图2: 4.见图3. 4. 完成以上配置后,重启fidd ...

  4. MongoDB知识点拾遗梳理

    MongoDB数据库安装: >apt-get install mongodb 0.MongoDB状态查看.启动.停止       >/etc/init.d/mongodb status或s ...

  5. Linux中彻底删除Google-Chrome浏览器

    sudo apt-get autoremove --purge google-chrome-stable   卸载chrome后, 删除-/.config/google-chrome,重新安装.

  6. Aforge.net识别简易数字验证码问题

    参考:https://www.bbsmax.com/A/rV57LjWGdP/ https://blog.csdn.net/louislong007/article/details/47683035 ...

  7. 从运维的角度理解Iaas、Paas、Saas云计算

    平时我们的运维工作,大致就是了解需求.申请服务器.配置网络.服务器软件安装.应用部署.数据存储.系统调优.平台维护等 按照Iaas.Paas.Saas的三层来分工我们平时的任务: 最底层的Iaas层提 ...

  8. ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一)

    前言: 第一次接触ABP的项目是在2018年6月份,但是当时没有深入具体的研究,而今天因为工作的需要,需要学习.了解这个框架,在时隔半年之后,今天重新下载了这个项目,虽然在园子里有很多前辈们写的这类的 ...

  9. 今天想写一下关于SpringMVC的视图解释器

    昨天我写了一下SpringMVC最爱金丹的项目的配置流程,这样搭建完项目之后呢我发现我每个请求都得加个.do什么的后缀,这让我开发得很不爽,于是呢今天就想配置一下这个试图解释器,这样做的目的有两个:第 ...

  10. jstl,el表达式

    在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...