spring boot 集成 mybatis 入門級學習

與mybatis的初次會面

接觸springboot也不過月餘,由於工作需要,jdbctemplate冗雜的sql拼接已經不再符合接下來的深入學習。我迫切地意識到,倘若不用
spring-data-jpa操縱數據庫,那就用mybatis吧。作爲當前最流行的持久層框架之一,不學習它的方法,相當於與時代脫軌了。
首先,得知道集成mybatis的方法有哪些。其實大致也就兩種:1、基於註解;2、基於xml配置文件。
不管使用哪種方法,引入mybatis的pom依賴都是必不可少的步驟。

a.在pom文件中添加mybatis-spring-boot-starter依賴以及mysql數據庫驅動依賴:

<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>
    <version>5.1.21</version>
</dependency>

b. 然後,在數據庫中新建一張user表:

user表的屬性及長度

c.在application.properties中添加mysql數據源:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用基於註解的方式

1.表建好後,在domain文件夾下新建一個User實體類,實體類的屬性與數據庫屬性名稱與數據類型一一對應。

public class User {

    private Long id;
    private String name;
    private Integer age;

    //省略get和set方法

}

2.在mapper文件夾下創建UserMapper接口:

import com.liqiaoqi.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

@Mapper
//該註解是解決IDEA mapper注入時顯示could not autowire的問題
@Component(value = "userMapper")
public interface UserMapper {

    @Select("SELECT * FROM user WHERE name = #{name}")
    User findByName(@Param("name") String name);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);

}
注意:@Mapper註解必須加上。如果Mapper接口很多,可以直接在Application類前添加@MapperScan("mapper所在包名")註解。
@Component註解也可以不加,前提是在用@Autowired註解注入mapper時不提示“could not autowired”錯誤。

3.在service文件夾下添加UserService類:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public String findByName(){
        userMapper.insert("pinky",20);
        User u =  userMapper.findByName("pinky");
        return u.getName();
    }
}

4.然後在controller文件夾下添加UserController類:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/test")
    public String findByName(){
        return userService.findByName();
    }
}

然後運行項目訪問路徑查看即可。

使用xml配置文件的方式

與基於註解方法不同,使用xml配置文件方法時,sql語句不在mapper接口中定義,而是剝離出來,在xml文件中單獨定義。
這樣做的好處是能夠使得sql語句更爲靈活也更利於維護。  
但兩種集成方法大致是一樣的,主要有以下區別:

1.UserMapper中不寫@Select註解。

import com.liqiaoqi.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

@Mapper
//該註解是解決IDEA mapper注入時顯示could not autowire的問題
@Component(value = "userMapper")
public interface UserMapper {

    User findByName(@Param("name") String name);

    int insert(@Param("name") String name, @Param("age") Integer age);

}

2.在application.properties文件中添加mybatis的配置信息:

mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.typeAliasesPackage=com.liqiaoqi.domain

3.添加UserMapper.xml。實現UserMapper映射的方法(即sql語句)將全部定義在該文件中。

<?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="com.liqiaoqi.mapper.UserMapper" >
    <resultMap id="UserResultMap" type="com.liqiaoqi.domain.User">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="age" column="age" />
    </resultMap>

    <insert id="insert">
        INSERT INTO
        user
        (name,age)
        VALUES
        (#{name},#{age})
    </insert>

    <select id="findByName" resultType="com.liqiaoqi.domain.User" >
        SELECT *
        FROM user
        WHERE name = #{name}
    </select>
</mapper>

除以上三點與基於註解方法稍有不同外,其餘部分全部不作改變。兩種方法結果相同。

以下是項目的完整結構:
項目的結構

以上源碼:示例代碼

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章