C# xaml框架以及Java的ORM介绍

2024-03-22 05:04

本文主要是介绍C# xaml框架以及Java的ORM介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

c#有ASP.Net,.NET以及EF Core这几个重要的运行时和框架.分别用于web,应用以及数据库的ORM.

img

目前跨平台的有Avalonia UI,.Net MAUI以及Uno Platform,至于WPF等本身不是跨平台的,但可以依靠其他库实现跨平台.这里面Avalonia应该是认为bug比较少的.

当然目前最火的跨平台解决方案应该是Flutter,其次是React Native.

至于EF Core,看看代码就知道有多么简洁优雅了.

using var db = new BloggingContext();// Inserting data into the database
db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
db.SaveChanges();// Querying
var blog = db.Blogs.OrderBy(b => b.BlogId).First();// Updating
blog.Url = "https://devblogs.microsoft.com/dotnet";
blog.Posts.Add(new Post{Title = "Hello World",Content = "I wrote an app using EF Core!"});
db.SaveChanges();// Deleting
db.Remove(blog);
db.SaveChanges();

而Java的ORM有Mybatis,Mybatis-plus,Hibernate,Spring Data JPA以及更原始的Jdbctemplate和query dsl.

具体来说,当使用Java和MyBatis编写示例代码时,需要配置MyBatis的环境和数据库连接,并编写映射器接口和SQL映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/example/MyMapper.xml"/></mappers>
</configuration>
package com.example;public class User {private int id;private String name;private int age;// getters and setters
}import java.util.List;public interface UserMapper {void insertUser(User user);void updateUser(User user);void deleteUser(int id);User getUserById(int id);List<User> getAllUsers();
}
<?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.example.UserMapper"><insert id="insertUser" parameterType="com.example.User">INSERT INTO users (name, age) VALUES (#{name}, #{age})</insert><update id="updateUser" parameterType="com.example.User">UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM users WHERE id = #{id}</delete><select id="getUserById" parameterType="int" resultType="com.example.User">SELECT * FROM users WHERE id = #{id}</select><select id="getAllUsers" resultType="com.example.User">SELECT * FROM users</select>
</mapper>
package com.example;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class Main {public static void main(String[] args) {try {// 加载 MyBatis 配置文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 创建 SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 获取 UserMapper 接口的实例UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 插入用户User newUser = new User();newUser.setName("John");newUser.setAge(25);userMapper.insertUser(newUser);System.out.println("Inserted user: " + newUser);// 更新用户User existingUser = userMapper.getUserById(newUser.getId());existingUser.setName("John Doe");userMapper.updateUser(existingUser);System.out.println("Updated user: " + existingUser);// 获取所有用户List<User> allUsers = userMapper.getAllUsers();System.out.println("All users:");for (User user : allUsers) {System.out.println(user);}// 删除用户userMapper.deleteUser(existingUser.getId());System.out.println("Deleted user with ID: " + existingUser.getId());// 提交事务sqlSession.commit();// 关闭 SqlSessionsqlSession.close();} catch (IOException e) {e.printStackTrace();}}
}

使用MyBatis-Plus编写示例代码时,可以省去编写SQL映射文件,因为MyBatis-Plus提供了便捷的CRUD操作方法和自动生成SQL语句的功能。

package com.example;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("users")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;// getters and setters
}import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {
}
package com.example;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication
public class Main {public static void main(String[] args) {// 启动 Spring Boot 应用ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);// 获取 UserMapper BeanUserMapper userMapper = context.getBean(UserMapper.class);// 插入用户User newUser = new User();newUser.setName("John");newUser.setAge(25);userMapper.insert(newUser);System.out.println("Inserted user: " + newUser);// 更新用户User existingUser = userMapper.selectById(newUser.getId());existingUser.setName("John Doe");userMapper.updateById(existingUser);System.out.println("Updated user: " + existingUser);// 查询所有用户QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByAsc("id");IPage<User> userPage = userMapper.selectPage(new Page<>(1, 10), queryWrapper);System.out.println("All users:");for (User user : userPage.getRecords()) {System.out.println(user);}// 删除用户userMapper.deleteById(existingUser.getId());System.out.println("Deleted user with ID: " + existingUser.getId());// 关闭应用上下文context.close();}
}

使用了MyBatis-Plus的注解 @TableName 来指定实体类与数据库表的映射关系,使用了 @TableId 注解来定义主键字段。UserMapper 接口继承了 BaseMapper<User>,这样就可以直接使用MyBatis-Plus提供的CRUD操作方法。

使用Hibernate编写示例代码时,需要配置Hibernate的环境和数据库连接,并编写实体类和Hibernate映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">password</property><property name="hibernate.hbm2ddl.auto">update</property><property name="hibernate.show_sql">true</property><mapping resource="com/example/User.hbm.xml"/></session-factory>
</hibernate-configuration>
package com.example;import javax.persistence.*;@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "name")private String name;@Column(name = "age")private Integer age;// getters and setters
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping><class name="com.example.User" table="users"><id name="id" column="id"><generator class="identity"/></id><property name="name" column="name"/><property name="age" column="age"/></class>
</hibernate-mapping>
package com.example;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import java.util.List;public class Main {public static void main(String[] args) {// 加载 Hibernate 配置Configuration configuration = new Configuration().configure();SessionFactory sessionFactory = configuration.buildSessionFactory();// 创建 SessionSession session = sessionFactory.openSession();// 开启事务Transaction transaction = session.beginTransaction();// 插入用户User newUser = new User();newUser.setName("John");newUser.setAge(25);session.save(newUser);System.out.println("Inserted user: " + newUser);// 更新用户User existingUser = session.get(User.class, newUser.getId());existingUser.setName("John Doe");session.update(existingUser);System.out.println("Updated user: " + existingUser);// 查询所有用户List<User> allUsers = session.createQuery("FROM User", User.class).getResultList();System.out.println("All users:");for (User user : allUsers) {System.out.println(user);}// 删除用户session.delete(existingUser);System.out.println("Deleted user with ID: " + existingUser.getId());// 提交事务transaction.commit();// 关闭 Sessionsession.close();// 关闭 SessionFactorysessionFactory.close();}
}

使用Hibernate的注解 @Entity@Table@Id@Column 来定义实体类与数据库表的映射关系和字段信息。Hibernate映射文件 User.hbm.xml 也定义了实体类与数据库表的映射关系。

当使用Spring Data JPA编写示例代码时,可以利用Spring Data JPA提供的接口和方法来进行数据库操作,而无需编写大量的重复代码。

package com.example;import javax.persistence.*;@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "name")private String name;@Column(name = "age")private Integer age;// getters and setters
}
import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<User, Long> {
}
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;import java.util.List;@SpringBootApplication
public class Main {public static void main(String[] args) {// 启动 Spring Boot 应用ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);// 获取 UserRepository BeanUserRepository userRepository = context.getBean(UserRepository.class);// 插入用户User newUser = new User();newUser.setName("John");newUser.setAge(25);userRepository.save(newUser);System.out.println("Inserted user: " + newUser);// 更新用户User existingUser = userRepository.findById(newUser.getId()).orElse(null);existingUser.setName("John Doe");userRepository.save(existingUser);System.out.println("Updated user: " + existingUser);// 查询所有用户List<User> allUsers = userRepository.findAll();System.out.println("All users:");for (User user : allUsers) {System.out.println(user);}// 删除用户userRepository.deleteById(existingUser.getId());System.out.println("Deleted user with ID: " + existingUser.getId());// 关闭应用上下文context.close();}
}

此外使用JPA与querydsl结合的也很多.QueryDSL仅仅是一个通用的查询框架,专注于通过 JavaAPI 构建类型安全的 Sql 查询

package com.example;import javax.persistence.*;@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "name")private String name;@Column(name = "age")private Integer age;// getters and setters
}
package com.example;import com.querydsl.core.types.dsl.StringExpression;
import com.querydsl.core.types.dsl.StringPath;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.stereotype.Repository;@Repository
public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {// 定义自定义查询方法default User findByName(String name) {JPAQueryFactory queryFactory = new JPAQueryFactory(getEntityManager());QUser user = QUser.user;return queryFactory.selectFrom(user).where(user.name.eq(name)).fetchOne();}// 使用Querydsl的字符串表达式进行模糊查询default Iterable<User> findByNameLike(String name) {JPAQueryFactory queryFactory = new JPAQueryFactory(getEntityManager());QUser user = QUser.user;StringExpression nameExpression = user.name;return queryFactory.selectFrom(user).where(nameExpression.likeIgnoreCase("%" + name + "%")).fetch();}
}
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;import java.util.List;@SpringBootApplication
public class Main {public static void main(String[] args) {// 启动 Spring Boot 应用ConfigurableApplicationContext context = SpringApplication.run(Main.class, args);// 获取 UserRepository BeanUserRepository userRepository = context.getBean(UserRepository.class);// 插入用户User newUser = new User();newUser.setName("John");newUser.setAge(25);userRepository.save(newUser);System.out.println("Inserted user: " + newUser);// 更新用户User existingUser = userRepository.findByName("John");existingUser.setName("John Doe");userRepository.save(existingUser);System.out.println("Updated user: " + existingUser);// 查询所有用户List<User> allUsers = userRepository.findAll();System.out.println("All users:");for (User user : allUsers) {System.out.println(user);}// 根据名称模糊查询用户List<User> usersWithNameLike = userRepository.findByNameLike("John");System.out.println("Users with name like 'John':");for (User user : usersWithNameLike) {System.out.println(user);}// 删除用户userRepository.delete(existingUser);System.out.println("Deleted user with ID: " + existingUser.getId());// 关闭应用上下文context.close();}
}

这篇关于C# xaml框架以及Java的ORM介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834583

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.