问题很简单。我想使用上面提到的工具对我的MySQL数据库进行基本的SELECT * FROm调用。
我将使用XML样式的映射器MyBatis配置

到目前为止,我使用字符串语句时成功

@RestController
@RequestMapping("/")
public class ApplicationRestController {

    Actor actor;
    //this works easily because no connections to SQL are being made.
    @GetMapping("/hello")
    public String hello() {
        return "HELO WORLD";
    }
}


但是,如果我想从数据库中获取数据怎么办?这该怎么做?我需要SqlSession吗?

有人有有用的链接吗?

这是我的更新错误:


  创建名称为'applicationRestController'的bean时出错:不满意
  通过字段'actorMapper'表示的依赖关系;嵌套异常为
  org.springframework.beans.factory.UnsatisfiedDependencyException:
  在文件中定义名称为“ actorMapper”的bean创建时出错
  [/Users/helios/Documents/workspace-sts-3.9.8.RELEASE/mybatis-sakila/target/classes/com/helios/mybatissakila/mappers/ActorMapper.class]:
  通过bean属性表达的不满意的依赖关系
  'sqlSessionFactory';嵌套异常为
  org.springframework.beans.factory.BeanCreationException:错误
  在类路径中创建名称为“ sqlSessionFactory”的bean
  资源
  [org / mybatis / spring / boot / autoconfigure / MybatisAutoConfiguration.class]:
  通过工厂方法实例化Bean失败;嵌套异常为
  org.springframework.beans.BeanInstantiationException:失败
  实例化[org.apache.ibatis.session.SqlSessionFactory]:工厂
  方法'sqlSessionFactory'抛出异常;嵌套异常为
  org.springframework.core.NestedIOException:无法解析映射
  资源:'类路径资源
  [mybatis-sakila / src / main / resources / mybatis-mapper / ActorMapper.xml]”;
  嵌套异常为
  
  java.io.FileNotFoundException:类路径资源
  [mybatis-sakila / src / main / resources / mybatis-mapper / ActorMapper.xml]
  无法打开,因为它不存在


这些是我的相关文件:

演员.java

public class Actor {

    private static final long serialVersionUID = 1L;

    private int actor_id;
    private String first_name;
    private String last_name;
    private Date last_update;

    public int getActor_id() {
        return actor_id;
    }
    public void setActor_id(int actor_id) {
        this.actor_id = actor_id;
    }
    public String getFirst_name() {
        return first_name;
    }
    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }
    public String getLast_name() {
        return last_name;
    }
    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }
    public Date getLast_update() {
        return last_update;
    }
    public void setLast_update(Date last_update) {
        this.last_update = last_update;
    }
}


ActorMapper.java

import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import com.helios.mybatissakila.model.Actor;

@Mapper
public interface ActorMapper {

    List <Actor> selectAllActors();
}


ApplicationRestController.java

@RestController
@RequestMapping("/")
public class ApplicationRestController {

    @Autowired
    ActorMapper actorMapper;

    //working as not connected to mysql
    @GetMapping("/hello")
    public String hello() {
        return "MyBatis + SpringBoot + MySQL!";

    }
    //error
    @GetMapping("/actors")
    public List<Actor> selectAllActors(){
            return actorMapper.selectAllActors();
    }
}


ActorMapper.xml





<resultMap id="ActorResultMap" type="Actor">
    <id column="actor_id" property="actor_id" jdbcType="INTEGER"/>
    <result column="first_name" property="first_name" />
    <result column="last_name" property="last_name" />
    <result column="last_update" property="last_update" />
</resultMap>

<select id="selectAllActors" resultMap="ActorResultMap">
        select * from actor
</select>


       

application.properties

server.port = 9090

spring.datasource.url= jdbc:mysql://localhost:3306/sakila
spring.datasource.username = root
spring.datasource.password = password
spring.datasource.dbcp2.test-while-idle= true
spring.datasource.dbcp2.validation-query= select 1

#mybatis entity scan packages
mybatis.type-aliases-package=com.helios.mybatissakila.model
#Mapper.xml location
mybatis.mapper-locations=classpath*:mybatis-sakila/src/main/resources/ActorMapper.xml
mybatis.typeAliasesPackage=com.helios.mybatissakila.model.Actor

logging.level.root=WARN
logging.level.sample.mybatis.mapper=TRACE


我暗示这是错误的,您还能帮我解决这个问题吗? “ classpath”是否只是应该用实际值替换的样板代码?

mybatis.mapper-locations=classpath*:mybatis-sakila/src/main/resources/ActorMapper.xml


注意:我已经设法使用@Annotation样式执行REST API调用,但是我想使用XML样式。

最佳答案

您不需要SqlSession,MyBatis使用其自己的实现,只需要做的就是创建MyBatis配置并设置其所有依赖项。

简而言之,您需要执行以下操作:

创建您的POJO:

public class Dog{
   private Long id;
   private String name;

  //Getters and Setters
}


然后,您需要在Java中创建MyBatis映射器接口:

public interface DogMapper{
   public void insert(Dog dog);
}


然后有DogMapper.xml,您可以在其中放置查询。

最后,您将查询称为:

@Service
public class DogService{
   @Autowired
   private DogMapper dogMapper;

   public void insert(Dog dog){
       dogMapper.insert(dog);
   }
}


这是MyBatis中工作方式的过分简化的方法,但是我建议您看一下MyBatis CRUD示例。将详细描述如何完成任务以及非常重要的配置。

关于mysql - 如何使用RESTFUL API和SpringBoot-MyBatis-MySQL对MySQL数据库进行基本的SELECT FROM调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56219561/

10-12 20:11