MyBatis로의 MyBatis 연구 노트 02_ 건축 환경

MyBatis로 작업 환경을 구축

  • 프로그램 개발에 손을-얻기 MyBatis로
  • 데이터 개입 층 (DAO) 종래 쓰기
  • MyBatis로 단순화 프록시 데이터 동적 인터랙션 층 (DAO) 문구를 사용

셋업 및 테스트 절차를 얻기

개발 단계 : 항아리 패키지, 빌드 로그 출력 환경, 데이터베이스 연결 풀 구성의 도입에 따라 프로젝트를 만듭니다 계층 지속성 자바 객체를 생성, 쓰기 매퍼 구성 파일 및 테스트 클래스를 만들 수 있습니다.

데이터베이스 준비

SQL 문을 다음과 같이되어 해당하는 테이블을 만듭니다

-- 创建数据库
CREATE DATABASE mybatis;
-- 使用创建的mybatis数据库
USE mybatis;
-- 创建表user
DROP TABLE IF EXISTS user;
CREATE TABLE user (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) DEFAULT NULL,
    password VARCHAR(20) DEFAULT NULL,
    gender VARCHAR(5) DEFAULT NULL,
    email VARCHAR(50) DEFAULT NULL,
    province VARCHAR(20) DEFAULT NULL,
    city VARCHAR(20) DEFAULT NULL,
    birthday DATE DEFAULT NULL
);
-- 插入测试数据
INSERT INTO 
    user(id,username,password,gender,email,province,city,birthday)
VALUES
    (1,'张三','1111','男','[email protected]','河南省','郑州市','1991-04-23'),
    (2,'李四','2222','男','[email protected]','河北省','邯郸市','1989-10-13'),
    (3,'刘丽','3333','女','[email protected]','江苏省','苏州市','1994-06-09'),
    (4,'李丽','4444','女','[email protected]','四川省','成都市','1992-11-07');

환경 공학 구조

MyBatis로-3.4.1-항아리, 외부뿐만 아니라하기의 기본 프로그램 구조, 최종 MyBatis로 항아리 패키지 등을 다른 의존의 MyBatis 항아리 패키지를 준비하고, 운전 접속 데이터베이스를 제공 할 준비가, 로그 출력 환경을 만들 수로 사용의 MyBatis 핵심 항아리 패키지 도표 :

프로그램 구조

데이터베이스 연결 풀 구성 파일

MyBatis로-config.xml의 구성 파일에서 의 환경 설정 정보는 환경 라벨에 배치되고, 라벨 환경은 여러 개의 라벨 단일 데이터베이스 환경에 대응하는 별도의 환경 설정에서 각각의 레이블을 허용한다. 의 transactionManager 트랜잭션 관리 태그 유형 구성이, 데이터 소스 태그 속성 태그의 복수 연결 정보 데이터베이스에 배치되고, 구동 드라이버는 데이터베이스, 주소 데이터베이스 연결 URL, 데이터베이스 사용자 이름 사용자 이름과 암호 데이터베이스 암호를 구성 할 수 있습니다.

간단한 MyBatis로-config.xml의 구성 파일은 다음과 같습니다 :

<?xml version="1.0" encoding="UTF-8"?>
<!--头部约束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--数据源配置-->
    <environments default="mysql">
        <!--数据库配置的具体信息-->
        <environment id="mysql">
            <!--配置事务管理类型-->
            <transactionManager type="JDBC"/>
            <!--配置连接池信息-->
            <dataSource type="POOLED">
                <!--配置数据库的驱动、连接地址、用户名和密码-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="MARTIN0319"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

쓰기 SQL 맵핑 구성 파일

MyBatis로에서, 아니 직접 링크와 함께 자바 클래스와 SQL 문이, 거의 모든 SQL 문은 MyBatis로 운영되는 과정에서, 매퍼 매핑 파일에 구성되어, SQL 문, 매개 변수의 입력과 출력의 구성을 읽고 입력합니다. 다음으로, 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="userTest">
    <select id="findUserById" parameterType="integer" resultType="com.martin.domain.User">
        select 
            id,username,password, gender,email,province,city,birthday
        from 
            user 
        where 
            id = #{id}
    </select>
</mapper>

