Mybatis-架构&Dao开发与接口动态代理

Mybatis

学习过的持久层框架:DBUtils , Hibernate

Mybatis就是类似于hibernate的orm持久层框架。

为什么学Mybatis?
1.目前最主流的持久层框架为hibernate与mybatis,而且国内目前情况使用Mybatis的公司比hibernate要多。
2.Hibernate学习门槛不低,要精通门槛更高。门槛高在怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate缓存与数据加载策略方面需要你的经验和能力都很强才行。国内目前前的情况精通hibernate技术大牛非常少。
3.sql优化方面,Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。当然了,Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。说得更深入一些,如果有个查询要关联多张表,比如5张表,10张表时,而且,我们要取的字段只是其中几张表的部分字段。这时用hibernate时就会显得非常力不从心。就算用hibernate的sqlquery,后续的维护工作也会让人发狂。

Mybatis介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
Mybatis是面向sql的持久层框架,他封装了jdbc访问数据库的过程,我们开发,只需专注于sql语句本身的拼装,其它复杂的过程全部可以交给mybatis去完成。

Mybaits入门开发

需求列表
根据用户ID查询用户信息
根据用户名查找用户列表
添加用户
修改用户
删除用户

工程搭建
1.导入依赖jar包
2.配置SqlMapConfig.xml
3.配置log4j.properties
4.pojo
5.配置sql查询的映射文件

完成需求
SqlMapConfig.xml

<?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="sqlMapEnvironment">
        <environment id="sqlMapEnvironment">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybati?serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="Mappers/user.xml"/>
    </mappers>
</configuration>

映射文件与sql

<!-- id:statementId
		 resultType:查询结果集的数据类型
		 parameterType:查询的入参
	-->
	<select id="getUserById" parameterType="int" resultType="pojo.User" >
		SELECT * FROM USER WHERE id = #{id1}
	</select>

MyBatis访问数据库代码

@Test
	public void testGetUserByid() throws IOException {
		// 创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		// 查找配置文件创建输入流
		InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			// 加载配置文件,创建SqlSessionFactory对象
		SqlSessionFactory	sqlSessionFactory = sfb.build(inputStream);
		// 创建SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 执行查询,参数一:要查询的statementId ,参数二:sql语句入参
		User user = sqlSession.selectOne("user.getUserById", 1);

		// 输出查询结果
		System.out.println(user);
		// 释放资源
		sqlSession.close();
	}

抽取SqlSessionFactoryUtils工具类,共享SqlSessionFactory创建过程

/**
 * SqlSessionFactory工具类
 * 
 * @author Steven
 *
 */
public class SqlSessionFactoryUtils {
	
	/**
	 * 单例SqlSessionFactory
	 */
	private static SqlSessionFactory sqlSessionFactory;

	static {
		// 创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		try {
			// 查找配置文件创建输入流
			InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			// 加载配置文件,创建SqlSessionFactory对象
			sqlSessionFactory = sfb.build(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取单例SqlSessionFactory
	 * @return
	 */
	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}

后面程序就可以使用这个工具类了

根据用户名查找用户列表

映射文件与sql

<!-- resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 -->
	<select id="getUserByName" parameterType="string" resultType="com.itheima.mybatis.pojo.User">
		<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>

MyBatis访问数据库代码

@Test
	public void getUserByName() {
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
//List<User> users = sqlSession.selectList("user.getUserByName", "%张%");
		List<User> users = sqlSession.selectList("user.getUserByName", "张");
		for (User user : users) {
			System.out.println(user);
		}

		// 释放资源
		sqlSession.close();

Mybatis架构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Mybatis Dao开发方式

和上面入门程序的使用方式一样。
在这里插入图片描述


官方推荐,接口动态代理

开发规范
在这里插入图片描述

Mapper.xml映射文件
在这里插入图片描述

在这里插入图片描述

目标接口类
在这里插入图片描述
加载映射文件
在这里插入图片描述

测试
在这里插入图片描述

小结

在这里插入图片描述

SqlMapConfig 配置属性

properties属性

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

typeAliases(别名)

1.自定义别名
在这里插入图片描述
在这里插入图片描述

mappers

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值