碰到的坑,
一个是 service(若没有实现类)不能实现dao接口,否则报错。直接注入就好。若实现了dao接口,会包内存溢出错误,将进行无限循环。
二是,在启动类上,需要加入扫描mapper的package名称,否则报 mapper里面的bean没有实例化。
在controller里,映射文件,不需要加“/”斜杠,只需要加名称即可。
需要注意的是,在application文件中,需要指定mapper的xml的位置。否则也报错。
@SpringBootApplication @MapperScan(basePackages = {"cn.taotao.dao"}) //需要指定!! public class TransactionalTestApplication { public static void main(String[] args) { SpringApplication.run(TransactionalTestApplication.class, args); } }
在pom中必须引入web的starter,即使是json的restcontroller,也必须引入web starter
其他的都和之前一篇一样。参阅:
这个的代码如下:
UserService
package cn.taotao.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.taotao.bean.User; import cn.taotao.dao.UserMapper; @Service public class UserService { @Autowired private UserMapper userMapper; public int deleteByPrimaryKey(Integer id) { // TODO Auto-generated method stub return 0; } public int insert(User record) { // TODO Auto-generated method stub return 0; } public int insertSelective(User record) { // TODO Auto-generated method stub return 0; } public User selectByPrimaryKey(Integer id) { // TODO Auto-generated method stub return null; } public int updateByPrimaryKeySelective(User record) { // TODO Auto-generated method stub return 0; } public int updateByPrimaryKey(User record) { // TODO Auto-generated method stub return 0; } public List<User> queryAll() { // TODO Auto-generated method stub return this.userMapper.queryAll(); } }
controller
package cn.taotao.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import cn.taotao.bean.User; import cn.taotao.service.UserService; @RestController public class IndexController { @Autowired private UserService userService; @RequestMapping(value= {"/","/index"}) @ResponseBody public List<User> getIndex() { ModelAndView mv = new ModelAndView("index"); List<User> queryAll = this.userService.queryAll(); mv.addObject("users", queryAll); // return mv; return queryAll; } }
application.yml
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: xxxxx initial-size: 1 min-idle: 1 max-active: 50 max-wait: 15000 enable: true test-on-borrow: true test-on-return: true test-while-idle: true mvc: view: suffix: .jsp mybatis: mapper-locations: - classpath:mapper/*Mapper.xml #这个需要指出,否则不会加载mapper.xml文件 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
pom.xml
<!-- 手动添加 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <!-- <version>2.4.2</version> --> </dependency> <!--/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!--servlet依赖的jar包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <!--jsp依赖的jar包 --> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
入口启动类
@SpringBootApplication @MapperScan(basePackages = {"cn.taotao.dao"}) public class TransactionalDemoApplication { public static void main(String[] args) { SpringApplication.run(TransactionalDemoApplication.class, args); } }