SpringBoot环境下使用通用Mapper
环境搭建:
约定的项目结构
约定的配置文件
1,引入SpringBoot的maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
引入通用Mapper依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
2,书写配置文件
在resources下建application.properties/.yml/.yaml,
放在dao、service、controller包的同级
3,书写启动类
@SpringBootApplication
@MapperScan(“com.xxx.dao”) //tk.mybatis包下
4,书写实体类
例:
@Table(name = "c_admin")
public class Admin {
@Id
private String id;
private String username;
private String password;
private String nickname;
}
使用@Table注解将数据库中的表与实体类建立映射关系
使用@Id注解标注数据库表中的主键
5,书写dao
dao继承tk.mybatis包下的Mapper类,泛型为当前dao操作的实体类
@Repository
public interface AdminDao extends Mapper<Admin> {
}
6,书写service层、书写controller层
通用Mapper中常用方法
查询方法:
1,查询全部
public void test1(){
List<Admin> admins = adminDao.selectAll();
for (Admin admin : admins) {
System.out.println(admin);
}
}
2,根据主键查询
//查询主键为"1"的
public void test2(){
Admin admin = adminDao.selectByPrimaryKey("1");
System.out.println(admin);
}
3,根据某个字段条件查询
//查询所有nickname="小王"的
public void test3(){
Admin admin=new Admin();
admin.setNickname("小王");
List<Admin> admins = adminDao.select(admin);
for (Admin admin1 : admins) {
System.out.println(admin1);
}
}
4,复杂条件查询
//查询nickname="小王"且username不为null的
//复杂条件查询需要用到Example类
public void test4(){
Example example=new Example(Admin.class);
example.createCriteria().andEqualTo("nickname", "小王").andIsNotNull("username");
List<Admin> admins = adminDao.selectByExample(example);
for (Admin admin : admins) {
System.out.println(admin);
}
}
5,分页查询
//查询第一页,每页显示3条数据
//分页查询需要用到RowBounds类
public void test6(){
int page = 1;
int pageSize = 3;
Admin admin = new Admin();
admin.setUsername("admin");
//offset:起始下标 limit:查询几条
RowBounds rowBounds = new RowBounds((page-1)*pageSize,pageSize);
List<Admin> admins = adminDao.selectByRowBounds(admin, rowBounds);
for (Admin admin1 : admins) {
System.out.println(admin1);
}
}
增删改方法
1,添加
public void test7(){
Admin admin = new Admin();
admin.setId("11");
admin.setUsername("qwe");
admin.setPassword("ewq");
int i = adminDao.insert(admin); //i代表受影响的行数
System.out.println(i);
}
2,修改
//updateByPrimaryKey 根据主键修改,没有修改的属性会置为null
public void test9(){
Admin admin = new Admin();
admin.setId("2");
admin.setUsername("aaaa");
admin.setPassword("bbbb");
adminDao.updateByPrimaryKey(admin);
}
//updateByPrimaryKeySelective()
//根据主键修改,没有修改的属性不会置为null
public void test10(){
Admin admin = new Admin();
admin.setId("3");
admin.setUsername("aaaa");
admin.setPassword("bbbb");
adminDao.updateByPrimaryKeySelective(admin);
}
3,删除
//根据主键删除
public void test11(){
Admin admin = new Admin();
int delete = adminDao.delete(admin);
System.out.println(delete);
}
//根据条件删除
//删除nickname不为null的
public void test12(){
Example example = new Example(Admin.class);
example.createCriteria().andIsNull("nickname");
int i = adminDao.deleteByExample(example);
System.out.println(i);
}