添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
茫然的键盘  ·  [转]string, char*, ...·  1 年前    · 
光明磊落的茶壶  ·  “Google ...·  1 年前    · 
逃跑的骆驼  ·  血书(电影) - 知乎·  1 年前    · 
考研的猕猴桃  ·  <img ...·  1 年前    · 
1
2

More than 1 year has passed since last update.

SpringBoot Mybatis マッピング方法

Last updated at Posted at 2021-09-13
ディレクトリをそろえる
ShoppingListService.java
package com.example.householdAccountBook.application.service;
//import 省略
@Service
public class ShoppingListService {
    @Autowired
    ShoppingListMapper shoppingListMapper;
    //買い物リスト全件表示
    public List<ShoppingList>findAll(){
        return this.shoppingListMapper.showShoppingList();
ShoppingListMapper.java
package com.example.householdAccountBook.domain.repository;
import com.example.householdAccountBook.domain.entity.ShoppingList;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ShoppingListMapper {
    List<ShoppingList> showShoppingList();
  void insertShoppingList(ShoppingList shoppinglist)
    void deleteShoppingList(ShoppingList shoppinglist)
<?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="マッピングするjavaクラスの場所">
        SELECT
            A.history_id,
            CASE WHEN DATE_ADD(A.lasttime_housework_date, INTERVAL(B.interval_day)DAY) = CURRENT_DATE() THEN "本日"
                WHEN DATE_ADD(A.lasttime_housework_date, INTERVAL(B.interval_day)DAY) <![CDATA[ < ]]> CURRENT_DATE() THEN "超過"
                WHEN DATE_ADD(A.lasttime_housework_date, INTERVAL(B.interval_day)DAY) <![CDATA[ > ]]> CURRENT_DATE() THEN ""
            END AS nexttime_schedule_label,
            C.category_name,
            B.housework_name,
            DATE_ADD(A.lasttime_housework_date, INTERVAL(B.interval_day)DAY) AS nexttime_houosework_date,
            DATEDIFF(CURRENT_DATE,DATE_ADD(A.lasttime_housework_date, INTERVAL(B.interval_day)DAY))*-1 AS nexttime_schedule_numerical,
            D.user_name AS lasttime_user
            housework_history AS A 
            INNER JOIN housework_works AS B 
                ON A.works_id = B.works_id 
            INNER JOIN housework_category AS C 
                ON B.category_id = C.category_id 
            INNER JOIN housework_users AS D 
                ON A.user_id = D.user_id
        WHERE 
            A.history_id=#{historyId};
    <insert id="insertShoppingList">
        INSERT INTO ShoppingList(
          place,
          category,
          itemName,
          created_at,
          updated_at
        ) value (
          #{place},
          #{category},
          #{itemName},
          now(),
          now(),
    </insert> 
    <delete id="deleteShoppingList">
    DELETE FROM shopping WHERE id = #{id}
    </delete>
</mapper>
mapper namespace
マッピングするjavaクラスの場所
com.example.householdAccountBook.domain.repository.ShoppingListMapper
resultType
結果を詰める箱
com.example.householdAccountBook.domain.entity.ShoppingList
MyBatisで不当式を書く場合は右記のようにする。
<![CDATA[ < ]]>
<![CDATA[ > ]]> #{変数名} #{historyId} org.apache.ibatis.binding.BindingException: Parameter 'worksId' not found. Available parameters are [arg3, arg2, param5, arg4, arg1, arg0, param3, param4, param1, param2] 引数が2つ以上の場合は@Paramが必要 うまくいかない時 戻り値の注意点

例えばSQLでSELECTで抽出したIDなどの数値を戻したい場合でも、戻り値の型をInteger等にするとキャストエラーになる。戻り値は、xmlファイルのresultTypeで指定したEntityクラスの型にしないといけない。(下の例ではHouseworkList型)
下の例ではSELECTで抽出したcategoryIDはあくまでHouseworkListクラスのメンバー変数へ入るので、
戻り値の型はHouseworkList型にして、getter等で取り出して使用する必要がある。
class com.example.householdAccountBook.entity.HouseworkList cannot be cast to class java.lang.Integer HouseworkListをIntegerにキャストできない。 org.apache.ibatis.builder.BuilderException:
Wrong namespace. Expected 'com.example.demo.mapper.Demomapper' but found 'com.example.demo.mapper.DemoMapper'. xmlファイルのネームスペースにはDemoMapperと指定しているが、ファイル名がDemomapperになっている

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2