如何使用Springboot-Mybatis-Mysql从呼叫中进行基本选择的MySQL数据库



问题非常简单。我想使用上述工具从呼叫到我的MySQL数据库中进行基本选择 *。我将使用XML风格的映射器mybatis config

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

@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.unsatistieddependentyencypection: 使用文件中定义的名称" actormapper"创建bean的错误 [/Users/helios/documents/workspace-sts-3.9.8.release/mybatis-sakila/target/classes/classes/com/helios/mybatissakila/mybatissakila/mappers/mappers/actormapper.class.class]:: 通过Bean属性表达的不满意的依赖性 " sqlsessionfactory";嵌套异常是 org.springframework.beans.factory.beancreationexception:错误 使用class路径中定义的名称" sqlsessionfactory"创建bean 资源 [org/mybatis/spring/boot/autoconfigure/mybatisautoconfiguration.class]: 通过工厂方法实例化的豆类实例化失败;嵌套异常是 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] 无法打开,因为它不存在

这些是我的相关文件:

Actor.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

NOTE :我已经设法使用@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示例来看。将有详细的描述如何使事情完成,并且还会有非常重要的配置。

好吧,这就是我修复的方式:

我确实怀疑, classPath 是使这项工作的主要因素。一旦我在 application.properties 中提供了正确的路径:

mybatis.mapper-locations=classpath:/mybatis-mapper/ActorMapper.xml

我能够从MySQL进行选择。这不是很有趣吗?:(

最新更新