网站首页 > 开源技术 正文
本文参照官方说明文档,可放心引用。
创建Spring Boot项目之后,开始对Dao层配置。
一、原生默认的数据库统一接口标准JDBC
1、pom文件中添加JDBC依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
2、application.yml配置文件中添加配置
spring: datasource: username: username password: password url: jdbc:mysql://192.168.1.12:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true driver-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 { @Bean public DataSourcedataSource(DataSourceProperties properties) { //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性 returnproperties.initializeDataSourceBuilder().build(); } }
Spring Boot 默认配置JdbcTemplate框架操作数据库。
二、轻量级不完全ORM的框架Mybatis
1、pom文件中添加mybatis依赖(mybatis会自动引入jdbc部分依赖,所以不用手动添加)
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
2、application.yml配置文件中添加配置
spring: datasource: username: username password: password url: jdbc:mysql://192.168.1.12:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true driver-class-name: com.mysql.jdbc.Driver
3、创建JavaBean
publicclass PojoBean { public int id; public String username; public PojoBean(int id, String username) { this.id = id; this.username = username; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
3、创建mapper映射
//指定这是一个操作数据库的mapper @Mapper public 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;
@Configuration public classMyBatisConfig { @Bean public ConfigurationCustomizerconfigurationCustomizer(){ return new ConfigurationCustomizer(){ @Override public void customize(Configurationconfiguration) { configuration.setMapUnderscoreToCamelCase(true); } }; } }
5、使用MapperScan批量扫描所有的Mapper接口
@MapperScan(value= "com.springboot.name.mapper") @SpringBootApplication public classSpringBootDataMybatisApplication { publicstatic void main(String[] args) { SpringApplication.run(SpringBootDataMybatisApplication.class,args); } }
三、ORM框架的统一接口标准JPA
1、pom文件中添加JPA依赖(JPA底层是对hibernate的再封装,会自动引入hibernate的依赖)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
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后即可对数据库进行操作,不需要写具体实现类。 public interfaceUserRepository extends JpaRepository<User,Integer> { }
如果想在spring data jpa中自己写sql 语句,jpa支持两种扩展方式:
方式1、通过@query 注解指定nativeQuery,这样就可以使用原生sql查询,官方文档示例代码:
public interfaceUserRepository extends JpaRepository<User, Long> { @Query(value ="SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true) UserfindByEmailAddress(String emailAddress); }
方式2、通过Customizingindividual repositories 提供的功能去实现。这种方式通过自定义接口,例如CustomizedUserRepository ,和他的实现类,在实现类里用其他dao框架,如mybatis ,jdbcTemplate ,最后在用UserRepository去继承CustomizedUserRepository接口方式,实现和其他dao 框架的组合使用。
官方文档实例代码:
interfaceCustomizedUserRepository { voidsomeCustomMethod(User user); } classCustomizedUserRepositoryImpl implements CustomizedUserRepository { public voidsomeCustomMethod(User user) { // Your custom implementation } } interfaceUserRepository extends CrudRepository<User, Long>,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
来源:专注一行代码
作者:专注一行代码
猜你喜欢
- 2024-09-08 99MB缓存杀疯!锐龙5 5600X3D实测数据:便宜又大碗!
- 2024-09-08 拼多多员工在脉脉上匿名发贴被辞退!大数据时代没有隐私?
- 2024-09-08 马斯克禁止第三方抓取X数据训练AI模型
- 2024-09-08 已经2021年了,iPhone X还有坚持下去的意义吗?
- 2024-09-08 解读X-32——大嘴巨怪,性能不凡——军用飞机/战斗机/美国X-32
- 2024-09-08 西部数据多款 SSD 通过 SIG 认证:SN850X、SN820、SN770 等型号
- 2024-09-08 速度、精准、便捷-Datacolor SpyderX 红蜘蛛显示器校色仪|大家测503
- 2024-09-08 微软“赢得了胜利”?PS5与Xbox Series X数据曝光
- 2024-09-08 马斯克向OpenAI发起挑战?xAI欲融资40亿美元,X数据成关键卖点!
- 2024-09-08 x官方数据到底有没有虚标,今天直接开测#洗车机
你 发表评论:
欢迎- 07-10公司网站建站选择:人工建站和源码建站分析
- 07-10多用途游戏娱乐新闻网站HTML5模板
- 07-10站长教你搭建属于自己的网站(搭建网站的步骤)
- 07-10php宝塔搭建部署实战响应式塑料封条制品企业网站模板源码
- 07-10自适应响应式汽车配件类网站源码 html5高端大气汽车网站织梦模板
- 07-10网站标签怎么设置?(网站标签怎么设置比较好)
- 07-10PageAdmin企业网站制作中踩过的坑
- 07-10豆包给我输出的html在线象棋源码(有点简单)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)