1.Mybatis环境搭建及三种查询方式(eclipse-jar方式)

什么是框架

  1. 框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础上进行扩充.
  2. 框架中一些不能被封装的代码(变量),需要使用框架者新建一个xml 文件,在文件中添加变量内容.
    • 需要建立特定位置和特定名称的配置文件.
    • 需要使用 xml 解析技术和反射技术.
  3. 常用概念
    • 类库:提供的类没有封装一定逻辑.
      举例:类库就是名言警句,写作文时引入名言警句
    • 框架:区别与类库,里面有一些约束.
      举例:框架是填空题

MyBatis 简介

  1. Mybatis 开源免费框架.原名叫iBatis,2010在googlecode,2013年迁移到 github

作用: 数据访问层框架
+ 底层是对 JDBC 的封装
mybatis 优点之一
+ 使用mybatis时不需要编写实现类,只需要写需要执行的sql命令

环境搭建

  1. 导入 jar
    在这里插入图片描述

  2. 在 src下新建全局配置文件(编写 JDBC 四个变量) 建立在src下边是因为会转为classes文件,这样可以轻松通过classpath:找到它

  • 没有名称和地址要求
  • 在全局配置文件中引入 DTD 或 schema
    • 如果导入dtd后没有提示,Window–>preference–>XML–>XMlcatalog–>add 按钮

在这里插入图片描述

  1. 全局配置文件内容
<?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>
	<!-- default 引用 environment 的 id,当前所使用的环境 --> 
    <!-- 和spring整合后 environments配置将废除 -->
	<environments default="default"> 
	<!-- 声明可以使用的环境 --> 
    <!-- environments下边又有多个environment,可以有多个环境(测试,开发...),如需更改,直接更改default		的值即可 -->
	<environment id="default"> 
        <!-- 使用原生 JDBC 事务 --> 
        <transactionManager type="JDBC"></transactionManager> 
        <!-- 数据库连接池 -->
        <dataSource type="POOLED"> 
            <property name="driver" value="com.mysql.jdbc.Driver"/> 
            <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> 
            <property name="username" value="root"/> 
            <property name="password" value="123456"/> 
        </dataSource> 
    </environment> 
    </environments>
    <!-- 加载映射文件 -->
	<mappers> 
        <mapper resource="com/buendia/mapper/FlowerMapper.xml"/> 
    </mappers> 
</configuration>
	
  1. 新建以 mapper 结尾的包,在包下新建:实体类名+Mapper.xml
    • 文件作用:编写需要执行的 SQL 命令
    • 把 xml 文件理解成__实现类__
    • 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">
<!-- namesapce:理解成实现类的全路径(包名+类名) --> 
<mapper namespace="a.b" >
<!-- 	id:方法名 
		parameterType:定义参数类型 
		resultType:返回值类型
		如果方法返回值是 list,在 resultType 中写 List 的泛型
		因为 mybatis 对 jdbc 封装,一行一行读取数据 --> 
    <select id="selAll" resultType="com.bjsxt.pojo.Flower"> 
        select * from flower 
    </select> 
