Rumah >Java >javaTutorial >Apakah masalah yang mungkin dihadapi apabila SpringBoot menyepadukan MyBatis?

Apakah masalah yang mungkin dihadapi apabila SpringBoot menyepadukan MyBatis?

WBOY
WBOYke hadapan
2023-05-17 20:43:041422semak imbas

Cuba untuk tidak menggunakan ujian unit yang disediakan oleh jUnit

Buat permintaan dan cuba gunakan kelas ujian yang disediakan oleh SpringBoot untuk ujian, yang boleh mengimbas komponen secara automatik dan menggunakan objek kacang dalam bekas

Dan jika jika terdapat objek yang disuntik dalam komponen, maka komponen ini mesti dikeluarkan dari bekas SpringBoot dan kemudian fungsi objek yang disuntik boleh digunakan! ! !

Terdapat ralat hari ini dan saya mengambil masa yang lama untuk menyelesaikannya Akhirnya, saya mendapati bahawa ia adalah ralat yang sangat rendah dan asas!

Ini ialah antara muka pemeta menggunakan @mapper adalah sama dengan mendaftarkan objek proksi antara muka ke dalam kacang, tetapi ia tidak boleh ditemui dalam konteks (sebenarnya ia adalah perkara biasa)

Kerana. anotasi @Mapper ialah Mybatis yang disediakan, dan anotasi @Autowried disediakan oleh Spring IDEA boleh memahami konteks Spring, tetapi ia tidak berkaitan dengan Mybatis. Dan kita boleh lihat daripada kod sumber @Autowried bahawa secara lalai, @Autowried memerlukan objek bergantung mesti wujud, jadi IDEA hanya boleh memberikan amaran merah pada masa ini.

package com.bit.mapper;
import com.bit.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {
    User selectById(@Param("userid") Integer id);
}

Ini ialah fail xml yang sepadan dengan antara muka pemeta, dan tiada masalah

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bit.mapper.UserMapper">
        <select id="selectById" resultType="com.bit.pojo.User">
            select * from users where id = #{userid}
        </select>
</mapper>

Tambahkan fail xml dalam direktori java pada sumber sumber dan sarangkannya dalam binaan. teg. Juga tiada masalah. , terus kata tak boleh disuntik selalu fikir ada Masalah (tapi akhirnya didapati tiada masalah)

Saya habis menulis. kelas pelaksanaan perkhidmatan, dan tidak ada masalah

<resources>    
    <resource>        
        <directory>src/main/java</directory>        
        <includes>            
            <include>**/*.xml</include>        
        </includes>    
    </resource>
</resources>
Apakah masalah yang mungkin dihadapi apabila SpringBoot menyepadukan MyBatis?Kemudian saya pergi untuk mengujinya secara langsung, saya mengujinya Kain bulu?

Instantiate UserService, cipta objek baharu, dan kemudian panggil kaedah terus untuk melihat sama ada UserMapper boleh dipanggil untuk menanyakan pangkalan data. Kemudian saya terus mendapat ralat pengecualian penunjuk nol

package com.bit.service;
import com.bit.mapper.UserMapper;
import com.bit.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserMapper userMapper;
    @Override
    public User queryById(Integer id) {
        System.out.println("进入了service");
        return userMapper.selectById(id);
    }
}

  Selepas beberapa jam, saya menjumpai jawapan dalam blog orang lain

Apakah masalah yang mungkin dihadapi apabila SpringBoot menyepadukan MyBatis?  UserMapper kami disuntik ke dalam UserServiceImpl, Kami tidak boleh menggunakan UserServcieIml secara langsung Jika kami menggunakan fungsinya dalam kelas lain, kami mesti menyuntik kelas ini ke dalam kelas semasa dan dapatkan UserService daripada bekas sebelum kita boleh memanggilnya dengan betul tanpa pengecualian penuding nol Saya selalu Tidak dijumpai, ini adalah ralat peringkat rendah.

Pendekatan yang betul: mula-mula himpunkannya ke dalam objek semasa, dan kemudian dapatkan kacang dari bekas untuk digunakan

@SpringBootTest
class BitApplicationTests {
    @Test
    void contextLoads() {
        UserService userService = new UserServiceImpl();
        userService.queryById(13);
        System.out.println(userService);
        System.out.println(userService.queryById(15));
        System.out.println(userService.queryById(13));
    }
}

Atas ialah kandungan terperinci Apakah masalah yang mungkin dihadapi apabila SpringBoot menyepadukan MyBatis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam