网站做301重定向的作用,网站免费正能量不下载,上海招聘信息最新招聘2021,南京电商网站设计公司常用注解
TableName
MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常
//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, TableName
MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常
//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, zhangsanatguigu.com);//INSERT INTO user (id, name, age, email) VALUES ( ?, ?, ?, ? )int result userMapper.insert(user);System.out.println(受影响行数result);//获取插入数据的主键id为1475754982694199298//MyBatis-Plus在实现插入数据时如果我们没有指定id,他默认基于雪花算法的策略生成一个id插入到表中System.out.println(id自动获取user.getId());
}局部配置: 在实体类类型上添加TableName(t_user)用来设置实体类对应的表名
Data
TableName(t_user)
public class User{private Long id;private String name;private Integer age;private String email;public User() {}
}全局配置: 实际开发中实体类所对应的表都有固定的前缀(例如t_ 或tbl_),可以使用MyBatis-Plus提供的全局配置属性为所有实体类所对应的表名设置默认的前缀
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 设置MyBatis-Plus的全局配置global-config:db-config:# 设置实体类所对应的表的统一前缀table-prefix: t_TableId的value和type属性
MyBatis-Plus在实现CRUD时只会将实体类id属性对应的id字段作为主键,也就是说在插入数据时基于雪花算法的策略生成的值只会赋值给表中的id字段
测试将实体类中的id属性改为uid以及表中的id字段也改为uid(此时uid属性对应的uid字段对于MyBatis-Plus来说就是一个普通字段)
//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, zhangsanatguigu.com);// INSERT INTO user (name, age, email) VALUES ( ?, ?, ?)// uid字段对于MyBatis-Plus来说就是一个普通字段,如果我们没有指定值默认就向数据表插入的就为null// MyBatis-Plus不会基于雪花算法为uid字段赋值int result userMapper.insert(user);System.out.println(受影响行数result);System.out.println(id自动获取user.getId());
}在实体类的属性上添加TableId注解将该属性对应的字段作为主键字段(根据属性名和字段名的映射关系确定对应的字段名)
如果实体类的属性名和数据库中的主键字段名称不同,可以使用TableId注解的value属性指定作为主键的字段
Data
public class User {TableId// 将uid属性对应的uid字段作为主键字段private Long uid;TableId(uid)//将id属性对应的uid字段作为主键private Long id;private String name;private Integer age;private String email;
}//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, zhangsanatguigu.com);//INSERT INTO user (uid,name, age, email) VALUES ( ?, ?, ?,?)int result userMapper.insert(user);System.out.println(受影响行数result);System.out.println(id自动获取user.getId());
}TableId的type属性是IdType枚举类型用来设置主键的生成策略
注意主键的生成策略只是辅助,如果我们自己手动给实体类的主键属性设置了值那么主键生成策略就会不起作用
值描述IdType.ASSIGN_ID(默认值)先基于雪花算法的策略生成数据然后为实体类的id属性赋值此时再向表中插入数据时主键id字段已经有了值,所以即使数据库的id字段设置了自增也不起作用IdType.AUTO使用数据库主键字段的自增策略即不用给主键字段赋值不再基于雪花算法为实体类的id属性赋值,此时向数据库中插入数据时id字段没有值所以要求数据库的主键字段必须设置自增属性
局部配置: 在实体类的属性上添加TableId注解指定type属性设置主键的生成策略
Data
public class User {TableId(valueuid,type IdType.AUTO)private Long id;private String name;private Integer age;private String email;
}
//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, zhangsanatguigu.com);//INSERT INTO user (name, age, email) VALUES ( ?, ?, ?,?)//采用主键自动递增策略后MyBatis-Plus就不会再通过雪花算法为实体类的id属性赋值然后插入数据库中int result userMapper.insert(user);System.out.println(受影响行数result);System.out.println(id自动获取user.getId());
}全局配置: 使用MyBatis-Plus提供的全局配置设置统一的主键生成策略
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 设置MyBatis-Plus的全局配置global-config:db-config:# 设置实体类所对应的表的统一前缀table-prefix: t_# 设置统一的主键生成策略id-type: auto TableField
在实体类属性上使用TableField,表示当前属性对应的字段为一个普通字段(默认属性名就是表中的字段名)
如果实体类的属性名和表中的字段名不一致,可以使用TableField的value属性指定属性对应的普通字段名若实体类中的属性使用的是驼峰命名风格而表中的字段使用的是下划线命名风格, 此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格
Data
public class User {private Long id;//userName对应的SQL语句INSERT INTO user (id, user_name, age, email ) VALUES ( ?, ?, ?, ? )//name对应的SQL语句INSERT INTO user (id, name, age, email ) VALUES ( ?, ?, ?, ? )TableField(user_name)private String userName;private Integer age;private String email;
}
//向表中插入一条数据
Test
public void testInsert(){User user new User(null, 张三, 23, zhangsanatguigu.com);//int result userMapper.insert(user);System.out.println(受影响行数result);System.out.println(id自动获取user.getId());
}TableLogic
数据库表中的删除分为物理删除和逻辑删除两种
物理删除(真删): 将对应数据从数据库中删除,之后在数据库中查询不到此条被删除的数据逻辑删除(假删): 将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录(可以进行数据恢复)
第一步: 在数据库中创建逻辑删除字段is_deleted并设置默认值为0(0表示该记录处于未删除状态,1表示已删除状态) 第二步: 在实体类中添加逻辑删除属性
Data
public class User {TableId(uid)private Long id;TableFiled(user_name)private String name;private Integer age;private String email;TableLogicprivate Integer isDeleted;
}第三步测试逻辑删除: 逻辑删除数据后底层真正执行的是修改,查询数据时被逻辑删除的数据默认也不会被查询到
//通过多个id批量删除
Test
public void testDeleteBatchIds(){ListLong idList Arrays.asList(1L, 2L, 3L);//物理删除执行的SQL: DELETE FROM user WHERE uid IN ( ? , ? , ? )//逻辑删除真正执行的是修改: UPDATE t_user SET is_deleted1 WHERE uid? AND is_deleted0int result userMapper.deleteBatchIds(idList);System.out.println(受影响行数result);
}//查询所有数据,返回一个list集合
Test
public void testSelectList(){//直接查询:SELECT uid As id,user_name As name,age,email FROM user//查询数据被逻辑删除的数据默认不会被查询:SELECT uid As id,user_name As name,age,email ,is_deleted FROM t_user WHERE is_deleted0ListUser list userMapper.selectList(null);list.forEach(System.out::println);
}