2.ORM框架----mybatis

本文详细介绍了MyBatis框架的搭建过程,包括环境配置、实体类与DAO层的创建,以及如何通过MyBatis进行数据库的增删改查操作。同时,深入解析了MyBatis的工作原理。

框架:程序的半成品,是某些功能的封装,简化操作,提高开发效率


一.ORM类型框架:

Object Relational Mapping 对象关系映射
在这里插入图片描述
原理:把java中的对象(的属性)和数据库中的表(中的列)进行关联映射,简化了JDBC的增删改查操作


二.mybatis框架的搭建

  • 1、新建动态web项目,拷贝jar到lib文件夹下
  • 2、在项目下 新建资源目录 在新建db.properties文件
    编写数据库的连接信息

    在这里插入图片描述
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket
user=root
pwd=cuichen975541045
  • 3、在resource下,创建mybatis的配置文件
    名字任意.xml
    mybatis-3-config.dtd dtd 文档类型声明:规定了mybatis的配置文件
    里面必须包含哪些标签,标签必须有哪些属性
<?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>
	<!-- 1.   引入数据库连接信息的存放文件 -->
	<properties resource="database.properties"></properties>
	<!-- 2.  给实体类命名别名:可以通过别名来使用类,否则需要使用使用类的完全限定名 -->
	<typeAliases>
		<!-- 命名别名方式1 -->
		<!-- 
			<typeAlias type="cn.qf.smbms.pojo.UserRole" alias="UserRole"/>
		 -->
		 <!-- 方式2:告知Mybatis实体类的位置 -->
		 <package name="cn.qf.smbms.pojo"/>
	</typeAliases>
	<!-- 3.  配置数据库的连接信息 -->
	<environments default="mysqldb">
		<environment id="mysqldb">
			<!-- 
			配置事物管理机制
			JDBC:使用JDBC来管理事务(官方推荐)
			MANAGED:由mybatis进行事物管理
			 -->
			 <transactionManager type="JDBC">
			 	<!-- 设置是否自动提交事物:true 自动提交事务  false 非自动提交 -->
			 	<property name="autoCommit" value="true"></property>
			 </transactionManager>
			 <!-- POOLED:JDBC默认的连接管理 -->
			 <dataSource type="POOLED">
			 	<!-- 配置mybatis连接数据库信息 -->
			 	<!-- 获取数据库连接信息方式1:通过读取配置文件获取 -->
			 	<property name="driver" value="${driverClass}"/>
			 	<property name="url" value="${url}"/>
			 	<property name="username" value="${user}"/>
			 	<property name="password" value="${pwd}"/>
			 </dataSource>
		</environment>
	</environments>
	<!-- 4.   配置dao接口的映射文件位置 -->
	<mappers>
		<mapper resource="cn/qf/smbms/dao/UserMapper.xml"></mapper>
	</mappers>
</configuration>

database.properties

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/supermarket
user=root
pwd=cuichen975541045

configuration配置:

  • properties属性
  • typeAliases类型命名别名
  • environments 环境
    • environment 环境变量
      1) transactionManager 事务管理器
      2) dataSource 数据源
  • mappers 映射器
  • 4、封装mybatis操作数据库的工具类

    mybatis的工作原理

    1)、通过mybatis封装的流读取mybatis的xml配置文件
    2)、创建SqlSessionFactoryBuilder 对象
    生命周期:局部变量级别,创建完对象后就销毁
    作用:创建SqlSessionFactory
    3)、通过步骤2得到SqlSessionFactory
    生命周期:和程序一致,只要程序运行SqlSessionFactory就存在
    作用:创建访问数据库的session
    4)、通过SqlSessionFactory 得到session对象
    作用:通过session来完成数据库的增删改查操作
    生命周期:当session的关闭方法调用后,session消失,
    【说明】在session关闭之前可以进行多个SQL操作
    session是线程级别

package cn.qf.smbms.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	
	//通过静态代码块读取配置文件
	static {
		try {
			//通过流读取配置文件
			InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
			factory=new SqlSessionFactoryBuilder().build(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//获取session的方法
	public static SqlSession getSqlSession() {
		return MyBatisUtil.factory.openSession();
	}
	
	//关闭session的方法
	public static void closeSqlSession(SqlSession session) {
		if (session!=null) {
			session.close();
		}
	}
}

  • 5、创建实体类
    别名注解 属性名最好和列名一致

  • 6、编写dao
    【说明】 1)、mybatis基于接口编程
    2)、mybatis基于SQL 编写实体类和表映射的文件

在映射文件中 通过namespace把映射文件和接口进行关联

dao层
UserDao.java

package cn.qf.smbms.dao;

import cn.qf.smbms.pojo.User;

//编写关于smbms_user表的增删改查方法
public interface UserDao {
	
	//添加方法
	public int addUser(User user);
	
	//修改方法
	public int updateUser(User user);
	
	//删除方法
	public int deleteUser(int id);
}

UserMapper.xml

