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

最新文章

  1. 13、Apache中虚拟目录和目录权限配置
  2. PKU 1003解题
  3. 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
  4. vmware安装ubuntu卡在install vm-tools
  5. 正则表达式:Pattern类与Matcher类详解
  6. UvaLive6661 Equal Sum Sets dfs或dp
  7. CSS3初学篇章_6(自定义动画)
  8. 主成分分析(PCA)核心思想
  9. 算法练习26-xx
  10. (2)jni编程学习笔记
  11. WebService只能在本地使用,无法通过网络访问的解决办法
  12. 深入理解Java Proxy
  13. zf框架的思想及学习总结
  14. Matcher.replaceFirst(String replacement)
  15. input 上报流程图
  16. SQLServer之函数简介
  17. MySQL1-安装
  18. jsp案例--展示数据库中的数据
  19. 通过了解JS的clientX、pageX、screenX等方法来获取鼠标位置相对屏幕,相对浏览器窗口,相对文档的坐标详解
  20. MSF MS11-050/10-087/Adobe攻击实践及内存保护技术

热门文章

  1. Windows7上安装Ubuntu双系统
  2. python之三级目录
  3. 深度学习(pytorch)-1.基于简单神经网络的图片自动分类
  4. servlet之小demo(四)
  5. Delphi7安装
  6. [C# 基础知识系列]专题二:委托的本质论 (转载)
  7. vue.js 视频教程
  8. 大学生对vivo手机的看法
  9. knockout checkbox 全选
  10. 前端工程化基础-vue