MyBatis로 연구 노트 --02 (갱신)


작업을 추가 (1)


1.1 UserMapper 새로운 인터페이스 insertUser()방법

public interface UserMapper {
    /**
     * 查询所有用户
     *
     * @return
     */
    List<User> listAllUsers();

    /**
     * 添加用户
     * @param user
     * @return 成功返回1,失败返回0
     */
    int insertUser(User user);
}

1.2 매퍼 매핑 파일 UserMapper.xml구성 추가 작업

<?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="cn.ykf.mapper.UserMapper">
    <!-- 配置查询所有用户 -->
    <select id="listAllUsers" resultType="cn.ykf.pojo.User">
        SELECT * FROM user
    </select>
    <!-- 添加用户 -->
    <insert id="insertUser" parameterType="cn.ykf.pojo.User">
        INSERT INTO user(username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>
    • 매핑 파일의 준비, 당신은 SQL 문은 MySQL 클라이언트에서 실행 할 수 있습니다 쓸 수 있습니다, 다음 매핑 파일로 전송하고, 원래의 매개 변수는 실제 매개 변수 기호 MyBatis로 대체됩니다
  • parameterType이 정규화 된 이름 또는이 문 클래스에 전달 된 매개 변수의 별칭을 것이라고 말했다.
  • 상기 파라미터 기호 #{username}, #{birthday}, #{birthday}, #{sex}, #{address}각 대응 사용자 클래스의 속성 이름이해야합니다, 낙서 없습니다.
    • 속성 이름은 엔티티 클래스 getXxx()/setXxx()Xxx멤버 변수와 속성을 동일시 할 수없는, 몇 가지 경우가 멤버 변수 이름이없는 있으며, 대부분의 경우 멤버 변수의 이름입니다, 일부.
  • 구성 파일에 대한 지침, 당신은 문서의 공식 웹 사이트를 볼 수 있습니다 MyBatis로 XML 매핑 파일을

1.3 테스트 추가 작업

public class MybatisTest {

    private InputStream is;
    private SqlSession sqlSession;
    private UserMapper mapper;

    /**
     * 测试之前执行,用于初始化
     */
    @Before
    public void init() throws Exception {
        // 1. 读取配置文件
        is = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(is);
        // 3. 获取SqlSession对象
        sqlSession = factory.openSession();
        // 4. 使用SqlSession创建Mapper的代理对象
        mapper = sqlSession.getMapper(UserMapper.class);
    }

    /**
     * 测试结束执行,用于提交事务和释放资源
     */
    @After
    public void destory() throws Exception {
        // 6. 提交事务
        sqlSession.commit();
        // 7. 释放资源
        sqlSession.close();
        is.close();
    }

    /**
     * 测试添加用户
     */
    @Test
    public void testInsertUser() {
        User user = new User();
        user.setUsername("鱼开饭");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("广东");

        // 调用mapper完成添加
        int count = mapper.insertUser(user);
        System.out.println("添加条数为 : " + count);
    }
}
  • 경우, 여기에서 주목해야 할 한 가지 destory()방법은 통과하지 않는 sqlSession.commit();트랜잭션을 커밋 한 후, 레코드를 추가는 데이터베이스에 기록되지 않습니다.
  • 우리가 전화를하기 때문에 openSession()자동으로 트랜잭션을 커밋로 설정되지 않은 최종 트랜잭션은 자동으로 데이터베이스에 기록되지 않은 기록을 결과로 롤백됩니다. 아래를 참조하십시오
    롤백 작업을 추가
  • openSession()자동, 만 트랜잭션 커밋 할 필요가 그렇다면, 아래 그림과 같이 오버로드 된 메서드 factory.openSession(true);할 수 있습니다.
    OpenSession에 () 오버로드

1.4 테스트 결과

연산 결과가 추가


2. 삭제 작업

2.1 UserMapper 새로운 인터페이스 deleteUserById()방법

/**
 * 根据id删除用户
 *
 * @param userId
 * @return 成功返回1,失败返回0
 */
int deleteUserById(Integer userId);

2.2 매퍼 매핑 파일 UserMapper.xml구성 삭제 작업

<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
    DELETE FROM user WHERE id = #{uid}
</delete>
  • 참고로 두 지점이 있습니다!
  • 파라미터가 기본 타입 또는 원시 래퍼 클래스, 오직 하나 개의 파라미터 인 경우 먼저, 파라미터 쉽게 심볼을 작성할 수있다. 방법 매퍼 인터페이스 선언하지만 즉, int deleteUserById(Integer userId)하지만 매핑 파일 중 하나를 쓰기는 할 수 있습니다 #{userId}, 당신은 쓸 수 있습니다 #{aaaa}.
  • 둘째, parameterType쓰기 int, INT, INTEGER, integer, java.lang.Integer모두 OK.

2.3 테스트 삭제

/**
 * 测试删除用户
 */
@Test
public void testDeleteUserById(){
    // 这里传的id为自己数据库中存在的id值
    int count = mapper.deleteUserById(50);
    System.out.println("删除条数为 : " + count);
}

2.4 테스트 결과

삭제 작업 결과


3. 수정 작업

3.1 UserMapper 새로운 인터페이스 updateUser방법

/**
 * 修改用户
 * @param user
 * @return 成功返回1,失败返回0
 */
int updateUser(User user);

3.2 매퍼 매핑 파일의 UserMapper.xml구성 수정 작업

<!-- 修改用户 -->
<update id="updateUser" parameterType="cn.ykf.pojo.User">
    UPDATE user SET username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} WHERE id = #{id}
</update>

3.3 테스트 수정 작업

/**
 * 测试修改用户
 */
@Test
public void testUpdateUser() {
    // 因为还没有编写根据id查询用户,所以模拟数据
    User user = new User();
    user.setUsername("update");
    user.setAddress("test");
    user.setSex("女");
    user.setBirthday(new Date());
    // id 为自己数据库中存在的值
    user.setId(49);

    // 执行修改
    int count = mapper.updateUser(user);
    System.out.println("修改条数为 : " + count);
}

3.4 테스트 결과

작업의 결과를 수정


출시 사 원저 · 원 찬양 2 · 조회수 110

추천

출처blog.csdn.net/a1092882580/article/details/104092319