Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World
Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
Java Spring Boot VS .NetCore (三)Ioc容器处理
Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
Java Spring Boot VS .NetCore (七) 配置文件
Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper
Java操作数据库的方式用很多可以用JDBC自己去处理 也可以用通过Spring Data JPA 中封装的Hibernate来完成
添加相关的配置
Spring.datasource.url=jdbc:mysql://192.168.0.233:3306/test1?useSSL=false
Spring.datasource.username=uoso
Spring.datasource.password=uosotech_123
Spring.datasource.driver-class-name=com.mysql.jdbc.Driver Spring.jpa.properties.hibernate.hbm2ddl.auto=update
Spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Spring.jpa.show-sql= true
接下来通过.NetCore 中的EFCore 来对比下 两种语言操作数据库的方式
Java JDBC vs .NetCore ADO.NET
这些都是操作数据库底层的东西下面我们来看下有什么区别
先看下Java JDBC代码
下面说下步骤
首先 DriverManager.getConnection 来创建连接,然后通过 连接创建语句Statement, 最后执行 语句块中的sql 代码
主要方法大概就是 executeQuery 、executeUpdate
public class JDBCHelper {
public static Connection getConnection() throws Exception
{
return DriverManager.getConnection("jdbc:mysql://192.168.0.233:3306/test1?useSSL=false","uoso",
"uosotech_123");
}
public static void ExcuteQuery(String sql) throws Exception
{
Connection connection=getConnection();
try {
Statement statement = connection.createStatement();
ResultSet data = statement.executeQuery(sql);
int count= data.getMetaData().getColumnCount();
System.out.println("============================");
while (data.next()) {
for (int i = 1; i <= count; i++) {
System.out.print(data.getString(i) + "\t");
if ((i == 2) && (data.getString(i).length() < 8)) {
System.out.print("\t");
}
}
System.out.println("");
}
System.out.println("============================");
statement.close();
connection.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
public static int ExcuteUpdate(String sql) throws Exception{
Connection connection=getConnection();
Statement statement= connection.createStatement();
int result= statement.executeUpdate(sql);
statement.close();
connection.close();
return result;
}
}
ADO.NET 中怎么实现 下面以Sqlserver为例子,不同的数据库 操作类不同而已 简要的介绍下:
首先 创建 SqlConnection 对象 构造连接字符串
其次 创建 SqlCommond对象 执行相关SQL语句
最后通过 ExecuteNonQuery 、ExecuteScaler 执行相关操作
对于数据集上的问题 Java通过 ResultSet 而 .NetCore 中则是通过 SqlDataReader 读取 填充 DataSet , ResultSet 与 DataSet 其实有异曲同工之妙
Spring Boot JPA Hibernate vs .NetCore EFCore
EFCore中有CodeFirst方式 而 DataBase First ,这里就以 CodeFirst来对比,其实这两个也是非常类是的
Hibernate代码
@Entity(name = "user_model")
public class UserModel implements Serializable { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false,unique = true)
private String username;
@Column(nullable = true)
private String passWord;
@Column(nullable = true)
private String email;
@Column(nullable = true)
private String nickName;
@Column(nullable = true)
private String regTime;
@Column(nullable = true)
private String newname;
// 略 geter seter
}
EFCore 代码 ,原则上是可以不写标签的,这里就特殊自定义设置来说明
[Table("Tb_Room")]
public class RoomModel : EntityBase
{
/// <summary>
/// 教室名称
/// </summary>
[Column("Room_Name", Order = 1, TypeName = "varchar")]
public string RoomName { get; set; }
/// <summary>
/// 教室描述
/// </summary>
public string RoomDecription { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Order { get; set; }
}
通过上面的代码可以看到 Hibernate中的 @Entity 注解 其实 很 EFCore中的 Table属性标签 是一个原理 包括用法其实都一样 列(Column)也是一样的用法,通过这些对比可以了解到Spring Data JPA 与 EFCore使用上的不同
在使用上 JPA 提供了相关的 仓储代码 JpaRepository 里面提供了很多操作方法 写法上有一些讲究(这里就略掉了.....)
同样 在 EFCore中 分装的DbSet<TEntity> 、IQueryable<TEntity> 也能提供相关操作
下面看下Java代码
public interface UserRepository extends JpaRepository<UserModel, Long> {
@Query("select u from user_model u")
Page<UserModel> findLYM(Pageable pageable);
@Transactional(timeout = 10)
@Modifying
@Query("update user_model set username = ?1 where id = ?2")
int modifyById(String username, Long id);
}
这是自定义的方法,通过相关注解完成操作
下面来测试下 JDBC的代码以及 Spring Data JPA (Hibernate)的单元测试效果
@Test
public void testJDBCSql() throws Exception
{
int result= JDBCHelper.ExcuteUpdate("update user_model set username='123123123123' where id=4");
System.out.print(result);
} @Test
public void testJDBCQuery() throws Exception
{
JDBCHelper.ExcuteQuery("select * from user_model where id=1");
}
通过以上单元测试可以得到想要的效果
测试下 Hibernate 也能得到相关的效果,同时Hibernate还自动根据Enitty为我们创建好了相关的表结构 也是非常方便的 ,Hibernate中还分装了 分页 等各种操作
@Test
public void addUser()
{
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
String formattedDate = dateFormat.format(date);
userRepository.save(new UserModel("zhangsan","zhangsan",
"805717775@qq.com","zhangsan",formattedDate,"ABC")); }
@Test
public void getPager()
{
int page=1,size=10;
Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable=new PageRequest(page,size,sort);
Page<UserModel> userModels= userRepository.findLYM(pageable);
for(UserModel item : userModels){
System.out.println(item.getNickName());
}
}
关于数据库操作这一块还可以用MyBatis ,下一章节继续对比 EFCore vs MyBatis ORM 框架
Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore的更多相关文章
- Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Spring Boot系列(四):Spring Boot源码解析
一.自动装配原理 之前博文已经讲过,@SpringBootApplication继承了@EnableAutoConfiguration,该注解导入了AutoConfigurationImport Se ...
- spring boot: spring-data-jpa (Repository/CrudRepository) 数据库操作, @Entity实体类持久化
SpringBoot实现的JPA封装了JPA的特性, Repository是封装了jpa的特性(我是这么理解的) 1在pom.xml引入mysql, spring-data-jpa依赖 2.在src/ ...
- Spring Boot 实用MyBatis做数据库操作
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- spring boot web 开发及数据库操作
推荐网站http://springboot.fun/ 1.json 接口开发 2.自定义 filter 3.自定义 property 4.log 配置 5.数据库操作 6.测试
- Java Spring Boot VS .NetCore (一)来一个简单的 Hello World
系列文章 Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filte ...
- Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Java Spring Boot VS .NetCore (三)Ioc容器处理
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
随机推荐
- 根据 Power BI Desktop(预览版)中的报表页创建工具提示
根据 Power BI Desktop 中创建的报表页,可创建直观丰富的报表工具提示,这些提示在你将鼠标悬停在视觉对象上时显示. 通过创建用作工具提示的报表页,使自定义工具提示包含视觉对象.图像以及在 ...
- Redis DeskTop Manager 使用教程
redis desktop manager windows 是一款能够跨平台使用的开源性redis可视化工具. redis desktop manager主要针对redis开发设计,拥有直观强大的可视 ...
- SpringMvc的自动装箱和GET请求参数可以为自定义对象的思考
在我的概念里边,GET请求需要加上注解@RequestParam,然后它的参数类型只能是 基本数据类型 或者 基本数据类型的包装类,比如:@RequestParam String name(默认是必传 ...
- RBAC权限管理系统
RBAC--基于角色的权限管理系统 优势: 1. 简化了用户和权限的关系 2. 易扩展,易于维护 3. RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方 ...
- CF24D Broken robot
题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这 ...
- MySQL_表锁_lock tables tableName read
pre.环境准备 1.建立两个表S,T,并插入一些数据 --创建表S create table S(d int) engine=innodb; ); --创建表T create table T(c i ...
- 第三节:SignalR之PersistentConnection模型详解(步骤、用法、分组、跨域、第三方调用)
一. 承上声明 在上一个章节里,啰里啰嗦写了一堆关于介绍SignalR的“废话”,从这一篇开始往后正式撸代码,这期间不少人(包括 张善友大哥)建议我直接用.Net Core下的SignalR,关于此简 ...
- 9、el表达式的使用
一.EL表达式的作用: 1).使用变量访问web域中存储的对象 ${user } 2).访问javabean的属性 ${user.address.city } 3).执行基本的逻辑运算(el表达式 ...
- Linux下使用crontab对MYSQL进行备份以及定时清
数据备份是一个项目必需的工作,保证数据库出问题时,将损失减小到最低.本文记录下linux服务器中使用脚本对MYSQL数据备份,并且定时清除7天前的备份. crontab定时备份 1.创建备份目录 ...
- SpringBatch框架简介
概观 轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序. Spring Batch提供了可重复使用的功能,这些功能对于处理大量记录至关重要,包括记录/跟踪,事务管理,作 ...