美文网首页Java架构师系列JavaHibernate 菜鸟教程
Spring Boot2.X数据访问的三种主流姿势JDBC、My

Spring Boot2.X数据访问的三种主流姿势JDBC、My

作者: Java架构师CAT | 来源:发表于2019-08-01 18:18 被阅读1次

    本文参照官方说明文档,可放心引用。

    创建Spring Boot项目之后,开始对Dao层配置。

    一、原生默认的数据库统一接口标准JDBC

    1、pom文件中添加JDBC依赖

    org.springframework.bootspring-boot-starter-jdbcmysqlmysql-connector-javaruntime

    2、application.yml配置文件中添加配置

    spring:datasource:username: usernamepassword: passwordurl:jdbc:mysql://192.168.1.12:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truedriver-class-name: com.mysql.jdbc.Driver

    Spring Boot默认用org.apache.tomcat.jdbc.pool.DataSource作为数据源;

    具体的数据源相关配置都在DataSourceProperties里面;

    3、如何自定义JDBC配置:

    @ConditionalOnMissingBean(DataSource.class)@ConditionalOnProperty(name="spring.datasource.type")static classGeneric {@Beanpublic DataSourcedataSource(DataSourceProperties properties) {//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性returnproperties.initializeDataSourceBuilder().build(); }}

    Spring Boot 默认配置JdbcTemplate框架操作数据库。

    二、轻量级不完全ORM的框架Mybatis

    1、pom文件中添加mybatis依赖(mybatis会自动引入jdbc部分依赖,所以不用手动添加)

    org.mybatis.spring.bootmybatis-spring-boot-starter2.0.0mysqlmysql-connector-javaruntime

    2、application.yml配置文件中添加配置

    spring:datasource:username: usernamepassword: passwordurl:jdbc:mysql://192.168.1.12:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truedriver-class-name: com.mysql.jdbc.Driver

    3、创建JavaBean

    publicclass PojoBean {publicintid;publicString username;publicPojoBean(intid, String username){this.id = id;this.username = username; }publicintgetId(){returnid; }publicvoidsetId(intid){this.id = id; }publicStringgetUsername(){returnusername; }publicvoidsetUsername(String username){this.username = username; }}

    3、创建mapper映射

    //指定这是一个操作数据库的mapper@Mapperpublic interfacePojoBeanMapper {@Select("select * from pojobean whereid=#{id}") public PojoBean getPojoById(Integer id);@Delete("delete from pojobean whereid=#{id}") public int deletePojoById(Integer id);@Options(useGeneratedKeys =true,keyProperty ="id")@Insert("insert intopojobean(username) values(#{username})") public int insertPojo(PojoBean department);@Update("update pojobean setusername=#{newusername} where id=#{id}") public int updatePojo(PojoBean username);}

    4、如何自定义MyBatis的配置规则?给容器中添加一个ConfigurationCustomizer;

    @ConfigurationpublicclassMyBatisConfig {@BeanpublicConfigurationCustomizerconfigurationCustomizer(){returnnewConfigurationCustomizer(){@Overridepublicvoidcustomize(Configurationconfiguration){ configuration.setMapUnderscoreToCamelCase(true); } }; }}

    5、使用MapperScan批量扫描所有的Mapper接口

    @MapperScan(value="com.springboot.name.mapper")@SpringBootApplicationpublic classSpringBootDataMybatisApplication {publicstaticvoidmain(String[] args) {SpringApplication.run(SpringBootDataMybatisApplication.class,args); }}

    三、ORM框架的统一接口标准JPA

    1、pom文件中添加JPA依赖(JPA底层是对hibernate的再封装,会自动引入hibernate的依赖)

    org.springframework.bootspring-boot-starter-data-jpamysqlmysql-connector-javaruntime

    2、application.yml配置文件中添加配置

    spring: datasource: username:username password:password url:jdbc:mysql://127.0.0.1:3307/springdata?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true driver-class-name:com.mysql.jdbc.Driver jpa: hibernate:# 更新或者创建数据表结构,无表用create ddl-auto:update# 控制台显示SQL show-sql:true

    3、编写一个实体类(bean)和数据表进行映射,并配置好映射关系

    //使用JPA注解配置映射关系@Entity//告诉JPA这是一个实体类(和数据表映射的类)@Table(name ="tbl_user")//@Table来指定和哪个数据表对应;如果省略默认表名就是user;public class User {@Id//这是一个主键@GeneratedValue(strategy =GenerationType.IDENTITY)//自增主键private Integer id;@Column(name ="last_name",length=50)//这是和数据表对应的一个列private String lastName;@Column//省略默认列名就是属性名private String email;//此处省略get、set}

    4、编写一个Dao接口来操作实体类对应的数据表(Repository)

    //继承JpaRepository后即可对数据库进行操作,不需要写具体实现类。publicinterfaceUserRepositoryextendsJpaRepository {}

    如果想在spring data jpa中自己写sql 语句,jpa支持两种扩展方式:

    方式1、通过@query 注解指定nativeQuery,这样就可以使用原生sql查询,官方文档示例代码:

    publicinterfaceUserRepositoryextendsJpaRepository {@Query(value ="SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery =true)UserfindByEmailAddress(StringemailAddress);}

    方式2、通过Customizingindividual repositories 提供的功能去实现。这种方式通过自定义接口,例如CustomizedUserRepository ,和他的实现类,在实现类里用其他dao框架,如mybatis ,jdbcTemplate ,最后在用UserRepository去继承CustomizedUserRepository接口方式,实现和其他dao 框架的组合使用。

    官方文档实例代码:

    interfaceCustomizedUserRepository { voidsomeCustomMethod(User user);}classCustomizedUserRepositoryImplimplementsCustomizedUserRepository {publicvoidsomeCustomMethod(User user){// Your custom implementation}}interfaceUserRepositoryextendsCrudRepository,CustomizedUserRepository {// Declare querymethods here}

    记录一下初次遇到的坑点:

    坑1、Spring Boot 1.5X 和 2.X 版本中,使用JPA操作语句存在变化,例如1.5X版本的findOne()方法在2.X版本中会报类型错误,将findOne()修改为findById(id).get()即可,结果完全相同。

    2.X版本使用 示例如下:

    坑2、用Spring Boot做多模块开发,模块之间和父子模块之间的依赖能够自动直接或间接传递,但配置不会传递,配置文件名相同时,只有一个配置文件生效,项目中的配置最好单独存放。

    总的来说,JDBC是原生默认的,是大多数人第一次所接触的。MyBatis和Spring DataJPA都是很不错且被广泛使用的持久层解决方案,要使用哪一种,根据项目选择即可。

    最新的ORM框架使用率排行

    免费分享Java架构资料,需要的可以私信我

    原文:https://mp.weixin.qq.com/s/LfUrERYCgKGfhRg2BLqVUQ

    来源:专注一行代码

    作者:专注一行代码

    相关文章

      网友评论

        本文标题:Spring Boot2.X数据访问的三种主流姿势JDBC、My

        本文链接:https://www.haomeiwen.com/subject/kkbcdctx.html