우리는 선택 태그에 다음과 같은 속성이 있습니다

  • ID : SQL 문, mappedStatement는 해당 SQL의 검색을 위해 객체를 캡슐화 파싱 이드가 개발 SQL 문에 대한 고유 식별자, 고유 식별자를 요구한다;
  • parameterType은 상기 입력 파라미터 유형, 정수형의 입력 파라미터에 지정된 타입의 예를 지정한다;
  • resultType : 지정 출력 매개 변수의 유형, 사용자 지정된 출력 자바 객체에 매핑 된 경우;
  • #는 {}, 플레이스 홀더를 표시 입력 파라미터는 다음 임의의 값일 수있는 값 #} {자바 기본 데이터 타입 인 경우 ;

UserMapper.xml 파일을 해결할 수있는 클래스를로드 MyBatis로 리소스 파일을 수 있도록하기 위해, SQL 매핑 파일을 작성 후에서의 MyBatis-config.xml 파일의 파일 경로 UserMapper.xml를 구성해야합니다.

<mappers>
    <mapper resource="com/martin/mapper/UserMapper.xml"/>
</mappers>

쓰기 엔티티 클래스와 테스트 클래스

세 가지 범주, 즉 영속 엔티티 클래스, 데이터베이스 상호 작용 클래스 (GET SQLSESSION) 테스트 객체와 클래스를 작성해야합니다.

영구 엔티티 클래스 - 사용자

데이터베이스 테이블에서 엔티티 클래스 멤버 변수는 필드에 최선을 해당합니다. 클래스 속성을 얻고 설정하는 세터와 게터 방법의 사용을 필요로한다.

사용자 엔티티 클래스 :

package com.martin.domain;

import java.util.Date;

public class User {

    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String email;
    private String province;
    private String city;
    private Date birthday;
    /*
    setter、getter和toString方法略
    */
}

데이터베이스 상호 작용 클래스 (GET SQLSESSION 객체)

데이터베이스 상호 작용 클래스는, 클래스를로드 할 리소스 파일은 구성 파일 데이터베이스 연결 풀, 다음 SqlSessionFactory는 데이터베이스 연결을 읽고 데이터 매핑 데이터베이스와 상호 작용할 수있는 SQLSESSION 개체를 만들 매퍼 규칙.

대화 형 데이터베이스 도구 - DataConnection.java

package com.martin.datasource;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DataConnection {

    private static String RESOURCE = "mybatis-config.xml";
    private static SqlSessionFactory SESSIONFACTORY;
    private static SqlSession SESSION;
    
    public static SqlSession getSqlSession() throws IOException {
        InputStream  input = Resources.getResourceAsStream(RESOURCE);
        SESSIONFACTORY = new SqlSessionFactoryBuilder().build(input);
        SESSION = SESSIONFACTORY.openSession();
        return SESSION;
    }
}

DataConnection 클래스에서 자원 자원 로딩 클래스 로더의 MyBatis-config.xml의 구성 파일 SQLSESSION 개체를 얻을 수 OpenSession에 방법의 SqlSessionFactory는 호출 후 세션 공장 SqlSessionFactory는 개체를 얻을 수있다.

쓰기 테스트 클래스 - UserTest

사용자 정보 (1)의 데이터베이스 ID에서 제거 할 필요가 쓰기 테스트 클래스 :

package com.martin.test;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.martin.datasource.DataConnection;
import com.martin.domain.User;

public class UserTest {
    // 测试查找指定id的用户信息
    @Test
    public void testFindUserById() throws IOException {
        SqlSession session  = DataConnection.getSqlSession();
        User user = session.selectOne("userTest.findUserById", 1);
        System.out.println(user);
        // 提交事务和关闭session
        session.commit();
        session.close();
    }
}

testFindUserById 방법에있어서 :

  1. SQLSESSION DataConnection 클래스를 획득하여 객체 클래스;
  2. selectOne 메서드 방법은 SQLSESSION 클래스, 두 개의 인수로이 메소드를 호출
    1. 첫 번째 매개 변수는 SQL 문을 추가 아이디에 해당하는 네임 스페이스 UserMapper.xml SQL 매핑 파일입니다;
    2. 두 번째 파라미터는 상기 파라미터 맵 파일 SQL 명령문의 값에 대응하는 매개 변수이고;

이 경우, SQL 문 및 매개 변수의 유형을 표시하는 콘솔은, 수행, 1에 사용자 ID에 대한 쿼리 정보를 출력.

