Java가 MyBatis 프레임워크를 통해 MySQL 데이터를 삭제하고 수정하는 기본 방법
단일 기록의 조회를 제외하고, 여기에서 우리는 한 조의 기록을 조회해 보려고 한다.
IUserMapper 인터페이스에 다음 방법을 추가합니다.
List<User> getUsers(String name);
사용자xml에 추가:
<resultMap type="User" id="userList"><!-- type -->
<id column="id" property="id" />
<result column="name" property="name" />
<result column="age" property="age" />
<result column="address" property="address" />
</resultMap>
<select id="getUsers" parameterType="string" resultMap="userList"><!-- resultMap User -->
select * from `user` where name like #{name}
</select>
테스트 방법:
@Test
public void queryListTest() {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserMapper mapper = session.getMapper(IUserMapper.class);
List<User> users = mapper.getUsers("%a%"); // % sql 。
for (User user : users) {
log.info("{}: {}", user.getName(), user.getAddress());
}
} finally {
session.close();
}
}
만약 연표 조회가 복합 대상으로 되돌아온다면, association 키워드로 처리해야 합니다.예를 들어 User가 Article을 발표하면 사용자마다 여러 개의 Article을 발표할 수 있는데 그들 사이는 일대다의 관계이다.
(1) Article 테이블을 만들고 테스트 데이터를 삽입합니다.
-- Drop the table if exists
DROP TABLE IF EXISTS `Article`;
-- Create a table named 'Article'
CREATE TABLE `Article` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- Add several test records
INSERT INTO `article`
VALUES
('1', '1', 'title1', 'content1'),
('2', '1', 'title2', 'content2'),
('3', '1', 'title3', 'content3'),
('4', '1', 'title4', 'content4');
(2) com.john.hbatis.model.Article 클래스:
public class Article {
private int id;
private User user;
private String title;
private String content;
// Getters and setters are omitted
}
(3) IUserMapper에 추가:
List<Article> getArticlesByUserId(int id);
(4) User에 있습니다.xml에 추가:
<resultMap type="com.john.hbatis.model.Article" id="articleList">
<id column="a_id" property="id" />
<result column="title" property="title" />
<result column="content" property="content" />
<association property="user" javaType="User"><!-- user User -->
<id column="id" property="id" />
<result column="name" property="name" />
<result column="address" property="address" />
</association>
</resultMap>
<select id="getArticlesByUserId" parameterType="int" resultMap="articleList">
select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content
from article a
inner join user u
on a.user_id=u.id and u.id=#{id}
</select>
(5) 테스트 방법:
@Test
public void getArticlesByUserIdTest() {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserMapper mapper = session.getMapper(IUserMapper.class);
List<Article> articles = mapper.getArticlesByUserId(1);
for (Article article : articles) {
log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName());
}
} finally {
session.close();
}
}
첨부:association 탭에서 필드와 속성의 맵을 정의하는 것 외에 User의resultMap을 다시 사용할 수 있습니다:
<association property="user" javaType="User" resultMap="userList" />
2. 신규IUserMapper 인터페이스에 다음 방법을 추가합니다.
int addUser(User user);
User.xml 추가:
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"><!-- useGeneratedKeys myBatis , keyProperty 。 , -->
insert into user(name,age,address) values(#{name},#{age},#{address})
</insert>
테스트 방법:
@Test
public void addUserTest() {
User user = new User("Lucy", 102, "Happy District");
SqlSession session = sqlSessionFactory.openSession();
try {
IUserMapper mapper = session.getMapper(IUserMapper.class);
int affectedCount = mapper.addUser(user);
session.commit(); // 。 session.getConnection().getAutoCommit()
log.info("{} new record was inserted successfully whose id: {}", affectedCount, user.getId());
} finally {
session.close();
}
}
3. 업데이트인터페이스 추가 방법:
int updateUser(User user);
User.xml 추가:
<update id="updateUser" parameterType="User">
update `user` set name=#{name}, age=#{age}, address=#{address}
where id=#{id}
</update>
테스트 방법:
@Test
public void updateUserTest() {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserMapper mapper = session.getMapper(IUserMapper.class);
User user = mapper.getUserById(8);
user.setAddress("Satisfied District");
int affectedCount = mapper.updateUser(user); // ,user , (null 0 ), , 。 。
log.info("Affected count: {}", affectedCount);
session.commit();
} finally {
session.close();
}
}
4. 삭제인터페이스 추가 방법:
int deleteUser(int id);
User.xml 추가:
<delete id="deleteUser" parameterType="int">
delete from `user` where id=#{id}
</delete>
테스트 방법:
@Test
public void deleteUserTest() {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserMapper mapper = session.getMapper(IUserMapper.class);
int affectedCount = mapper.deleteUser(8);
log.info("Affected count: {}", affectedCount);
session.commit();
} finally {
session.close();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.