mybatis:
# 实体类所在包名
type-aliases-package: com.example.demo.entity
# mapper映射文件所在目录
mapper-locations: classpath:mapper/*.xml
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@Mapper
public interface UserMapper {
User selectUserById(Integer id);
}
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(Integer id);
}
@Mapper
public interface UserMapper {
@Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
int insertUser(User user);
}
@Mapper
public interface UserMapper {
@Update("UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}")
int updateUser(User user);
}
@Mapper
public interface UserMapper {
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUser(Integer id);
}
@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);
}
@Mapper
public interface UserMapper {
@SelectProvider(type = UserSqlProvider.class, method = "selectUserById")
User selectUserById(Integer id);
}
@Mapper
public interface UserMapper {
@Select("")
List selectUsersByCondition(@Param("username") String username, @Param("password") String password);
}
配置文件存放位置:将MyBatis的配置文件(mybatis-config.xml)放在resources目录下,可以不用额外配置。
Mapper映射文件存放位置:将Mapper映射文件放在resources/mapper目录下,也可以不用额外配置。
Mapper映射文件命名规则:建议按照业务模块来命名,例如UserMapper.xml、OrderMapper.xml。
配置文件中扫描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的路径,可以使用通配符来扫描多个路径。
数据源的配置: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配置文件中引用数据源时,需要使用“${}”占位符来引用配置文件中的属性,例如:
使用注解的方式来配置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映射文件的路径和后缀。
配置分页插件:在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映射文件中就可以直接使用这个名称来引用参数。
在Mapper映射文件中使用动态SQL:可以使用if、when、choose、foreach等标签来编写动态SQL,例如:
insert into user (name, age)
values
(#{user.name}, #{user.age})
注意:使用动态SQL时,需要注意参数的类型和名称,以及标签的嵌套顺序和语法正确性。
在Mapper接口中定义方法时,如果方法参数是多个,则可以使用@Param注解为参数命名,从而在MyBatis中调用时可以直接使用参数名称进行调用,提高代码的可读性和可维护性。
例如:
public interface UserMapper {
List getUsersByAgeAndGender(@Param("age") int age, @Param("gender") String gender);
}
在MyBatis中,调用该方法时可以这样写:
在使用resultMap映射结果集时,可以使用column属性指定列名和属性名的对应关系。但是如果有很多列都需要这样指定,代码会显得冗长且难以维护。此时,可以使用别名来简化代码。
例如:
可以改写为:
这样就不必每个列都写column和property了,更加简洁。
在MyBatis中,可以使用bind标签把常量或表达式绑定到一个Ognl变量上,从而在sql语句中直接使用该变量,避免了重复的代码和计算。
例如:
上述代码中,使用了两个bind标签,把name和age变量绑定到Ognl表达式上,然后在sql语句中直接使用这两个变量,避免了重复代码和计算。