以对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>