php教程 PHP开发 마이바티스를 우아하게 사용해보세요

마이바티스를 우아하게 사용해보세요

Nov 22, 2016 pm 01:34 PM
mybatis

Mybatis는 초기 단계에서 사용하기가 상당히 까다롭습니다. 다양한 구성 파일, 엔터티 클래스, dao 레이어 매핑 연결 및 기타 많은 구성이 필요합니다. 물론, mybatis는 초기 단계에서 테이블 결과를 기반으로 엔터티 클래스, 구성 파일 및 DAO 레이어 코드를 자동으로 생성할 수 있는 생성기를 개발하여 나중에 개발 작업량을 일부 줄일 수 있다는 사실도 발견했습니다. , Annotation을 사용하고 DAO를 자동으로 관리하기 위해 많은 최적화가 수행되었으며 레이어 및 구성 파일 등이 상위권으로 개발되었으며 이것이 오늘 제가 이야기할 모델이 mybatis-spring-boot-starter입니다. +mybatis는 구성 파일 없이도 완전히 주석을 달 수 있고 쉽게 구성하고 사용할 수도 있습니다.

지금 생각해보면 스프링부트에 관련된 건 다 간단하네요.

mybatis-spring-boot-starter

공식 설명: MyBatis Spring-Boot-Starter는 MyBatis를 Spring Boot와 함께 사용하는 데 도움이 됩니다.
실제로 myBatis가 어떻게 사용하는지 보고 개발했습니다. 인기 있는 스프링 부트는 즐거움에 동참할 수 있는 솔루션 세트이지만 이것은 많은 문제를 해결하고 실제로 사용하기가 훨씬 더 부드럽습니다. mybatis-spring-boot-starter에는 주로 두 가지 솔루션이 있습니다. 하나는 주석을 사용하여 모든 문제를 해결하는 것이고, 다른 하나는 단순화된 오래된 전통입니다.

물론 어떤 모드든 먼저 mybatis-spring-boot-starter의 pom 파일을 도입해야 합니다. 현재 최신 버전은 1.1.1

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version></dependency>
로그인 후 복사

자, 두 가지를 소개하겠습니다. 개발 모드 별도

구성 파일 주석 버전 없음

모든 것이 주석을 사용하여 수행됩니다.

1 관련 Maven 파일 추가

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency></dependencies>
로그인 후 복사

전체 pom 패키지는 여기에 게시되지 않으며 소스 코드를 직접 볼 수 있습니다

2. 관련 구성

mybatis.type-aliases-package=com.neo.entity

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8spring.datasource.username = root
spring.datasource.password = root
로그인 후 복사

springboot는 spring.datasource.* 관련 구성을 자동으로 로드하고 데이터 소스는 sqlSessionFactory에 자동으로 삽입되며 sqlSessionFactory는 Mapper에 자동으로 삽입됩니다. 어떤 걱정이든 그냥 들고 사용하면 됩니다.

시작 클래스에서 매퍼 패키지를 스캔하려면 @MapperScan을 추가하세요.

