2.ORM框架----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;
		}
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值