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>