目录
1.插入
主键生成策略
1.雪花策略
2.主键自增策略:使用数据库自增策略,先设置数据库id字段自增不然报错
3.其他策略
2.删除
1.根据id
2.根据列名
3.根据实体条件
4.根据id批量删除
3.更新
1.根据id
2.条件更新
4.查询
1.通过id
2.通过id列表查询
3.通过列条件
4.根据多条件查询一个
5.查询符合条件的数量
6.根据实体条件
7.根据条件查询,返回一个集合列表
8.条件分页查询(mybatis-plus自带分页插件)
1.插入
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void insert(){
User_plus user_plus= new User_plus();
user_plus.setName("刘备");
user_plus.setAge(18);
user_plus.setEmail("jckslafkas@163.com");
int i=user_plusDAO.insert(user_plus);
//
System.out.println(i+"id:"+user_plus.getId());
}
主键生成策略
因为在最开始建表的sql语句中就指明了,id是数据库的主键,主键不能唯一,
常见的数据库中主键自动设置方法有(uuid、自增id、雪花算法、redis生成、zookeeper生成)
1.雪花策略这里生成的id默认采用的是雪花算法:
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看https://github.com/twitter/snowflake。雪花算法支持的TPS可以达到419万左右(2^22*1000),几乎保证全球唯一。
//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
//枚举注解,雪花算法使用ID_WORKER策略,全局唯一ID,数据库设置自增也没用
@TableId(type = IdType.ASSIGN_ID,value = "id")
private Long id;
private String name;
private Integer age;
private String email;
}
注解可以自定义配置
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD}) //枚举注解
public @interface TableId {
//可以设置以下两个参数
String value() default "";
IdType type() default IdType.NONE; //ID策略
}
2.主键自增策略:使用数据库自增策略,先设置数据库id字段自增不然报错
//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
//要是自增策略,在id上加入下列代码
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
3.其他策略
public enum IdType {
/**
* 数据库ID自增
* 该类型请确保数据库设置了 ID自增 否则无效
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* 该类型可以通过自己注册自动填充插件进行填充
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4);
private final int key;
IdType(int key) {
this.key = key;
}
}
2.删除
1.根据id
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void deleteById(){
int i = user_plusDAO.deleteById(6);
System.out.println(i);
}
2.根据列名
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void deleteByMap(){
//先创建Map
Map map=new HashMap<>();
map.put("name","刘备");
map.put("age",18);
int i = user_plusDAO.deleteByMap(map);
System.out.println(i);
}
3.根据实体条件
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void deleteByEntity(){
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("name","刘备");
int i = user_plusDAO.delete(wrapper);
System.out.println(i);
}
4.根据id批量删除
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void deletByBatchIds(){
Collection list=new ArrayList<>();
list.add(9);
list.add(10);
int i=user_plusDAO.deleteBatchIds(list);
System.out.println(i);
}
3.更新
1.根据id
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void updateById(){
User_plus user=new User_plus();
user.setId(1L);
user.setAge(20);
int i = user_plusDAO.updateById(user);
System.out.println(i);
}
2.条件更新
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void update(){
User_plus user=new User_plus();
UpdateWrapper updateWrapper=new UpdateWrapper<>();
//设置更新字段
updateWrapper.set("name","张飞");
//设置更新条件
updateWrapper.eq("id",1);
int i = user_plusDAO.update(user,updateWrapper);
System.out.println(i);
}
4.查询
1.通过id
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectById(){
User_plus user = user_plusDAO.selectById(1);
System.out.println(user);
}
2.通过id列表查询
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectByBatchId(){
List userlist = user_plusDAO.selectBatchIds(Arrays.asList(1,2,3));
userlist.forEach(System.out::println);
}
3.通过列条件
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectByMap(){
//先创建Map
Map map=new HashMap<>();
map.put("age","20");
List userlist = user_plusDAO.selectByMap(map);
userlist.forEach(System.out::println);
}
4.根据多条件查询一个
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectOne(){
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("name","张飞");
wrapper.eq("age",20);
User_plus user = user_plusDAO.selectOne(wrapper);
System.out.println(user);
}
5.查询符合条件的数量
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectCount(){
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("age",20);
Long i = user_plusDAO.selectCount(wrapper);
System.out.println(i);
}
6.根据实体条件
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectList(){
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("age",20);
List userlist = user_plusDAO.selectList(wrapper);
userlist.forEach(System.out::println);
}
7.根据条件查询,返回一个集合列表
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectMaps(){
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("age",20);
List
8.条件分页查询(mybatis-plus自带分页插件)
配置分页类:
在java文件夹下创建config文件夹,在里面创建mybatisplusconfig类
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
/**
* 分页插件配置
*从MyBatis-Plus 3.4.0开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInterceptor。
*旧版本分页插件
* @Bean
* public PaginationInterceptor paginationInterceptor() {
* return new PaginationInterceptor();
* }
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 向MyBatis-Plus的过滤器链中添加分页拦截器,需要设置数据库类型(主要用于分页方言)
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
在application类添加config扫描
@SpringBootApplication
@MapperScan("mapper")//引导类扫描定义的接口
@ComponentScan("config")//添加config扫描
public class MybatisplusSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusSpringbootApplication.class, args);
}
}
测试:
@Autowired(required = false)
User_plusDAO user_plusDAO;
@Test
public void selectPage(){
//分页设置
IPage ipage=new Page<>();
//当前页
ipage.setCurrent(1);
//每页数量
ipage.setSize(2);
//条件
QueryWrapper wrapper=new QueryWrapper<>();
wrapper.eq("age",20);
IPage page = user_plusDAO.selectPage(ipage,wrapper);
System.out.println("当前页:"+page.getCurrent());
System.out.println("总页数:"+page.getPages());
System.out.println("总条数:"+page.getTotal());
System.out.println("查询到的集合:"+page.getRecords());
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)