@SpringBootApplication@MapperScan("com.neo.mapper")public class Application {    
public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
로그인 후 복사

또는 @Mapper 주석을 Mapper 클래스에 직접 추가하는 것이 좋습니다. 그렇지 않으면 추가하세요. 각 매퍼에 주석을 다는 것도 꽤 번거롭습니다

3. 매퍼 개발

세 번째 단계가 가장 중요한 부분입니다. SQL 제작은 여기까지입니다

public interface UserMapper {

    @Select("SELECT * FROM users")
    @Results({
        @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
        @Result(property = "nickName", column = "nick_name")
    })
    List<UserEntity> getAll();

    @Select("SELECT * FROM users WHERE id = #{id}")
    @Results({
        @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
        @Result(property = "nickName", column = "nick_name")
    })
    UserEntity getOne(Long id);

    @Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
    void insert(UserEntity user);

    @Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
    void update(UserEntity user);

    @Delete("DELETE FROM users WHERE id =#{id}")
    void delete(Long id);

}
로그인 후 복사

참고, # 기호와 $ 사용 기호의 차이점:

// This example creates a prepared statement, something like select * from teacher where name = ?;
@Select("Select * from teacher where name = #{name}")
Teacher selectTeachForGivenName(@Param("name") String name);

// This example creates n inlined statement, something like select * from teacher where name = 'someName';
@Select("Select * from teacher where name = '${name}')
Teacher selectTeachForGivenName(@Param("name") String name);
로그인 후 복사

4.

을 사용하면 위의 세 단계를 거쳐 기본적으로 해당 dao 레이어 개발이 완료됩니다. 일반 클래스 주입

@RunWith(SpringRunner.class)@SpringBootTestpublic class UserMapperTest {    @Autowired
    private UserMapper UserMapper;    @Test
    public void testInsert() throws Exception {
        UserMapper.insert(new UserEntity("aa", "a123456", UserSexEnum.MAN));
        UserMapper.insert(new UserEntity("bb", "b123456", UserSexEnum.WOMAN));
        UserMapper.insert(new UserEntity("cc", "b123456", UserSexEnum.WOMAN));

        Assert.assertEquals(3, UserMapper.getAll().size());
    }    @Test
    public void testQuery() throws Exception {
        List<UserEntity> users = UserMapper.getAll();
        System.out.println(users.toString());
    }    @Test
    public void testUpdate() throws Exception {
        UserEntity user = UserMapper.getOne(3l);
        System.out.println(user.toString());
        user.setNickName("neo");
        UserMapper.update(user);
        Assert.assertTrue(("neo".equals(UserMapper.getOne(3l).getNickName())));
    }
}
로그인 후 복사

미니멀리스트 XML 버전

미니멀리스트 XML 버전은 파일 매핑의 오래된 전통을 유지합니다. 최적화는 주로 dao를 구현할 필요가 없는 구현 계층에 반영됩니다. . 시스템은 메소드 이름에 따라 매핑 파일에 메소드 이름을 자동으로 추가합니다.

1、配置

pom文件和上个版本一样,只是application.properties新增以下配置

mybatis.config-locations=classpath:mybatis/mybatis-config.xm

mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
로그인 후 복사

指定了mybatis基础配置文件和实体类映射文件的地址

mybatis-config.xml 配置

<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases></configuration>
로그인 후 복사

这里也可以添加一些mybatis基础的配置

2、添加User的映射文件

<mapper namespace="com.neo.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.neo.entity.UserEntity" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="passWord" property="passWord" jdbcType="VARCHAR" />
        <result column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/>
        <result column="nick_name" property="nickName" jdbcType="VARCHAR" />
    </resultMap>

    <sql id="Base_Column_List" >
        id, userName, passWord, user_sex, nick_name    </sql>

    <select id="getAll" resultMap="BaseResultMap"  >
       SELECT 
       <include refid="Base_Column_List" />
       FROM users    </select>

    <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" >
        SELECT 
       <include refid="Base_Column_List" />
       FROM users
       WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.neo.entity.UserEntity" >
       INSERT INTO 
               users
               (userName,passWord,user_sex) 
           VALUES
               (#{userName}, #{passWord}, #{userSex})    </insert>

    <update id="update" parameterType="com.neo.entity.UserEntity" >
       UPDATE 
               users 
       SET 
           <if test="userName != null">userName = #{userName},</if>
           <if test="passWord != null">passWord = #{passWord},</if>
           nick_name = #{nickName}
       WHERE 
               id = #{id}
    </update>

    <delete id="delete" parameterType="java.lang.Long" >
       DELETE FROM
                users 
       WHERE 
                id =#{id}
    </delete></mapper>
로그인 후 복사

其实就是把上个版本中mapper的sql搬到了这里的xml中了

3、编写Dao层的代码

public interface UserMapper {

    List<UserEntity> getAll();

    UserEntity getOne(Long id);

    void insert(UserEntity user);

    void update(UserEntity user);

    void delete(Long id);

}
로그인 후 복사

对比上一步这里全部只剩了接口方法

如何选择

两种模式各有特点,注解版适合简单快速的模式,其实像现在流行的这种微服务模式,一个微服务就会对应一个自已的数据库,多表连接查询的需求会大大的降低,会越来越适合这种模式。

老传统模式比适合大型项目,可以灵活的动态生成SQL,方便调整SQL,也有痛痛快快,洋洋洒洒的写SQL的感觉。


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

iBatis vs. MyBatis: 어느 것이 당신에게 더 좋나요? iBatis vs. MyBatis: 어느 것이 당신에게 더 좋나요? Feb 19, 2024 pm 04:38 PM

iBatis vs. MyBatis: 어느 것이 당신에게 더 좋나요?

MyBatis에서 일괄 삭제 작업을 구현하는 다양한 방법 MyBatis에서 일괄 삭제 작업을 구현하는 다양한 방법 Feb 19, 2024 pm 07:31 PM

MyBatis에서 일괄 삭제 작업을 구현하는 다양한 방법

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명 Feb 26, 2024 pm 07:48 PM

MyBatis 동적 SQL 태그의 Set 태그 기능에 대한 자세한 설명

JPA와 MyBatis의 기능 및 성능 비교 분석 JPA와 MyBatis의 기능 및 성능 비교 분석 Feb 19, 2024 pm 05:43 PM

JPA와 MyBatis의 기능 및 성능 비교 분석

MyBatis 일괄 삭제 문 사용 방법에 대한 자세한 설명 MyBatis 일괄 삭제 문 사용 방법에 대한 자세한 설명 Feb 20, 2024 am 08:31 AM

MyBatis 일괄 삭제 문 사용 방법에 대한 자세한 설명

MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까? MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까? Feb 23, 2024 pm 08:13 PM

MyBatis 1차 캐시에 대한 자세한 설명: 데이터 액세스 효율성을 향상시키는 방법은 무엇입니까?

MyBatis 일대다 쿼리 구성에 대한 자세한 설명: 일반적인 관련 쿼리 문제 해결 MyBatis 일대다 쿼리 구성에 대한 자세한 설명: 일반적인 관련 쿼리 문제 해결 Feb 22, 2024 pm 02:18 PM

MyBatis 일대다 쿼리 구성에 대한 자세한 설명: 일반적인 관련 쿼리 문제 해결

MyBatis Generator 구성 매개변수 해석 및 모범 사례 MyBatis Generator 구성 매개변수 해석 및 모범 사례 Feb 23, 2024 am 09:51 AM

MyBatis Generator 구성 매개변수 해석 및 모범 사례

See all articles