1、持久层
①项目的持久层就是mapper,在源代码的mapper软件包中编写自定义接口,接口中编写自定义方法:
public interface UserMapper {
Integer insert(User user);
User findByUsername(String username);
}
②在项目启动类中添加注解@MapperScan(“mapper软件包路径”)告诉项目去哪里找接口。
③接口中定义的只有方法名,在源文件夹中创建mapper文件夹,里面放接口方法的具体映射文件(.xml文件)。文件配置可在mybatis中文版网页中找到,具体实现有四种方法insert、delete、update、select,分别对应数据库的增删改查。
mapper映射文件中具体属性如下所示:
<!--namespace属性:用于指定当前映射文件和哪个接口进行映射,需要指定接口的文件路径,需要标注包的完整路径接口-->
<mapper namespace="com.cy.store.mapper.UserMapper">
<!--自定义映射规则:resultMap-->
<!--
id表示给映射分配一个唯一的id值,对应的就是resultMap=”id“属性的取值
type:取值是一个类,表示数据库中的查询结果与java中哪个实体类进行结果集映射
<result><result>将表和类中名称不一致的字段进行匹配,column表示表中的资源名称,property表示类中的属性名称。
定义匹配规则时,主键不可以省略。
-->
<resultMap id="UserEntityMap" type="com.cy.store.entity.User">
<result column="uid" property="uid"></result>
<result column="is_delete" property="isDelete"></result>
<result column="created_user" property="createdUser"></result>
<result column="created_time" property="createdTime"></result>
<result column="modified_user" property="modifiedUser"></result>
<result column="modified_time" property="modifiedTime"></result>
</resultMap>
<!--id表示映射的接口中方法的名称,在标签内部编写SQL语句-->
<!--useGeneratedKeys表示开启主键字段值递增,keyProperty设置要进行递增的主键-->
<insert id="insert" useGeneratedKeys="true" keyProperty="uid">
INSERT INTO t_user (
username, password, salt, phone, email, gender, avatar, is_delete,
created_user, created_time, modified_user, modified_time
)
VALUES (
#{username}, #{password}, #{salt}, #{phone}, #{email}, #{gender}, #{avatar}, #{isDelete},
#{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime}
)
</insert>
<!--
resultType:表示查询的结果集类型,只需要指定对应映射类的类型,并且包含完整包接口路径
resultMap:表示当表的资源和类的对象属性的字段名称不一致时,自定义查询结果集的映射规则
-->
<select id="findByUsername" resultMap="UserEntityMap">
SELECT * FROM t_user WHERE username = #{username}
</select>
</mapper>
2、实体类
①当项目中有常被使用的公共字段时,可以单独定义一个基类,让其它需要使用公共字段的类继承这个基类。
②公共类中一般要生成set、get方法,toString方法,当类中的对象要进行是否相等的比较时要重写equals方法,重写了equals方法就要重写hashCode方法
③关键字Serializable可以实现类中对象的序列化,序列化可以把对象的状态保存起来,以便于在其它地方读取,当想要保存对象状态或想要把对象状态在网络上进行传播时需要用到。
3、测试类
①当使用@Autowired注解进行自动装配时,有时会报无法自动装配的错误,原因是IDEA默认注入的时候bean必须存在。改成@Autowired(required = false)可解决问题,在要映射的接口上加注解@Repository也可以解决问题。
②注解@SpringBootTest //表示标注当前的类是一个测试类,不会随着项目一起打包。
③注解@RunWith(SpringRunner.class) //表示启动这个单元测试类,需要传递一个参数,必须是SpringRunner的实例类型
④对于单元测试方法,每一个方法都可以独立运行,必须使用@Test注解修饰,返回类型只能是void,方法的参数列表不能指定任何类型,方法的访问修饰符必须是public。
⑤注解@Repository专用于标注DAO类(数据访问层)。