데이터 입력 절차를 작동

하나의 데이터 수집을 달성하기보다도, 어떻게 여러 데이터와 운영에 데이터 추가 및 삭제의 구현을 조회 할 수 있습니다.

퍼지 쿼리 - selectList의

쿼리에 사용자의 이름으로 단어를 매칭하여 데이터베이스 퍼지 쿼리의 사용자 테이블 :

첫 번째는 SQL 문을 매핑 UserMapper.xml 구성 파일을 구성합니다

<select id="findUserByUsername" parameterType="string" resultType="com.martin.domain.User">
    select 
        id,username,password, gender,email,province,city,birthday 
    from 
        user 
    where 
        username like '%${value}%'
</select>

어떤 여전히 구문 분석 및 SQL ID를 문으로 변환되는 ID 매핑 파일을 나타내는, parameterType 유형 문자열의 SQL 입력 매개 변수를 지정하고, 지정은 결과 유형은 resultType 자바 빈즈는 사용자 지정됩니다.

상징 SQL에 스플 라이스 SQL 문을 나타냅니다 "$}은 {"태그를 선택합니다. SQL 문에있는 접합하지 않고 매개 변수의 변경 내용을 수신은 "$는 {}"단지 대표 값의 매개 변수를 사용할 수 있습니다. "$ {}"사용할 수 있습니다 [ "%"# {값} " %" ] 대신에, 괄호이 시간 값은 어떤 문자도 될 수있다.

사용자 이름에 "리"를 포함에 대한 정보를 얻기 위해 testFindUserByUsername 방법 UserTest 클래스를 작성한다 :

@Test
public void testFindUserByUsername() throws IOException {
    SqlSession session  = DataConnection.getSqlSession();
    List<User> userList = session.selectList("userTest.findUserByUsername", "李");
    for (User user : userList) {
        System.out.println(user);
    }
     // 提交事务和关闭session
    session.commit();
    session.close();
}

질의가 모호하기 때문에, 얻어지는 결과가 될 수 이상의 쿼리보다 물체의 복수 selectList의 방법에 의해 획득 될 수있다 SQLSESSION 목록 형 방법에 대한 질의의 결과.

이 경우, SQL 문 및 파라미터의 종류를 나타내는 콘솔, 문자열 파라미터 값 리 결과에 대한 질의들의 수가 2 프로그램을 실행하고, 사용자의 "고"로 사용자 이름을 질의 정보를 인쇄 할 수 있습니다.

사용자 증가 - 삽입

작업의 증가, 새로운 문장의 사용은,이 경우에 그렇게 인해 사용자 개체 유형을 삽입 할 필요가에, 사용자 클래스 parameterType 값의 완전한 이름을 라벨 삽입 SQL 문, 돌아올 수없는 값을 추가하는 것이 필요하다.

<insert id="insertUser" parameterType="com.martin.domain.User">
    insert into
        user(username,password,gender,birthday,email,province,city) 
    values 
        (#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>

생일 날짜 속성 값을 삽입 할 때, 유형,로드 SQL 문은 매개 변수를 설정하면 편리하고 정확하게 데이터베이스 형식에 매핑 할 수 있습니다에 맞춰 매개 변수의 jdbcType 자바 JDBC 타입을 선언하는 매개 변수를 추가합니다.

사용자 테이블에 데이터를 삽입, testInsertUser 방법을 추가 :

@Test
public void testInsertUser() throws IOException, ParseException {
    SqlSession session  = DataConnection.getSqlSession();
    User user = new User();
    user.setUsername("孟祥杰");
    user.setPassword("5555");
    user.setGender("男");
    user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1991-03-19"));
    user.setProvince("江苏省");
    user.setCity("沭阳县");
    session.insert("userTest.insertUser",user);
    // 提交事务
    session.commit();
    session.close();
}

엔티티의 획득 기본 키 삽입

일부 작업의 경우, 필요 엔티티의 기본 키 정보에 대응하는 새로운 작동 상태로 복귀하기 위해 MySQL의에서 삽입 문을 실행하기 전에 기본 키를 증가, MySQL은 자동으로 MySQL은 SELECT LAST_INSERT_에 의해, 운영 INSERT 수행 한 후, 자동 증가 기본 키를 생성 () 새로 삽입 된 레코드의 기본 키를 얻을 수 있습니다.

그래서 다음을 구성하는 파일을 매핑 :

<insert id="insertUser" parameterType="com.martin.domain.User">
    <selectKey keyProperty="id" order="AFTER" resultType="integer">
        SELECT LAST_INSERT_ID()
    </selectKey>
    insert into
        user(username,password,gender,birthday,email,province,city) 
    values 
        (#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>

태그 레이블 삽입 selectKey 삽입, 라벨은 지난 증가 기본 키를 쿼리 할 SELECT INSERT_LAST_ID ()에 배치됩니다. 이 매개 변수는 (이전) 전에 또는 (후) 이후 실행되는 삽입 SQL 문에 대한 주문 기능을 나타낸다.

자동 증가 기본 키를 얻을 수있는 또 다른 방법은 삽입 탭 "userGeneratedKeys"에 속성을 추가하고 "의 KeyProperty는"자동 증가 기본 키와 자바 객체를 사용하여 속성 이름을 표현하는 것입니다. 다음과 같이 구성은 다음과 같습니다

<insert id="insertUser" parameterType="com.martin.domain.User" useGeneratedKeys="true" keyProperty="id">
    insert into
        user(username,password,gender,birthday,email,province,city) 
    values 
        (#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})
</insert>

삽입 문은 MyBatis로 실행 이후에 위의 설정 후, 성장은 자기 아이디 id 속성 값이 할당 된 사용자 삽입 된 개체 될 것이며, 논리적 계층에 메소드 GET 사용자 ID를 얻을 수 있습니다.

이 때, 콘솔 삽입 문이 실행 및 매개 변수의 유형이 삽입 각 매개 변수의 값이 표시되고 증가 ID를 인쇄 할 수 있습니다.

수정 및 삭제 엔티티

삭제 및 수정, 삭제 및 업데이트하는 것은 관련 SQL 구성의 준비에 같은 레이블 UserMapper.xml 구성 파일을 사용합니다 :

<!-- 修改用户 -->
<update id="updateUser" parameterType="com.martin.domain.User">
    update 
        user 
    set
        username=#{username},
        password=#{password},
        gender=#{gender},
        birthday=#{birthday,jdbcType=DATE},
        email=#{email},
        province=#{province},
        city=#{city} 
    where 
        id=#{id}
</update>

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="com.martin.domain.User">
    delete from 
        user 
    where 
        id=#{id}
</delete>

입력 매개 변수 유형이 parameterType에 의해 지정에 대한 삭제 및 수정 구성은 삭제 및 업데이트 라벨에 싸여있다. 여기에서 수정 및 구성 정보 지정된 사용자 ID를 삭제합니다. 방법과의 testDeleteUser testUpdateUser 새로운 테스트 클래스 UserTest :

// 修改用户信息
@Test
public void testUpdateUser() throws IOException, ParseException {
    SqlSession session  = DataConnection.getSqlSession();
    // 获取ID为7的用户
    User user = session.selectOne("userTest.findUserById",5);
    // 修改用户的信息
    user.setEmail("[email protected]");
    // 调用update方法保存修改后的用户信息
    session.update("userTest.updateUser", user);
    // 提交事务和关闭session
    session.commit();
    session.close();
}

testUpdateUser 방법을 수행 한 결과로서도 콘솔 출력에 도시 :

우리는 testUpdateUser 방법이 성공 ID가 5가 사용자의 이메일 [email protected]을 수정 말할 것을 의미 하나의 숫자로 변경되었습니다 볼 수 있습니다 후.

// 删除用户信息
@Test
public void testDeleteUser() throws IOException {
    SqlSession session  = DataConnection.getSqlSession();
    // 获取ID为5的用户
    User user = session.selectOne("userTest.findUserById",5);
    // 调用delete删除用户
    session.delete("userTest.deleteUser", user);
    // 提交事务和关闭session
    session.commit();
    session.close();
}

testDeleteUser 방법을 수행 한 결과로서도 콘솔 출력에 도시 :

당신은 삭제 방법 후 실행의 수, 성공적으로 사용자의 데이터의 ID (5)을 삭제하는 1로 변경되었습니다 볼 수 있습니다.

추천

출처www.cnblogs.com/martin0319/p/12319282.html