SpringBoot-16-之整合MyBatis-xml篇+單元測試

mpsky發表於2021-09-09
0.專案結構
java
    dao    |---SwordDao
    entity
    |---Sword
resources
    mapper    |---Sword.xml
    application.yml

1.application.yml
#坑點0 配置mybatis的xml位置mybatis:
  mapper-locations: classpath:mapper/*.xml
2.新建dao資料夾,新建dao介面:SwordDao.java
public interface SwordDao {

    List<Sword> findALL();

    Sword findByName(@Param("name") String name);    //坑點1 java沒有儲存形參的記錄,所以多引數使用者@Param("name")起名字,不然無法識別
    int insert(@Param("name") String name,
                @Param("atk") Integer atk,
                @Param("hit") Integer hit,
                @Param("crit") Integer crit,
                @Param("attr_id") Integer attr_id,
                @Param("type_id") Integer type_id
    );
}
3.在resources下新建mapper資料夾,再建Sword.xml檔案,為dao層提供SQL語句
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        ""><!--坑點2:名稱空間指向對應dao類名--><mapper namespace="com.toly1994.toly_mybatis.dao.SwordDao">
    <!--坑點3:id為dao中相應方法名-->
    <insert id="insert">
      insert into sword(name,atk,hit,crit,attr_id,type_id)
      values (#{name},#{atk},#{hit},#{crit},#{attr_id},#{type_id})    </insert>
    <!--坑點4:返回實體或實體集合時 resultType 指向對應實體類名-->
    <select id="findByName" resultType="com.toly1994.toly_mybatis.entity.Sword">
        SELECT*FROM sword WHERE NAME=#{name}    </select>

    <select id="findALL" resultType="com.toly1994.toly_mybatis.entity.Sword">
        SELECT*FROM sword    </select></mapper>
4.將dao新增掃包範圍:com.toly1994.toly_mybatis.TolyMybatisApplication
//坑點5:將dao新增掃包範圍@MapperScan(basePackages = {"com.toly1994.toly_mybatis.mapper","com.toly1994.toly_mybatis.dao"})

5.單元測試:test資料夾下
com.toly1994.toly_mybatis.dao.SwordDaoTest
@RunWith(SpringRunner.class)@SpringBootTestpublic class SwordDaoTest {    @Autowired
    private SwordDao mSwordDao;    @Test
    public void findALL() {
        List<Sword> all = mSwordDao.findALL();
        System.out.println(all.get(5));//Sword(id=6, name=風躍, atk=9020, hit=10, crit=10, attr_id=2, type_id=2)
    }    @Test
    public void findByName() {
        Sword 赤凰 = mSwordDao.findByName("赤凰");
        System.out.println(赤凰);//Sword(id=13, name=赤凰, atk=0, hit=100, crit=5, attr_id=1, type_id=2)
    }    @Test
    public void insert() {        int insert = mSwordDao.insert("尤恨", 4000, 100, 100, 1, 1);
        System.out.println(insert);//1
    }
}

6.聯合查詢:可能會疑惑attr_id和type_id是幹嘛的,其實是兩張關聯表

圖片描述

聯合查詢.png

修改實體類兩個欄位:
@Data//=@Getter +@Setterpublic class Sword {    private Integer id;    private String name;    private Integer atk;    private Integer hit;    private Integer crit;    private String type_name;//改為String
    private String attr;//改為String}
修改查詢所有的SQL語句
    <select id="findALL" resultType="com.toly1994.toly_mybatis.entity.Sword">
       SELECT id,name,atk,hit,crit,type_name,attr FROM sword AS s
      INNER JOIN sword_type AS t ON s.type_id = t.type_id
      INNER JOIN sword_attr AS a ON s.attr_id = a.attr_id;
    </select>
測試:可見兩張表和主表連在一起了
    @Test
    public void findALL() {
        List<Sword> all = mSwordDao.findALL();
        System.out.println(all.get(5));        //Sword(id=6, name=風躍, atk=9020, hit=10, crit=10, type_name=仙界, attr=木)
    }



作者:張風捷特烈
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1806/viewspace-2821052/,如需轉載,請註明出處,否則將追究法律責任。

相關文章