事务与hibernate

事务

1.把事务打开  begin;
2.写你要执行语句
3.把事务进行提交 commit;
4.把事务回滚 遇到断电 事务没有提交 那么事务会自动回滚 rollback;

原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

事务的隔离级别

赃读:指一个事务读取了另一个事务未提交的数据。

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务提交后的数据。

虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

数据库通过设置事务的隔离级别防止以上情况的发生:
 1.READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。
 2.READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。(oracle默认的)
 3.REPEATABLE READ:避免赃读、不可重复读。虚读有可能发生。(mysql默认)

 4.SERIALIZABLE: 避免赃读、不可重复读、虚读。

级别越高,性能越低,数据越安全

mysql中:
查看当前的事务隔离级别:SELECT @@TX_ISOLATION;

更改当前的事务隔离级别:SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED四个级别之一。

hibernate

1.导入框架

  required文件夹下的所有包

  jpa-metamodel-generator文件夹下的包

  mysql的驱动包

 2.创建hibernate的主配置文件

    默认src下

    名字默认 hibernate.cfg.xml

 3.创建实体类 

   数据库字段名和对象属性名 相同

 4.创建实体类 对应的 配置文件

   命名规范: 实体类名.hbm.xml 

    作用:配置实体类与数据库表的映射关系

 5.从主配置文件中 配置 映射文件的路径

<session-factory >
	<!-- hibernate数据库配置 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>
		<!-- 加载mysql的方言包 core->dialect -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<!-- 开启打印sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 开启格式化sql语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 自动更新表结构  没有表会帮你创建出来表-->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 映射数据库表对应 映射文件的路径 
		    注意:路径从包名开始 并且中间使用反斜杠相隔
		-->
		<mapping resource="com/lanou3g/User.hbm.xml"/>
		
	</session-factory>
<?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">
    
    
    <!-- 配置表与实体类的关系 
    name:实体类的全类名
    table:表名
    package:包名 填上后 全类名可以省略包名
    -->
<hibernate-mapping package="com.lanou3g">
	<class name="User" table="user">
		<!-- id:表示主键 注意:没有主键不能使用hibernate name:类中的成员变量名 column:成员变量代表的表中的字段名 -->
		<id name="id" column="id">
			<!--主键生成策略 主键自增策略 -->
			<generator class="native"></generator>
		</id>
		<!--property 表示除主键意外的属性 -->
		<property name="username" column="username"></property>
		<property name="password" column="password"></property>
	</class>
</hibernate-mapping>

流程

//1.读取主配置文件
		//默认读取src下的hibernate.cfg.xml文件
		Configuration configuration=new Configuration().configure();
		//2.创建session工厂
		//相当于数据库连接池
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		//3.从session工厂 获取session对象
		//获取一个全新的session对象
		Session session = sessionFactory.openSession();
		//通过session操作数据库 
		//4.开启事务
		Transaction transaction = session.beginTransaction();
		//5.操作数据库
		//向数据库插入一条数据(一条记录)
		User user=new User();
		user.setUsername("wanglong");
		user.setPassword("123");
		//将对象保存到数据库中
		session.save(user);
		//6.提交事务
		transaction.commit();
		//7.关闭资源
		session.close();
		sessionFactory.close();

操作数据库部分的语句

1.

//向数据库插入一条数据(一条记录)
		User user=new User();
		user.setUsername("wanglong");
		user.setPassword("123");
		//将对象保存到数据库中
		session.save(user);

2.

User user = session.get(User.class, 1);
		System.out.println(user);
3.
//使用load方法查询
		User load = session.load(User.class, 1);
		System.out.println(load);

4.
//修改对象 根据id
		//根据id把对象查出来
		User user = session.get(User.class, 1);
		user.setUsername("wamg");
		session.update(user);
5.
//删除对象 根据id
		User user=new User();
		user.setId(1);
		session.delete(user);
6.
//查询数据库中的所有user对象
		//Query<User> query = session.createQuery("from com.lanou3g.User");
		Query<User> query = session.createQuery("from User",User.class );
		//从查询的结果集中取出数据 并且取出的是个集合
		List<User> list = query.list();
		for (User user : list) {
			System.out.println(user);
		}
7.
//使用原生sql语句查询
		NativeQuery<Object[]> query = session.createNativeQuery("select * from user where username=?");
		//替换占位符
		//参数1 占位符的索引 从1开始
		//参数2 要替换的值
		query.setParameter(1,"wanglong");
		 List<Object[]> list = query.list();
		for (Object[] objects : list) {
			for (Object object : objects) {
				System.out.print(object+"  ");
			}
			System.out.println();







深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值