本博文为系列文章建议大家从头阅读
@SpringBootApplication
@MapperScan(basePackages = "com.hero.study.dao")
public class StudyApplication {
public static void main(String[] args) {
SpringApplication.run(StudyApplication.class, args);
}
}
同时检查对应环境application.yml文件中如下配置路径是否正确
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.hero.study.domain
还有不要忘记maven里面的资源过滤
src/main/resources
true
mapper/*.xml
application.yml
log4j.properties
application-${profileActive}.yml
properties/${profileActive}/*.*
@RunWith(SpringRunner.class)
@SpringBootTest
public class StudyApplicationTests {
@Autowired
private UserDao userDao;
@Test
public void contextLoads() {
User user = userDao.selectByPrimaryKey(20);
System.out.println(user);
}
}
运行,控制台打印User [Hash = 104634049, id=20, name=name, password=y, serialVersionUID=1]
测试成功
生成的BaseDao中主要有以下方法,简单的crud读者可以自行测试,业务需要的sql自行编写,或者自己改造最上面提到的github项目源码。
public interface MyBatisBaseDao {
int deleteByPrimaryKey(PK id);
int insert(Model record);
int insertSelective(Model record);
Model selectByPrimaryKey(PK id);
int updateByPrimaryKeySelective(Model record);
int updateByPrimaryKey(Model record);
}
@RestController
public class DemoController {
@Autowired
private UserDao userDao;
@RequestMapping("/user/{id}")
public User user(@PathVariable Integer id) {
return userDao.selectByPrimaryKey(id);
}
}
运行项目,浏览器访问http://localhost:8080/user/20
可以看到id为20的用户信息
{
"id": 20,
"name": "name",
"password": "y"
}
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.7
mapper文件添加如下sql
添加相应的dao与service方法
@Repository
public interface UserDao extends MyBatisBaseDao {
List selectList();
}
@Override
public List selectList(){
//只对其后的第一个查询有效
PageHelper.startPage(2,10);
//PageHelper.offsetPage(5,10);
PageHelper.orderBy("id");
List users = userDao.selectList();
PageInfo userPageInfo = new PageInfo<>(users);
return users;
}
我们这里仅作为演示方法,没有封装返回的Page对象,大家也可以直接返回pagehelper的PageInfo
但是需要注意一点,如果是对外提供api的话,尽量保证api干净一些,可以自己封装page对象,减少使用者由于引入你的api间接引入了其他包。包括好多人推崇的lombook也是一个道理,好用但是并不一定适合于任何地方,比如从ddd领域充血对象来看lombook就不一定合适
这里有几个注意的点
1、PageHelper.startPage只对他后面的第一个sql有作用;
2、offsetPage后面的参数和sql limit xx xx,效果是一样的,startpage比较好理解一些
3、查询完毕使用PageInfo userPageInfo = new PageInfo<>(users);可以获取到总记录数总页数等,当然也可以设置为不查询总记录数,具体的配置参数请查阅github上的说明