Java가 MyBatis 프레임워크를 통해 MySQL 데이터를 삭제하고 수정하는 기본 방법

7161 단어 JavaMyBatisMySQL
1. 조회
단일 기록의 조회를 제외하고, 여기에서 우리는 한 조의 기록을 조회해 보려고 한다.
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(); 
  } 
} 


좋은 웹페이지 즐겨찾기