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>
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); } }
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!