1
2
3 com.baomidou
4 mybatis-plus-boot-starter
5 3.0.3
6
1 mybatis-plus:
2 configuration:
3 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4 mapper-locations: classpath:mapping/*Mapping.xml #配置自定义sql时Mapping.xml扫描的路径
5 type-aliases-package: com.example.demo.*.entity #配置三扫码的实体类路径
6 global-config:
7 db-config:
8 logic-delete-value: 1 # 逻辑已删除值(默认为 1 )
9 logic-not-delete-value: 0 # 逻辑未删除值(默认为 0 )
10 id-type: none
1 @MapperScan("com.example.demo.*.mapper")
2 @SpringBootApplication
3 public class DemoApplication {
4 public static void main(String[] args) {
5 SpringApplication.run(DemoApplication.class, args);
6 }
7 }
1
2
3 com.baomidou
4 mybatis-plus-generator
5 3.0.3
6
7
8
9 org.apache.velocity
10 velocity-engine-core
11 2.0
12
14
15
16 org.freemarker
17 freemarker
18 2.3.23
19
21
22
23 com.ibeetl
24 beetl
25 2.2.5
26
2 String projectPath = System.getProperty("user.dir");
3 //输出路径
4 gc.setOutputDir(projectPath + "/src/main/java");
2 StrategyConfig strategy = new StrategyConfig();
3 strategy.setInclude("t_test"); //设置映射的表名,可以设置多个表
2 DataSourceConfig dsc = new DataSourceConfig();
3 dsc.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useJ
4 // dsc.setSchemaName("public");
5 dsc.setDriverName("com.mysql.cj.jdbc.Driver");
6 dsc.setUsername("root");
7 dsc.setPassword("123456");
8 dsc.setDbType(DbType.MYSQL); //指定数据库的类型
9 mpg.setDataSource(dsc);
2 PackageConfig pc = new PackageConfig();
3 pc.setParent("com.example.demo.test"); //自定义包的路径
4 //pc.setModuleName("module"); //模块名称 设置后,会生成com.cxyxs.test.module,里面存放之前设
5 pc.setEntity("entity");
6 pc.setMapper("mapper");
7 pc.setService("service");
8 pc.setController("controller");
9 mpg.setPackageInfo(pc);
1
2 org.projectlombok
3 lombok
4 1.18.2
5
3 * @Author fansongsong
4 */
5 @Data
6 @TableName("t_user")
7 public class User extends Model {
8 /**
9 * 主键
10 */
11 private String id;
12 /**
13 * 用户名
14 */
15 private String name;
16 /**
17 * 手机
18 */
19 private String mobile;
20 …
21 /**
22 * 用户地址
23 */
24 @TableField(exist = false)
25 @JsonProperty("address_name")
26 private String addressName;
27 }
3 * 用户数据库控制层接口Mapper
4 * @Author fansongsong
5 */
6 @Repository
7 public interface UserMapper extends BaseMapper {
10 * 根据用户id获取用户角色组信息
11 * @param id 用户id
12 * @return UserRoleVO
13 */
14 UserRoleVO getUserRole(String id);
15 }
3 * @author fansongsong
4 */
5 public interface IUserService extends IService {
6 }
1
2
5
6
7
8
9
10
11
12
13
16
17 id, name , mobile, create_time, modify_time, deleted, status
18
19
20
3 * @Author fansongsong
4 */
5 @Service
6 @Slf4j
7 public class UserServiceImpl extends ServiceImpl implements IUserServic
9 @Resource
10 UserMapper userMapper;
12 @Resource
13 IUserService userService;
15 @Resource
16 TUserRoleService userRoleService;
17
18 /**
19 * 查询用户角色v1(自定义sql)
20 * @param id 用户id
21 * @return UserRoleVO
22 */
23 @Override
24 public UserRoleVO userRoleV1(String id) {
25 //自定义sql根据用户id获取用户角色组信息
26 UserRoleVO result = userMapper.getUserRole(id);
27 log.info("UserRoleVO result msg:"+ result.getName());
28 return result;
29 }
30 }
3 * @Author fansongsong
4 */
6 @RestController
7 @RequestMapping("/user")
8 public class UserController {
10 @Resource
11 private IUserService userService;
15 * 根据用户id查询用户信息
16 * @param id 用户id
17 * @return ApiResponse
18 */
19 @GetMapping("/get_user/{id}")
20 public ApiResponse getUser(@PathVariable(value = "id") String id) {
21 User user = userService.getUser(id);
22 return ApiResponse.success(user);
23 }
24 }
1 userMapper.insert(user);或者
2 userService.save(user);
1 userMapper.updateById(user);或者
2 userService.updateById(user);
1 userMapper.deleteById(id);或者
2 userService.removeById(id);
1 mybatis-plus:
2 global-config:
3 db-config:
4 logic-delete-value: 1 # 逻辑已删除值(默认为 1 )
5 logic-not-delete-value: 0 # 逻辑未删除值(默认为 0 )
1 @Configuration
2 public class MyConfig {
3 @Bean
4 public ISqlInjector SqlInjector(){
5 return new LogicSqlInjector();
6 }
7 }
4 @TableLogic//逻辑删除
5 private Integer deleted;
1 // 一,Service提供的CRUD
2 // 1,根据 ID 查询
3 User user1 = userService.getById(id);
5 // 2,根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.
6 QueryWrapper userQueryWrapper = new QueryWrapper<>();
7 userQueryWrapper.lambda().eq(User::getId,id);
8 User user2 = userService.getOne(userQueryWrapper);
10 // 3,根据 Wrapper,查询一条记录,throwEx(boolean),有多个 result 是否抛出异常
11 User user3 = userService.getOne(userQueryWrapper,false);
13 // 4,根据 Wrapper,查询一条记录,返回Map
14 Map user4 = userService.getMap(userQueryWrapper);
16 // 二,Mapper提供的CRUD
18 // 1,根据 entity 条件,查询一条记录
1 QueryWrapper queryWrapper = new QueryWrapper<>();
2 List result 1 = userService.list(queryWrapper);
3 List result 2 = userMapper.selectList(queryWrapper);
2
3 com.github.pagehelper
4 pagehelper
5 5.1.0
6
1 //每页的大小为pageSize,查询第pageNo页的结果
2 PageHelper.startPage(pageNo, pageSize);
19 QueryWrapper queryWrapper = new QueryWrapper<>();
20 queryWrapper.lambda().eq(User::getId,id);
21 queryWrapper.lambda().eq(User::getDeleted, 0 );
22 User user6 = userMapper.selectOne(queryWrapper);
23 // 2,根据 ID 查询
24 User user7 = userMapper.selectById(id);
4 List result = userService.list(queryWrapper);
1 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
2 sql – 可被其他语句引用的可重用语句块。
3 insert – 映射插入语句
4 update – 映射更新语句
5 delete – 映射删除语句
6 select – 映射查询语句
3 * @param pageNo 当前第几页
4 * @param pageSize 每页显示条数
5 * @param mobile 手机号
6 * @param name 用户名
7 * @return List
8 */
9 @GetMapping("/list_user")
10 public ApiResponse listUser(
11 @RequestParam(value = "page_no", required = false, defaultValue = "1") int pageNo
12 @RequestParam(value = "page_size", required = false, defaultValue = "5") int page
13 @RequestParam(value = "mobile", required = false) String mobile,
14 @RequestParam(value = "name", required = false) String name) {
15 List userList = userService.listUser(pageNo,pageSize,mobile,name);
16 return ApiResponse.success(new PageInfo<>(userList));
17 }
1
Select 常用属性描述:
1
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterTyp
e
将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过 Typ
默认值为 unset。
resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包
resultType 或 resultMap,但不能同时使用。
resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话
使用 resultMap 或 resultType,但不能同时使用。
2
3 insert into Author (id,username,password,email,bio)
4 values (#{id},#{username},#{password},#{email},#{bio})
5
7
8 update Author set
9 username = #{username},
10 password = #{password},
11 email = #{email},
12 bio = #{bio}
13 where id = #{id}
14
16
17 delete from Author where id = #{id}
18
动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分。比如:
1
11
12
13 and tu.mobile = #{mobile}
14
15
16
1
1
2 update Author
3
4 username=#{username},
5 password=#{password},
6 email=#{email},
7 bio=#{bio}
8
9 where id=#{id}
10
1
1
2
3 INSERT INTO t_user (
4 `id`,
5 `name`,
6 `mobile`,
7 `create_time`,
8 `modify_time`,
9 `deleted`,
10 `status`,
11 `age`
12 )
13 VALUES
14
15 (
16 #{item.id},
17 #{item.name},
18 #{item.mobile},
19 #{item.createTime},
20 #{item.modifyTime},
21 #{item.deleted},
22 #{item.status},
23 #{item.age}
24 )
25
26
1 userService.saveBatch(userList);
2 userService.saveOrUpdateBatch(userList);