728x90
프리마(Prisma)는 JavaScript 및 TypeScript 애플리케이션에서 데이터베이스와 상호작용하는 강력한 ORM(Object-Relational Mapping) 도구입니다. 프리마를 JavaScript에서 사용하는 기본적인 코드 작성 과정을 아래와 같이 설명할게요.
1. Prisma 설치
먼저 프로젝트에서 Prisma를 설치해야 합니다.
npm install prisma --save-dev
npm install @prisma/client
2. Prisma 초기화
Prisma를 초기화하면 prisma/schema.prisma 파일이 생성됩니다.
npx prisma init
이 명령은 prisma 디렉토리와 함께 기본 구성 파일을 만듭니다. schema.prisma에서 데이터베이스를 설정할 수 있습니다.
예를 들어, SQLite를 사용할 경우:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
}
3. Prisma Client 생성
스키마 변경사항을 반영하려면 Prisma Client를 생성해야 합니다.
npx prisma generate
4. 마이그레이션 적용
마이그레이션을 통해 데이터베이스에 테이블 구조를 반영합니다.
npx prisma migrate dev --name init
5. Prisma Client 사용
Prisma Client를 사용해 데이터베이스와 상호작용합니다.
예제: index.js
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function main() {
// 새로운 사용자 생성
const newUser = await prisma.user.create({
data: {
name: 'John Doe',
email: 'john.doe@example.com',
},
});
console.log('Created user:', newUser);
// 사용자 목록 가져오기
const allUsers = await prisma.user.findMany();
console.log('All users:', allUsers);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
6. Prisma Client 쿼리 사용 예제
1) 데이터 삽입
await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@example.com',
},
});
2) 데이터 조회
const users = await prisma.user.findMany();
console.log(users);
3) 데이터 업데이트
await prisma.user.update({
where: { email: 'alice@example.com' },
data: { name: 'Alice Wonderland' },
});
4) 데이터 삭제
await prisma.user.delete({
where: { email: 'alice@example.com' },
});
값의 일부분만 일치
1. 앞에서부터 일치 : startsWith
'string%'
2. 중간에 일치 : contains
'%string%'
3. 끝에서 일치 : endsWith
'%string'
부분 문자열 검색과 lte의 차이점
- lte: 문자열의 사전 순서를 기준으로 비교.
- 예: "chon" <= "Seoul, Sinchon" → false
- 예: "chon" <= "chon" → true
- contains: 문자열에 해당 부분 문자열이 포함되는지 확인.
- 예: "Seoul, Sinchon".contains("chon") → true
prisma 에서 부분 일치하는 값으로 where조건 사용하기
where: {
menu: {
some: {
menuName: {
contains: nameKeyword, // 검색어
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
},
},
prisma 에서 다수의 where조건 사용하기
where: {
menu: {
some: {
OR: [
{
menuName: {
contains: menuKeyword, // 메뉴 이름에 검색어 포함
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
{
content: {
contains: menuKeyword, // 메뉴 소개에 검색어 포함
mode: 'insensitive', // 대소문자 구분하지 않음
},
},
],
},
},
},
url 쿼리 사용하기
const { type } = req.query; // 쿼리
복수 쿼리 사용
// URL 예시
// GET http://localhost:3000/api/restaurants/search?search=맛있는&type=name
// GET http://localhost:3000/api/restaurants/search?search=짜장&type=menu
// GET http://localhost:3000/api/restaurants/search?search=중국집
// getRestaurants.routes.js
// 매장 검색 (이름, 메뉴 포함)
// (쿼리 파라미터 타입 search(종합검색), name(상호명), menu(메뉴,설명명) 사용)
router.get('/search', GetRestaurantsController.searchRestaurants);
// getRestaurants.controller.js
// 매장검색
searchRestaurants = async (req, res) => {
console.log('Controller searchRestaurants');
try {
const { search, type } = req.query; // 쿼리 파라미터로 전달된 search, type 값
if (!search) {
return res.status(400).json({ message: '검색어를 입력해 주세요.' });
}
// 검색 타입에 따른 분기 처리
let restaurants;
if (type === 'name') {
restaurants = await this.#service.searchRestaurantsByName(search);
} else if (type === 'menu') {
restaurants = await this.#service.searchRestaurantsByMenu(search);
} else {
restaurants = await this.#service.searchRestaurantsByNameMenu(search);
}
if (!restaurants || restaurants.length === 0) {
return res
.status(404)
.json({ message: '일치하는 매장 정보가 존재하지 않습니다.' });
}
return res.status(200).json(restaurants);
} catch (error) {
console.error('Error in searchRestaurants:', error);
return res.status(500).json({ message: '서버에 문제가 발생했습니다.' });
}
};
'내일배움 정리 > JS 문법 공부' 카테고리의 다른 글
문자열 메서드 (0) | 2024.12.19 |
---|---|
정규식 테스트 (1) | 2024.12.17 |
(작성중)구조 분해할당 : 여러 변수를 한번에 할당하기 (0) | 2024.12.03 |
화살표함수(작성중) (0) | 2024.12.03 |
형변환, 숫자의 진법변환 (0) | 2024.12.03 |