Spring Boot数据访问的几种方式

一、JdbcTemplate

数据库连接模板,JDBC + Template的组合,是对JDBC的封装,替我们完成所有的JDBC底层工作,这样对于数据库的操作,再也不需要每次都进行连接、打开、关闭了

@RestController
public class HelloController {
	@Autowired
    JdbcTemplate jdbcTemplate;
    
    @RequestMapping("/hello")
    public String hello(){
    	String id = "1";
    	return  jdbcTemplate.queryForObject("select userName from person where id = ?",new Object[]{id},String.class);
    }

}

二、ORM之MyBatis

MyBatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,可以使用简单的XML或注解来配置和映射原生信息。
MyBatis 3提供的注解可以取代XML。

1、xml配置

@Mapper
@Component
public interface LoginMapper {
    String findNameById(int id);
}

resources/mapper下LoginMapper.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.xmliu.spboot.mapper.LoginMapper">
    <select id="findNameById" parameterType="java.lang.String" resultType="java.lang.String">
        SELECT userName FROM person where id = #{0}
    </select>
</mapper>
@RestController
public class HelloController {
	@Autowired
    LoginMapper loginMapper;
    @RequestMapping("/hello")
    public String hello(){
    	return loginMapper.findNameById(1);
    }
}

2、普通注解Select等

CRUD注解,包括@Select,@Insert,@Update,@Delete
映射注解,包括@Results,@Result,@ResultMap

@Mapper
@Component
public interface LoginMapper {
	@Select("select userName from person where id = 2")
    String findNameById();
}
@RestController
public class HelloController {
	@Autowired
    LoginMapper loginMapper;
    @RequestMapping("/hello")
    public String hello(){
    	return loginMapper.findNameById();
    }
}

3、高级注解SelectProvider等

CRUD高级注解,包括@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider,都是用来构建动态SQL

@Mapper
@Component
public interface LoginMapper {
	@SelectProvider(type = LoginProvider.class,method = "queryName")
    String queryName();
}
public class LoginProvider {
    public String queryName(){
        SQL sql = new SQL();
        return sql
                .SELECT("userName")
                .FROM("person")
                .WHERE("id = 3")
                .toString();
    }
}
@RestController
public class HelloController {
	@Autowired
    LoginMapper loginMapper; 
    @RequestMapping("/hello")
    public String hello(){
    	return loginMapper.queryName();
    }
}

三、ORM之JPA

JPA(Java Persistence API)是Java的持久化API,用于对象的持久化,非常强大,免去了使用JDBCTemplate开发的编写脚本工作。
JPA是一个规范化接口,封装了Hibernate的操作作为默认实现,让用户不通过任何操作就能完成数据库的操作

@Entity
@Getter
@Setter
public class Person {

    @Id
    @GeneratedValue
    private int id;

    @Column(name = "userName", nullable = true, length = 20)
    private String userName;
}
public interface LoginRepository extends JpaRepository<Person,Integer> {

    @Query(value = "SELECT userName FROM person p where p.id = :id",nativeQuery = true)
    String findNameJpa(@Param("id")int id);
}
@RestController
public class HelloController {
    @Autowired
    LoginRepository loginRepository;
    @RequestMapping("/hello")
    public String hello(){
    	return loginRepository.findNameJpa(4);
    }
}

PS: person表结构及内容如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/diyangxia/article/details/108450382