我们使用 MyBatis-Flex 作为 MyBatis 的增强框架进行代码开发,并不会影响原有的 MyBatis 的任何功能。
一.使用 @Select
等 MyBatis 原生注解
1.创建数据库表并插入数据
CREATE TABLE IF NOT EXISTS tb_userinfo (
id INT AUTO_INCREMENT COMMENT '用户编号' PRIMARY KEY,
user_name VARCHAR(50) NOT NULL COMMENT '用户姓名',
password VARCHAR(255) NOT NULL COMMENT '密码'
) COMMENT '用户信息表';
INSERT INTO tb_userinfo (user_name, password) VALUES
('Tom', 'gafda11'),
('Acc', 'password2222'),
('Shy', 'myqq666'),
('Bad', 'password1234'),
('BOL', 'theshy798'),
('Fake', 'tjc@ww0dd'),
('Mark', 'wqw@qqcc1'),
('Hali', 'aq!www22');
SELECT * FROM tb_userinfo;
2.在 Spring Boot 启动类中添加 @MapperScan
注解,扫描 Mapper 文件夹
@Data
@Table("tb_userinfo")
public class Userinfo {
@Id(keyType = KeyType.Auto)
private int id;
private String user_name;
private String password;
}
3.编写实体类
public interface UserinfoMapper extends BaseMapper<Userinfo> {
Userinfo selectById(int id);
List<Userinfo> selectPagedUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
4.编写Mapper接口
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
5.编写测试类
@Autowired
private UserinfoMapper userinfoMapper;
@Test
public void testSelectById() {
int userId = 8;
Userinfo result = userinfoMapper.selectById(userId);
System.out.println(result);
}
6.测试结果
二、XML 分页
XML 分页是 MyBatis-Flex 在 v1.5.5 开始提供的一个 XML 分页解决方案,方便用户在使用 XML 时,对数据进行分页查询。
1.在开始使用 xml 之前,需要添加如下配置,告知 mybatis 的 xml 存放路径。
mybatis-flex:
mapper-locations:
- classpath*:/mapper/*.xml
2.配置完成后,开始编写 xml 和 mapper 代码,如下所示:
xml:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.mapper.UserinfoMapper">
<select id="selectById" parameterType="int" resultType="com.example.demo.entity.Userinfo">
SELECT * FROM tb_userinfo WHERE id = #{id}
</select>
<select id="selectPagedUsers" parameterType="map" resultType="com.example.demo.entity.Userinfo">
SELECT * FROM tb_userinfo
ORDER BY id
LIMIT #{offset}, #{pageSize}
</select>
</mapper>
mapper:
public interface UserinfoMapper extends BaseMapper<Userinfo> {
Userinfo selectById(int id);
List<Userinfo> selectPagedUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
3.编写服务类
@Service
public class UserinfoService {
@Autowired
private UserinfoMapper userinfoMapper;
public List<Userinfo> getPagedUsers(int currentPage, int pageSize) {
int offset = (currentPage - 1) * pageSize;
return userinfoMapper.selectPagedUsers(offset, pageSize);
}
}
4.编写测试类
@Autowired
private UserinfoService userinfoService; // 注入 UserinfoServiceS
@Test
public void testGetUsers() {
int page = 1;
int size = 5;
List<Userinfo> users = userinfoService.getPagedUsers(page, size);
users.forEach(user -> System.out.println(user));
}