1. 程式人生 > >mybatis檔案配置方式和註解方式操作資料庫

mybatis檔案配置方式和註解方式操作資料庫

以對question的表操作為例。
model層:無註解,有每個屬性的get,set方法(下面省略了一些)

public class Question {
    private int id;
    private String title;
    private String content;
    private Date createdDate;
    private int userId;
    private int commentCount;

    public int getId() {
        return id;
    }

    public
void setId(int id) { this.id = id; }

dao層:介面類上面有@Repository和@Mapper註解
在一個稍大的專案中,如果元件採用xml的bean定義來配置,顯然會增加配置檔案的體積,查詢以及維護起來也不太方便。
Spring2.5為我們引入了元件自動掃描機制,他在類路徑下尋找標註了上述註解的類,並把這些類納入進spring容器中管理。這個類就成了Spring受管元件。類似性質的還有@controller 控制器,@service 服務,@component (把普通pojo例項化到spring容器中)
添加了@Mapper註解(mybatis註解)之後這個介面在編譯時會生成相應的實現類, 需要注意的是:這個介面中不可以定義同名的方法,因為會生成相同的id,
也就是說這個介面是不支援過載的

@Repository
@Mapper
public interface QuestionDao {
    String TABLE_NAME = " question ";
    String INSERT_FIELDS = " title, content, created_date, comment_count, user_id ";
    String SELECT_FIELDS = " id, "+INSERT_FIELDS;

    @Insert({"insert into ", TABLE_NAME, "(", INSERT_FIELDS, ") Values (#{title}
, #{content}, #{createdDate}, #{userId}, #{commentCount})"
}) int addQuestion(Question question); //@Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " WHERE user_id = #{userId} ORDER BY id DESC LIMIT #{offset},#{limit}"}) List<Question> selectLatestQuestions(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit); }

後面服務層或者控制層可用使用這個dao層類了。用
@Autowired
QuestionDao questionDao;就可以用了,不多說。

addQuestion方法是註解生成的操作(不需要額外配置)

selectLatestQuestions方法是配置檔案生成的操作

1,要先在resource檔案下新建一個跟QuestionDao目錄一樣的目錄結構,一樣名稱的xml檔案
這裡寫圖片描述
這裡寫圖片描述

2,QuestionDao.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="com.nowcoder.dao.QuestionDao">
    <sql id="table">question</sql>
    <sql id="selectFields">id,title, content,comment_count,created_date,user_id</sql>
    <select id="selectLatestQuestions"
            resultType="com.nowcoder.model.Question">SELECT<include refid="selectFields"/>FROM<include refid="table"/><if test="userId != 0">WHERE user_id = #{userId}</if>
        ORDER BY id DESC LIMIT #{offset},#{limit}
    </select>
</mapper>

3,application.properties裡面加入mysql連結的配置和操作的一些配置

spring.datasource.url=jdbc:mysql://localhost/wenda?useSSL=true&useUnicode=yes&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=778899
mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:com.nowcoder.dao/*.xml

4,mybatis-config.xml檔案中 ,QuestionDao.xml與介面是一樣的路徑與名字,下面就不用去配置mapper了,不然會報錯的。

<?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">
<!--通過這個配置檔案,完成mybatis與資料庫的連線  -->
<configuration>

    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="defaultStatementTimeout" value="3000"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="useGeneratedKeys" value="true"/>
    </settings>


    <!-- xml匯入sql
     <mappers>
        <mapper resource="com.nowcoder.dao/QuestionDao.xml"/>
    </mappers>
     -->

</configuration>

5,en,pom.xml不要忘記引入依賴

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

我引入mybatis依賴的時候不知道怎麼搞的下載不完全,很慢,一個小tip就是加入:

<!--阿里雲搞的映象,下載更快-->
    <repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>nexus-aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>