实体类
//lombok注解是编译期有效
@Data //动态添加get/set/toString/equals等方法
@AllArgsConstructor //添加构造方法
@NoArgsConstructor //添加无参构造
@Accessors(chain = true) //引入链式加载方式 重写set方法
//设置表名 参数也能删
@TableName("user")
//实体类 实现序列化 是因为 要通过网络传输或者io流的输入输出就需要序列化
public class User implements Serializable {
private static final long serialVersionUID = 966119419375497297L;
//常用的IdType.AUTO 数据库ID自增 该类型请确保数据库设置了 ID自增 否则无效
// 其次IdType.ASSIGN_UUID 分配UUID 主键不需要赋值可以写IdType.NONE
//指定主键并且指定主键的生成策略
@TableId(type = IdType.AUTO)
private Integer id;
/**
*
* @TableField 单独只有注解 表示数据库表中一定有这个字段
* @TableField(exist = false) 表示数据库表中没有这个字段 一般用在关联查询时的关联对象上
*/
//规则:如果字段名称与属性一致(包含驼峰规则)则可以省略不写
@TableField(fill = FieldFill.INSERT) //省略后,程序自动配置
private String name;
private Integer age;
private String sex;
/**
* @Accessors 引入链式加载 就是重写set方法
* 调用时可以连续的 . 连续调用set方法
* User user=new User();
* user.setId(1).setName("张三").
*/
//重写后有返回值
// public User setId(Integer id) {
// this.id = id;
// return this;
// }
}
接口
@Mapper //为接口创建代理对象 交给spring管理
//注意事项~!!!! 继承父级接口时必须添加泛型
public interface UserMapper extends BaseMapper<User> {
//查询全部用户数据 注解方式或xml映射文件方式
List<User> findAll();
@Select("select * from user where name=#{name}")
User selectUserByUsername(String name);
}
测试类
//mybatisplus就是以对象的方式操作数据库
@SpringBootTest //当程序执行@Test方法时,会先启动springBoot的容器实例化对象,.之后程序调用
class SpringbootDemo2ApplicationTests {
//动态注入mapper接口的实例对象 代理对象 cgblib jdk
@Autowired //依赖注入 1.按照类型注入 2.按照名称注入
//@Qualifier("注入属性的名称")
private UserMapper userMapper;
@Test
public void testMybatis() {
//springboot中动态代理就算实现接口他底层也用的是CGLIB
//整合mybatis mybatis的代理方式还是jdk
System.out.println("输入代理对象的类型:"+userMapper.getClass()+"JDK代理");
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
1.查询所有 selectList(null)
@Test
public void testMP(){
//几乎单表不写sql 查询所有的user表数据 不写where条件
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
2.插入数据 insert(对象)
@Test
public void insert(){
User user= new User();
user.setName("测试myplus").setAge(10).setSex("男");
userMapper.insert(user);
//准备好了入库的模板
//通过反射机制拿到类上面的注解参数(user表名) 之后再拿到(类中属性)
// 传进insert方法中的对象通过get完成value赋值
// TableName tableName = user.getClass().getAnnotation(TableName.class);
// System.out.println(tableName.value());
// user.getClass().getFields( );
}
3.根据ID查询 selectById(id)
/**
* 1.根据Id查询数据id=5的用
* 2.根据name=”唐僧”age=30 sql: where name=xxx and age=xXX
*/
@Test
public void testSelect01(){
User user = userMapper.selectById(5);
System.out.println(user);
}
4.根据条件查询
@Test
public void testSelect01(){
User u=new User();
u.setName("唐僧").setAge(30);
//QueryWrapper条件构造器 动态拼接where条件
// 原则:根据对象中不为null的属性动态拼接where条件
QueryWrapper<User> queryWrapper = new QueryWrapper<User>(u);
//Sql: select xxx,xxx,xxx from user where name="唐僧" and age=30
User user1 = userMapper.selectOne(queryWrapper);
System.out.println(user1);
}
5.= , > , < , <=, >= 条件查询
/**
* 需求: 查询age>18的 性别为女的用户 sex="女"
* 特殊符号: 字段左侧 > gt < lt = eq
* >= ge <= le
*/
@Test
public void testSelect2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);
queryWrapper.gt("sex","女");
List<User> list = userMapper.selectList(queryWrapper);
System.out.println(list);
}
6.模糊查询 like(字段, 模糊条件)
/**
* 模糊查询名字带"精" 性别为"女"的用户
*/
@Test
public void testSelect3(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//like %精% likeLeft %精 likeRight 精%
queryWrapper.like("name", "精");
queryWrapper.eq("sex", "女");
List<User> list = userMapper.selectList(queryWrapper);
System.out.println(list);
}
7.not null和order by查询
/**
*案例4:要求age>18岁,并且name字段不为null的用户.按照年龄降序排列.
*/
@Test
public void testselect04() {
QueryWrapper<User> querywrapper = new QueryWrapper<>();
querywrapper.gt("age",18);
querywrapper.isNotNull("name");
querywrapper.orderByDesc("age" );
List<User> userList = userMapper.selectList(querywrapper);
System.out.println(userList);
}
8.查询条件中判空 gt(判空条件,字段,参数),eq(判空条件,字段,参数)…
/**
* 案例5:
* 查询用户信息﹑有2个参数,但是2个参数可能部分为null动态查询
* 根据sex和age查询sex和 age 可能为null???
*/
@Test
public void testSelect4(){
User user=new User();
user.setAge(18);
user.setSex("女");
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt(user.getAge()!=null && user.getAge()>0,
"age", user.getAge())
.eq(user.getSex()!=null && !"".equals(user.getSex()),
"sex", "女");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
9.子查询 selectBatchIds(数组) in(字段 ,数组)
/**
* 查询id为 1,3,5,6,7的用户
*/
@Test
public void testSelect06( ){
//规则:如果数组需要转化集合则使用包装类型
Integer[] ids = {1,3,5,6,7};
//将数组转化为集合
List<Integer> idList = Arrays.asList(ids ) ;
QueryWrapper querywrapper = new QueryWrapper();
querywrapper.in("id" ,idList);
List<User> userList = userMapper.selectList(querywrapper );
System.out.println(userList);
//方法2
List<User> userList2 = userMapper.selectBatchIds(idList);
System.out.println(userList2);
}
10 删除(条件删除)
/**
* 删除name=null的用户
*/
@Test
public void deletetest(){
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.isNull("name");
userMapper.delete(queryWrapper);
System.out.println("删除成功");
}
11 修改 update
/**
* 修改数据
*/
@Test
public void updateTest(){
User user=new User();
user.setId(53).setName("springboot").setAge(1000);
//Sql: update user set name="xxx",age=18,sex="xx" where id=x
//Sql形成的原则 根据对象中不为null的属性当做set条件 并且将id当做where的条件
userMapper.updateById(user);
User userTemp=new User();
userTemp.setAge(100).setSex("其他");
QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("name", "springboot");
userMapper.update(userTemp, queryWrapper);
}
版权声明:本文为m0_48814910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。