SpringBoot项目实战:持久层开发

这里以UserMapper为例,首先需要创建对应的实体类User类,我们通过观察可以看出多个类拥有同一些字段,我们可以把这些字段抽取成一个公共基类这样方便我们管理。

package com.zjq.store.entity;

import java.io.Serializable;
import java.util.Date;

public class BaseEntity implements Serializable {
    private String createdUser;
    private Date createdTime;
    private String  modifiedUser;

    @Override
    public String toString() {
        return "BaseEntity{" +
                "createdUser='" + createdUser + '\'' +
                ", createdTime=" + createdTime +
                ", modifiedUser='" + modifiedUser + '\'' +
                ", modifiedTime=" + modifiedTime +
                '}';
    }

    public String getCreatedUser() {
        return createdUser;
    }

    public void setCreatedUser(String createdUser) {
        this.createdUser = createdUser;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    public String getModifiedUser() {
        return modifiedUser;
    }

    public void setModifiedUser(String modifiedUser) {
        this.modifiedUser = modifiedUser;
    }

    public Date getModifiedTime() {
        return modifiedTime;
    }

    public void setModifiedTime(Date modifiedTime) {
        this.modifiedTime = modifiedTime;
    }

    private Date modifiedTime;
}

此时我们再去创建实体类

package com.zjq.store.entity;

import java.io.Serializable;

public class User extends BaseEntity implements Serializable {
    private Integer uid ;
    private String username;
   private String password;
    private String salt ;
    private String phone;
    private String email;
    private Integer gender ;
    private String avatar ;
    private Integer isDelete ;

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", salt='" + salt + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", avatar='" + avatar + '\'' +
                ", isDelete=" + isDelete +
                '}';
    }

    public User(String username, String password, String salt, String phone, String email, Integer gender, String avatar, Integer isDelete) {

        this.username = username;
        this.password = password;
        this.salt = salt;
        this.phone = phone;
        this.email = email;
        this.gender = gender;
        this.avatar = avatar;
        this.isDelete = isDelete;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public Integer getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }
}

创建好实体类之后去创建mapper接口,为了springboot能扫qidongl描到我们写的接口,我们可以选择给每个接口头上加一个@Mapper注解或者在启动类上加一个自动扫描包的注解,更加建议使用后一种。

package com.zjq.store;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.zjq.store.mapper")
public class StoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(StoreApplication.class, args);
    }

}

然后我们就可以编写查询语句了。在resource目录下建立一个mapper文件夹专门用于存放mapper.xml文件。为了这些文件能被扫描到,首先他的名字必须和接口名称一致,其次需要在application.yaml中配置xml文件的路径

mybatis:
  mapper-locations: classpath:mapper/*.xml

这里以UserMapper为例,先创建一个空的mapper.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">
<!--通过namespace来绑定一个Mapper接口-->
<mapper namespace="com.zjq.store.mapper.UserMapper" >

</mapper>

在里面编写查询语句,首先是insert语句,这里可以注意一下的是当我们的主键是自增的时候,mybatis并不会帮我们自动插入主键,这时候我们需要开启useGeneratedKeys功能并用keyProperty绑定需要自增的主键。

<!--查询语句-->
    <insert id="insert" parameterType="com.zjq.store.entity.User" useGeneratedKeys="true" keyProperty="uid" >
   insert into store.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>

查询语句:需要注意实体类名称与表字段名称不同时(因为命名规则不同,实体类使用驼峰命名)需要创建一个resultMap去对应字段名称。
UserMapper.xml:

	<resultMap id="userMap" type="com.zjq.store.entity.User">
		<!--id用于绑定 resultMap="id"-->
		<!--type用于指定实体类-->
		<id column="uid" property="uid"></id>
		<!--主键字段是必须写的-->
		<!--其余与表字段一致的就可以不写-->
		<result column="created_user" property="createdUser"></result>
		<!--column是表字段名 property是绑定实体类中的属性-->
		<result column="created_time" property="createdTime"></result>
  		<result column="modified_user" property="modifiedUser"></result>
	</resultMap>
	<select id="findByUsername" resultMap="userMap">
      select * from store.t_user where username=#{username}
    </select>

也可以使用application.yaml开启自动驼峰命名规则映射

mybatis:
  configuration:
    map-underscore-to-camel-case: true

或者在application.yaml中绑定一个配置文件在配置文件中开启驼峰命名(不建议这样做,尽量把所有的配置都整合在application.yaml中)

mybatis:
  configLocation: classpath:/mybatis-config.xml
<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

单元测试!
在这里插入图片描述
为了进行规范的单元测试我们需要建立起一个规范的包结构。和src下的目录结构一致。

package com.zjq.store.mapper;

import com.zjq.store.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
//自己写的测试类必须加这两个注解
public class UserMapperTests {
    @Autowired
    UserMapper userMapper;

    @Test
    public void insert() {
        Integer insert = userMapper.insert(new User("zjq", "12234", "1", "134234342", "234234@qq.com", 1, "ggfdsddfg", 0));
        System.out.println(insert);
    }
}

测试结果成功!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值