[Capstone]ダイナミックテーブルの実装

4061 ワード

📖2022.04.13


1.サークル作成ページにサークルを登録する


2.コミュニティページを作成した後、対応するコミュニティのテーブルを動的に生成します。


1-1サークル登録

public class CircleController {

    @Autowired
    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    private CircleDAO circleDAO;

    @Autowired
    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    private FindDAO findDAO;

    @GetMapping("circle/register/CoCircle")
    public int insertCircle(@RequestBody InputCircleDTO inputCircleDTO
                                                 )throws  Exception{

        FindDTO findDTO = new FindDTO();
        findDTO.setCollege(inputCircleDTO.getCollege());
        findDTO.setInterest(inputCircleDTO.getInterest());
        findDTO.setRegion(inputCircleDTO.getRegion());
        int a = findDAO.findCollegecode(findDTO);
        int b = findDAO.findInterestcode(findDTO);
        final CoCircleDTO param = new CoCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
        circleDAO.createTable(inputCircleDTO.getUrl());
        return circleDAO.insertCoCircle(param);
    }
    @GetMapping("circle/register/UniCircle")
    public int insertUniCircle(@RequestBody InputCircleDTO inputCircleDTO) throws Exception{
        FindDTO findDTO = new FindDTO();
        findDTO.setInterest(inputCircleDTO.getInterest());
        findDTO.setRegion(inputCircleDTO.getRegion());
        int a = findDAO.findInterestcode(findDTO);
        int b = findDAO.findRegioncode(findDTO);
        final UniCircleDTO param = new UniCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
        return circleDAO.insertUniCircle(param);
    }
-->CoCircleとUniCircleの違いは校内サークルか対外連合サークルかです.そのため、料金はほぼ同じですが、環状線は学校、UniCircleは地域を受け入れています
-->InputCircleDTOを作成する新しい理由は、CoCirleDTOの学校値、UniCircleDTOの地域値がint型であるため、InputCircleDTOはまずStringを受信し、メソッド内でint型に変換します.
△正直、これは有効な方法ではないと思いますが、他の方法はまだ分かりません.

2-1サークルが作成したURLから#{url}tbという新しいテーブルを作成

  • index <-- primary key ,auto_increment
  • id <--
  • manage num(会員等級)
  • ユーザーニックネーム(会員ニックネーム)
  • 削除="N"(終了したかどうか)
  • -->[mybatis]mapperは、url名tbという入力されたテーブルをcreate文で実装しようとします.
     <update id="createTable" parameterType="String" >
            CREATE table if not exists ${url}(
                `index` int NOT NULL ,
                `user_id` varchar(45) NULL,
                `manage_num` varchar (45) NULL,
                `user_nickname` varchar (45) NULL,
                `deleted` varchar(1) NULL,
                PRIMARY KEY (`index`))
    
    
        </update>
    最初は#{}の値で受け取り、構文エラーが発生しました.
    #{ }
    値に「」を自動的にアタッチ
    PreparedStatementによる悪意のあるクエリー注入の回避
    ガラス
    主にユーザー入力の転送に使用
    $ { }
    「」は自動的に貼り付けられません
    パラメータはStatement方式で出力して転送する
    意図的なクエリーの注入を阻止できません
    SQL注入セキュリティのリスクがある可能性があります
    主にtable name column名を渡すために使用されます
    #{}、${}差異
    現在のエラーは解決されましたが、SQL注入のセキュリティ上の危険性があります.
    SQL Injectionとは?