</mapper>
  1. 测试结果(只有在单独使用 mybatis 时使用,最后 ssm 整合时下面代码不需要编写)
	main...
		InputStream is = null;
		SqlSession session = null;
		try {
				// 加载配置文件
			is = Resources.getResourceAsStream("mybatis.xml");
				// 使用了工厂设计模式(拿到工厂类),build设计模式
			SqlSessionFactory factory = 
			new SqlSessionFactoryBuilder().build(is);
				// 生产出Session
			session = factory.openSession();

				// 拿到查询结果,注意,参数为FlowerMapper.xml文件中的类全路径名
				// +方法名(因为此方法就是用来执行查询的)
			List<Flower> flowers =
			session.selectList
			("com.buendia.dao.impl.FlowerDaoImpl.selAll");
			flowers.forEach(System.out::println);
			....

环境搭建详解

  1. 全局配置文件中内容
    • type 属性可取的值
      • JDBC,事务管理使用 JDBC 原生事务管理方式(因为mybatis底层就是JDBC封装),不用spring时值为JDBC即可
      • MANAGED 把事务管理转交给其他容器.原生 JDBC 事务setAutoMapping(false);如果type是这个值,我们就可以把事务管理交给spring处理
    • 的type 属性(3个值)
      • POOLED 使用数据库连接池
      • UNPOOLED 不使用数据库连接池,和直接使用 JDBC 一样
      • JNDI:java 命名目录接口技术(用java去调用其它技术)

数据库连接池

  1. 在内存中开辟一块空间,存放多个数据库连接对象
  2. JDBC Tomcat Pool:直接由 tomcat 产生数据库连接池(context文件)
  3. 图示
  • active 状态:当前连接对象被应用程序使用中
  • Idle 空闲状态:等待应用程序使用

在这里插入图片描述

  1. 使用数据库连接池的目的
  • 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率
    • 小型项目不适用数据库连接池
  1. 实现 JDBCtomcatPool 的步骤
  • 在 web 项目的 META-INF 中存放 context.xml,在 context.xml 编写数据库连接池相关属性
<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
	<Resource 
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/ssm" 
		username="root"
		password="smallming" 
		maxActive="50" 
		maxIdle="20" 
		name="test" 
		auth="Container" 
		maxWait="10000" 
		type="javax.sql.DataSource"
	/> 
</Context>
  • 把项目发布到tomcat中,数据库连接池产生了
  1. 可以在 java 中使用 jndi 获取数据库连接池中对象
    • Context:上下文接口.context.xml 文件对象类型
    • 代码(主要):
...
//以下是JNDI代码
Context cxt = new InitialContext(); 
DataSource ds = (DataSource) cxt.lookup("java:comp/env/test"); 
Connection conn = ds.getConnection();
...
  • 当关闭连接对象时,把连接对象__归还__给数据库连接池,把状态改变成 Idle

三种查询方式

  1. selectList() 返回值为 List<resultType 属性控制>
  • 适用于查询结果都需要遍历的需求
List<Flower> list = session.selectList("a.b.selAll"); 
for (Flower flower : list) { 
	System.out.println(flower.toString());
}
  1. selectOne() 返回值 Object
  • 适用于返回结果只是变量或一行数据时
int count = session.selectOne("a.b.selById"); 
System.out.println(count);
  1. selectMap() 返回值 Map
  • 适用于需要在查询结果中通过某列的值取到这行数据的需求
  • Map<key,resultType 控制>
Map<Object, Object> map = session.selectMap("a.b.c", "name123"); 
System.out.println(map);

要点

  • mybatis的autoMapping特性,查询时mybatis是怎么知道每一列怎么对应的?通过自动映射机制,根据setXxx(),自动找到数据库中对应的列(3.2之前版本),现在不写set,get方法也能找到(直接通过反射找属性)
    因为是反射,所以实体属性名必须要和数据库列名相同(不同也可以,在mapper.xml中写查询语句时给不同的列加上别名)

  • mybatis.xml全局配置文件中的mappers标签的mapper子标签中的resource属性值为路径,用"/“分割而不是”."

  • 在上边的环境搭建部分-5中,通过Resource.getResourceAsStream(“mybatis.xml”);来加载全局配置文件(mybatis默认不自动加载配置文件), 其中默认从src下找

  • 在数据访问层处理异常和在控制器中处理异常,而service中只抛出异常(spring原因),并且service实现类的异常还是要和实现的接口抛出的异常保持一致

不是"."

  • 在上边的环境搭建部分-5中,通过Resource.getResourceAsStream(“mybatis.xml”);来加载全局配置文件(mybatis默认不自动加载配置文件), 其中默认从src下找

  • 在数据访问层处理异常和在控制器中处理异常,而service中只抛出异常(spring原因),并且service实现类的异常还是要和实现的接口抛出的异常保持一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值