<?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="cn.qf.smbms.dao.UserDao">
	<!-- 接口中的每一个方法,在此映射文件中,都要有与之关联的sql语句 -->
	<!-- 
		id:对应接口中的方法名
		patameterType:方法的参数类型
		对应insert update delete 的返回值默认是int类型,无需设置
	 -->
	 <insert id="addUser" parameterType="User">
	 	<!-- 编写sql语句 -->
	 	insert into smbms_user(userCode,userName,userPassword)
	 	values
	 	(#{userCode},#{userName},#{userPassword})
	 </insert>
	 <update id="updateUser" parameterType="User">
	 	update smbms_user set userCode=#{userCode},userName=#{userName}
	 	where id=#{id}
	 </update>
	 <delete id="deleteUser" parameterType="Integer">
	 	delete from smbms_user where id=#{id}
	 </delete>
</mapper>

service层:(一定要加try-catch!!!)

	public boolean addUser(User user) {
		//调用dao中的方法
		//mybatis把dao中的接口及接口的关联文件自动生成实现类,且实现接口中的方法
		//1.通过工具类得到sqlsession
		SqlSession session=null;
		int ret=0;
		try {
			session = MyBatisUtil.getSqlSession();
			//利用反射 调用的是实现类的方法
			ret = session.getMapper(UserDao.class).addUser(user);
			//提交事务
			session.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			//回滚事务
			session.rollback();
		}finally {
			//关闭session
			MyBatisUtil.closeSqlSession(session);;
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean update(User user) {
		SqlSession session = null;
		int ret=0;
		try {
			session = MyBatisUtil.getSqlSession();
			ret = session.getMapper(UserDao.class).updateUser(user);
			session.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			session.rollback();
		}finally {
			MyBatisUtil.closeSqlSession(session);
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean deleteUser(int id) {
		SqlSession session = null;
		int ret = 0;
		try {
			session = MyBatisUtil.getSqlSession();
			ret = session.getMapper(UserDao.class).deleteUser(id);
			session.commit();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			session.rollback();
		} finally {
			MyBatisUtil.closeSqlSession(session);
		}
		if (ret==1) {
			return true;
		}else {
			return false;
		}
	}

在这里插入图片描述

**项目概述:** 本资源提供了一套采用Vue.js与JavaScript技术栈构建的古籍文献文字检测与识别系统的完整源代码及相关项目文档。当前系统版本为`v4.0+`,基于`vue-cli`脚手架工具开发。 **环境配置与运行指引:** 1. **获取项目文件**后,进入项目主目录。 2. 执行依赖安装命令: ```bash npm install ``` 若网络环境导致安装缓慢,可通过指定镜像源加速: ```bash npm install --registry=https://registry.npm.taobao.org ``` 3. 启动本地开发服务器: ```bash npm run dev ``` 启动后,可在浏览器中查看运行效果。 **构建与部署:** - 生成测试环境产物: ```bash npm run build:stage ``` - 生成生产环境优化版本: ```bash npm run build:prod ``` **辅助操作命令:** - 预览构建后效果: ```bash npm run preview ``` - 结合资源分析报告预览: ```bash npm run preview -- --report ``` - 代码质量检查与自动修复: ```bash npm run lint npm run lint -- --fix ``` **适用说明:** 本系统代码经过完整功能验证,运行稳定可靠。适用于计算机科学、人工智能、电子信息工程等相关专业的高校师生、研究人员及开发人员,可用于学术研究、课程实践、毕业设计或项目原型开发。使用者可在现有基础上进行功能扩展或定制修改,以满足特定应用场景需求。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【EI复现】基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(Matlab代码实现)内容概要:本文介绍了基于阶梯碳交易机制的虚拟电厂优化调度模型,重点研究了包含P2G-CCS(电转气-碳捕集与封存)耦合技术和燃气掺氢技术的综合能源系统在Matlab平台上的仿真与代码实现。该模型充分考虑碳排放约束与阶梯式碳交易成本,通过优化虚拟电厂内部多种能源设备的协同运行,提升能源利用效率并降低碳排放。文中详细阐述了系统架构、数学建模、目标函数构建(涵盖经济性与环保性)、约束条件处理及求解方法,并依托YALMIP工具包调用求解器进行实例验证,实现了科研级复现。此外,文档附带网盘资源链接,提供完整代码与相关资料支持进一步学习与拓展。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的研究生、科研人员或从事综合能源系统、低碳调度方向的工程技术人员;熟悉YALMIP和常用优化算法者更佳。; 使用场景及目标:①学习和复现EI级别关于虚拟电厂低碳优化调度的学术论文;②掌握P2G-CCS、燃气掺氢等新型低碳技术在电力系统中的建模与应用;③理解阶梯碳交易机制对调度决策的影响;④实践基于Matlab/YALMIP的混合整数线性规划或非线性规划问题建模与求解流程。; 阅读建议:建议结合提供的网盘资源,先通读文档理解整体思路,再逐步调试代码,重点关注模型构建与代码实现之间的映射关系;可尝试修改参数、结构或引入新的约束条件以深化理解并拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值