Java持久层框架-Mybatis

基础

概念

历史:
	MyBatis前身是iBatis,源自于Apache公司,现属于Google Code;
定义:
	MyBatis是支持定制化、存储过程以及高级映射的持久层框架;
		定制化--》指的是sql语句需要用户自己编写;
		高级映射 --》 低级映射是数据库表字段与java对象属性名一一对应才行,高级映射可以通过某种手段实现不对应也可以操作;
	避免所有的JDBC代码和手动设置参数以及获取结果集;
		是对JDBC的封装;结果通过映射成对应的对象实现获取;
	可以使用简单XML或者注解用于配置和构建映射,将接口和java的POJO映射成数据库中的记录;
	是一个半自动的ORMObject Relation Mapping)框架;
		纯手动=jdbc,半自动=大部分jdbc都已经封装了,但有sql语句需要自己编写,全自动=Hibernate 只需要配置就可生成sql语句以及数据库表
		ORM--》对象关系映射,对象=java的实例类对象 关系=数据库中的关系型数据 将两者建立一个映射,操作数据通过操作对应的对象来实现。
下载及安装:
	https://blog.csdn.net/weixin_44719263/article/details/126111884

持久层框架比较

主要含有:JDBC、Hibernate、JPA、MyBatis

JDBC
	sql语句写在java代码中,导致硬编码内伤;
	频繁修改,不宜维护
	代码冗长,效率低
HibernateJPA
	不需要写sql语句,操作简单,开发效率高
	sql如果复杂,则需要绕过框架
	内部生成sql,不容易优化
	基于全映射的自动框架,大量字段的POJO进行部分映射时比较困难;当某个表的字段超级多,且某次查询只需要某几个字段时,会较为困难;
	反射操作太多,导致数据库性能下降
MyBatis
	轻量级、性能出色
	sql与java编码分开,涉及到配置文件、sql文件,功能边界清晰;
	开发效率稍逊于Hibernate

环境搭建及工程创建

运行以及编辑环境:idea 
	需要配置jdk:一般采用1.8版本
配置maven:
	在setting中设置;
	idea中有默认maven,版本是3.6.1
	maven的配置文件setting.xml
	依赖库是repository文件夹;
	打包方式:pom中写成jar包
创建工程:导入依赖junit、mysql-connector-java、mybatis
mysql:
mybatis:
	配置文件:核心配置文件和映射文件;
	核心配置文件:默认名字是mybatis-config.xml 在项目/src/resourse

核心配置文件

<?xml version="1.0"encoding="UTF-8"?>
<!-- xml配置文件的声明 -->
<!--  -->
<!DOCTYPE configuration
	PUBLIC"-//mybatis.org//DTD config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
	# mybatis配置文件的约束,其中doctype后面的是根标签
# 根标签	
<configuration>
# 配置连接数据库的环境
	<environments default="development">
		<environment id="development">
		# 事务管理方式,类型type设置
			<transactionManager type="JDBC"/>
			# 数据源
			<datasource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password"value="${password}"/>
			</datasource>
		</environment>
	</environments>
	# 引入映射文件
	<mappers>
		<mapper resource="org/mybatis/example/BlogMapper.xml"/>
	</mappers>
</configuration>

xxxMapper.xml文件

<?xml version="1.0"encoding="UTF-8”?>
# xml文件的声明
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	# mybatis配置文件的约束,其中doctype后面的是根标签
<mapper namespace="org.mybatis.example.BlogMapper">
	# 命名空间 namespace与mapper接口的全限定类名保持一致;
	<select id="selectBlog" resultType="Blog">
	# 其中id的值与mapper接口中调用的方法名一致;
		select *from Blog where id = #{id}
	</select>
</mapper>

mybatis实现过程

1. mybatis-config.xml核心配置文件;
2. 数据库表 t_user;
3. 实体类,字段与表t_user属性名相同;如果不想一致,则需要采用tableFile注解;(该内容是mybatis-plus中的)
4. mapper接口;
	mbatis有面向接口编程,当调用接口中的方法,会自动匹配一个sql语句执行;
	创建mapper接口,不需要具体实现类;
5. mybatis映射文件,xxx.xml文件;
	java与数据库之间的对应关系:类-表,属性-字段,对象-记录;
	文件命名:实体类+Mapper.xml 与mapper接口名字相同,只有后缀不同;
	映射文件的namespace要和mapper接口的全类名一致;
	映射文件中sql语句的id要和mapper接口中方法名一致;
6. 将xxx.xml文件配置到mybatis-config.xml文件的mappers中	

junit测试mybatis及优化

代码位于:项目/src/test中;

执行过程:
//加载核心配置文件:
	InputStream is = Resources.getResourceAsStream("mybatis-config.xml")// Resources 是 org.apache.ibatis.io
	// getResourceAsStream 获取当前文件的字节输入流;
//获取SqlSessionFactoryBuilder对象:
	SqlSessionFactoryBuilder sqlSessionFactoryBuiler = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象:
	SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession对象:
	SqlSession sqlSession = sqlSessionFactory.openSession();
	// SqlSession是java程序与数据库之间的会话;
//获取mapper接口对象:
	xxxMapper xxxmapper = sqlSession.getMapper(xxxMappper.class);
	// getMapper底层使用的是代理模式获取mapper接口对象;
//测试功能:
	int result = xxxmapper.function();		
// 提交事务
	// 保证操作的实现,因为mybatis-config.xml配置文件中,操作都采用JDBC方式;
	sqlSession.commit();

优化:

1. 是否可以将提交改成自动提交;
//获取SqlSession对象:
	SqlSession sqlSession = sqlSessionFactory.openSession();
// 该方法openSession中的参数,autoCommit参数,默认是false 不进行自动提交;
// 设置为true,则自动提交;

2. 通过日志功能检测当前sql执行情况
通过log4j实现;
依赖导入,pom文件中引入log4j依赖;
创建log4j.xml
	级别:fatal致命》error错误》warn警告》info信息》debug调试
	级别越低,记录信息越多;

log4j.xml文件

<xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE 1og4j:configuration SYSTEM "1og4j.dtd">

<log4j:configuration xmlns:1og4j="http://jakarta.apache.org/1og4j/">
	<appender name="sTDouT" class="org.apache.1og4j.consoleAppender">
		<param name="Encoding" value="UTF-8"/>
		<layout class="org.apache.1og4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,sss} %m(%F:%L)\n"/>
		</layout>
	</appender>
<logger name="java.sql">
	<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
	<level value="info" />
</logger>	
<root>
	<level valuee= "debug"/>
	<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

查询sql语句

查询结果类型:    一行数据;多行数据;单行单列数据;
对应的java类型为:java对象、集合类型、普通变量类型

当查询结果是一行数据、多行数据时,必须xml中添加resultType或resultMap;
	添加的返回值,都设置为对象的类的全限定类名;
	resultType:设置的默认的映射关系;
	resultMap:设置自定义的映射关系;
需要xxxMapper.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="org.mybatis.example.BlogMapper">
	<select id="selectBlog" resultType="Blog">
		select *from Blog where id = #{id}
	</select>
</mapper>	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值