mybaties的小技巧

  1. 配置MyBatis
  • 在application.yml文件中添加MyBatis配置信息
mybatis:
  # 实体类所在包名
  type-aliases-package: com.example.demo.entity
  # mapper映射文件所在目录
  mapper-locations: classpath:mapper/*.xml

  1. 配置Mapper扫描器
  • 在SpringBootApplication类上添加@MapperScan注解
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

  1. 使用@Mapper注解
  • 在Mapper接口上添加@Mapper注解
@Mapper
public interface UserMapper {
    User selectUserById(Integer id);
}

  1. 使用@Select注解
  • 在Mapper接口中使用@Select注解
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Integer id);
}

  1. 使用@Insert注解
  • 在Mapper接口中使用@Insert注解
@Mapper
public interface UserMapper {
    @Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
    int insertUser(User user);
}

  1. 使用@Update注解
  • 在Mapper接口中使用@Update注解
@Mapper
public interface UserMapper {
    @Update("UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}")
    int updateUser(User user);
}

  1. 使用@Delete注解
  • 在Mapper接口中使用@Delete注解
@Mapper
public interface UserMapper {
    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteUser(Integer id);
}

  1. 使用@ResultMap注解
  • 使用@ResultMap注解自定义结果映射
@Mapper
public interface UserMapper {
    @Results(id = "userResultMap", value = {
            @Result(property = "id", column = "id"),
            @Result(property = "username", column = "username"),
            @Result(property = "password", column = "password")
    })
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(@Param("id") Integer id);
}

  1. 使用@SelectProvider注解
  • 在Mapper接口中使用@SelectProvider注解
@Mapper
public interface UserMapper {
    @SelectProvider(type = UserSqlProvider.class, method = "selectUserById")
    User selectUserById(Integer id);
}

  1. 使用动态SQL语句
  • 在Mapper接口中使用动态SQL语句
@Mapper
public interface UserMapper {
    @Select("")
    List selectUsersByCondition(@Param("username") String username, @Param("password") String password);
}
  1. 配置文件存放位置:将MyBatis的配置文件(mybatis-config.xml)放在resources目录下,可以不用额外配置。

  2. Mapper映射文件存放位置:将Mapper映射文件放在resources/mapper目录下,也可以不用额外配置。

  3. Mapper映射文件命名规则:建议按照业务模块来命名,例如UserMapper.xml、OrderMapper.xml。

  4. 配置文件中扫描Mapper映射文件的路径和后缀:在application.properties或application.yml文件中添加配置:

    # application.properties
    mybatis.mapper-locations=classpath:mapper/*.xml
    mybatis.mapper-locations=classpath*:mapper/**/*.xml
    
    # application.yml
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      mapper-locations: classpath*:mapper/**/*.xml
    

    注意:这里配置的路径是相对于classpath的路径,可以使用通配符来扫描多个路径

  5. 数据源的配置:Spring Boot默认使用application.properties或application.yml文件来配置数据源,例如:

    # application.properties
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    # application.yml
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
    

    注意:在XML配置文件中引用数据源时,需要使用“${}”占位符来引用配置文件中的属性,例如:

    
        
        
        
        
    
    

  6. 使用注解的方式来配置Mapper:在Mapper接口上使用@Mapper注解,例如:

    @Mapper
    public interface UserMapper {
        User getById(Long id);
    
        void insert(User user);
    
        void update(User user);
    
        void delete(Long id);
    }
    

    注意:使用注解方式时,不需要在application.properties或application.yml文件中配置Mapper映射文件的路径和后缀。

  7. 配置分页插件:在application.properties或application.yml文件中添加配置:

    # application.properties
    # MySQL
    mybatis.pagehelper.helperDialect=mysql
    mybatis.pagehelper.reasonable=true
    mybatis.pagehelper.supportMethodsArguments=true
    mybatis.pagehelper.params=count=countSql
    
    # Oracle
    mybatis.pagehelper.helperDialect=oracle
    mybatis.pagehelper.reasonable=true
    mybatis.pagehelper.supportMethodsArguments=true
    mybatis.pagehelper.params=count=countSql
    
    # application.yml
    mybatis:
      pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql
    

    然后在MyBatis的配置文件中添加分页插件的配置:

    
        
            
            
            
            
        
    
    

    最后在Mapper接口中添加分页查询方法:

    List listByPage(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
    

    注意:这里使用了@Param注解来指定方法参数的名称,在Mapper映射文件中就可以直接使用这个名称来引用参数。

  8. 在Mapper映射文件中使用动态SQL:可以使用if、when、choose、foreach等标签来编写动态SQL,例如:

    
    
    
    
    
        insert into user (name, age)
        values
        
            (#{user.name}, #{user.age})
        
    
    

    注意:使用动态SQL时,需要注意参数的类型和名称,以及标签的嵌套顺序和语法正确性。

  1. Mapper接口中方法参数使用@Param注解

在Mapper接口中定义方法时,如果方法参数是多个,则可以使用@Param注解为参数命名,从而在MyBatis中调用时可以直接使用参数名称进行调用,提高代码的可读性和可维护性。

例如:

public interface UserMapper {
    List getUsersByAgeAndGender(@Param("age") int age, @Param("gender") String gender);
}

在MyBatis中,调用该方法时可以这样写:


  1. 使用别名替代resultMap中的列名

在使用resultMap映射结果集时,可以使用column属性指定列名和属性名的对应关系。但是如果有很多列都需要这样指定,代码会显得冗长且难以维护。此时,可以使用别名来简化代码。

例如:


    
    
    
    

可以改写为:


    
    
    
    

这样就不必每个列都写column和property了,更加简洁。

  1. 使用bind标签简化sql语句

在MyBatis中,可以使用bind标签把常量或表达式绑定到一个Ognl变量上,从而在sql语句中直接使用该变量,避免了重复的代码和计算。

例如:


上述代码中,使用了两个bind标签,把name和age变量绑定到Ognl表达式上,然后在sql语句中直接使用这两个变量,避免了重复代码和计算。

你可能感兴趣的:(java,mybatis,tomcat)