使用hibernate实现增删改查

前言

最近开始在公司实习了,刚开始还没有跟项目,只是接到leader的指令看以往的代码,然后自己添加简单额增删改查功能。公司用的是springboot+hibernate的框架。

创建数据库

首先贴出数据库的代码,因为是测试,所以比较简单,只有三个字段:

CREATE TABLE `t_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `gender` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

后端代码实现

使用hibernate实现增删改查_第1张图片
这个是代码目录,非常简单,因为只是很简单的例子,接下来直接贴出代码:
TestRepository:

public interface TestRepository extends JpaRepository, QuerydslPredicateExecutor {

    @Query(value = "select *  from t_test where id = ?1 ", nativeQuery = true)
    Test findByIds(Integer id);
    @Query(value = "select *  from t_test where name like %?1%", nativeQuery = true)
    List  findVauge(String name);
    @Query(value = "select *  from t_test limit ?1,?2 ", nativeQuery = true)
    List findTest(Integer start, Integer end);
    @Modifying
    @Query(value = "update t_test set name=?1 where id=?2 ", nativeQuery = true)
    int updateTest(String name,Integer id);
    @Modifying
    @Query(value = "delete from t_test  where id=? ", nativeQuery = true)
    int deleteTest(Integer id);
    @Modifying
    @Query(value = "insert into t_test (name,gender) values(?1,?2) ", nativeQuery = true)
    int insertTest(String name,String gender);

}

定义个继承JpaRepository和QuerydslPredicateExecutor的接口,这两个方法里面哟很多封装好的查询方法,可以直接调用,非常简单。
model层的Test类:

@Entity
@Table(name = "t_test")
public class Test  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    public Test() {
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@Entity注解表示实体类
@Table(name = “t_test”)对应的是数据库中的表。
业务逻辑层的TestService接口:

public interface TestService {


    Test findById(Integer id);

    Test updateTest(String name,Integer id);

    int deleteTest(Integer id);

    int insertTest(String name,String gender);

    List findTest(Integer start, Integer end);

    List findVauge(String name);
}

然后是业务逻辑的具体实现:

@Component
class TestServiceImpl implements TestService {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestServiceImpl.class);

    @Resource
    private TestRepository testRepository;


    @Override
    public Test findById(Integer id) {
        return testRepository.findByIds(id);
    }

    @Override
    public Test updateTest(String name,Integer id) {
        Test test=testRepository.findByIds(id);
        if(test!=null) {
            testRepository.updateTest(name, id);
            return testRepository.findByIds(id);
        }
         else
             throw new BusinessException("该用户不存在");

}

    @Override
    public int deleteTest(Integer id) {
        Test test=testRepository.findByIds(id);
        if(test!=null) {
           int i= testRepository.deleteTest(id);
           return i;
        }
        else
            throw new BusinessException("用户不存在");
    }

    @Override
    public int insertTest(String name, String gender) {
        boolean flag=false;
        /*
        * correctGender为最终输入数据库的性别
        * */
        String correctGender=ClassGender.UNKNOWN.name();
        /*
        * 遍历枚举类型,检查用户输入的参数是否正确
        * */
        for (ClassGender classGender : ClassGender.values())
        {
            if(classGender.getLabel().equals(gender))
            {
              flag=true;
              correctGender=classGender.name();
              break;
            }
        }
        if(flag)
          return testRepository.insertTest(name,correctGender);
        else
            throw new BusinessException("性别格式不正确");
    }

    @Override
    public List findTest(Integer start, Integer end) {
      List testList= (List) testRepository.findTest(start,end);
      return testList;
    }

    @Override
    public List findVauge(String name) {
       List list=testRepository.findVauge(name);
       return list;
    }


}

这里面有使用到枚举类型,以确保输入的性别都是正确的:
ClassGender:

public enum ClassGender {
    MAN(1, "男"),

    WOMAN(2, "女"),

    UNKNOWN(0, "未知");

    private Integer code;
    private String label;

    private ClassGender(Integer code, String label) {
        this.code = code;
        this.label = label;
    }

    public Integer getCode() {
        return code;
    }

    public String getLabel() {
        return label;
    }

    public static ClassGender getEnum(Integer code) {
        if (code == null) {
            return null;
        }

        for (ClassGender status : values()) {
            if (status.getCode() == code) {
                return status;
            }
        }
        return null;
    }
}

接着就是controller:

@RestController
@RequestMapping("/portalbasic/test")
@Api(tags = "门户 测试 ")
public class TestController extends AbstractController {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);
    private JPAQueryFactory queryFactory;
    @Resource
    private TestService testService;


    @RequestMapping(value = "/getInfo", method = RequestMethod.POST)
    @ApiOperation(value = "获取用户信息", notes = "", response = Result.class)
    public Result getInfo(@RequestParam(required = true) Integer id) {

        Test test = testService.findById(id);

        return super.success(test);
    }
    @RequestMapping(value = "/getTest", method = RequestMethod.POST)
    @ApiOperation(value = "模糊查询", notes = "", response = Result.class)
    public Result getVauge(@RequestParam(required = false,defaultValue = "")String name) {
        List testList=testService.findVauge(name);
        return super.success(testList);
    }
    @RequestMapping(value = "/getLimitInfo", method = RequestMethod.POST)
    @ApiOperation(value = "获取用户信息集", notes = "", response = Result.class)
    public Result getLimitInfo(@RequestParam( required = false, defaultValue = "0") Integer start,
                               @RequestParam( required = false, defaultValue = "1000")Integer end) {

       List testList= (List) testService.findTest(start,end);

        return super.success(testList);
    }
    @Transactional
    @RequestMapping(value = "/updateInfo", method = RequestMethod.POST)
    @ApiOperation(value = "更改用户信息", notes = "", response = Result.class)
    public Result updateInfo(@RequestParam(required = true) String name,
                             @RequestParam(required = true)Integer id
                             ) {
     Test test= testService.updateTest(name,id);
        return super.success(test);
    }
    @Transactional
    @RequestMapping(value = "/deleteInfo", method = RequestMethod.POST)
    @ApiOperation(value = "删除用户信息", notes = "", response = Result.class)
    public Result deleteInfo(@RequestParam(required = true)Integer id)
        {

       int i=testService.deleteTest(id);
        return super.success(i);
    }
    @Transactional
    @RequestMapping(value = "/insertInfo", method = RequestMethod.POST)
    @ApiOperation(value = "添加用户信息", notes = "", response = Result.class)
    public Result insertTest(@RequestParam(required = true)String name,
                             @RequestParam(required = true)String gender)
    {
        int i=testService.insertTest(name,gender);
        return super.success(i);
    }

}

@Api(tags = "门户 测试 ")注解是因为使用的是swagger,相当于一个接口,这个是可以不用的,以下相应的@ApiOperation也是可以不用的。
这样子留完成了简单的demo,下面看看运行结果:

使用hibernate实现增删改查_第2张图片
使用hibernate实现增删改查_第3张图片
使用hibernate实现增删改查_第4张图片
这是一部分的结果,其他的结果都是类似的。

你可能感兴趣的:(使用hibernate实现增删改查)