框架学习第一天总结"mybatis"001
一、框架是什么?
- 框架 ,软件的半成品,为解决问题制定的一套约束,在提供功能的基础上进行补充;
- 框架中一些不能被封装的代码,需要使用框架者自己新建一个xml文件,在文件中添加变量内容;
注意:
2.1需要建立特定位置和特定名称的配置文件。
2.2需要使用xml解析技术和反射技术。
二、mybatis简介
- mybatis开源免费框架,原名iBatis,2010在google code,2013年迁到GitHub;
2.作用:数据访问层框架,底层对JDBC的封装 ; - 优点:使用mybatis不需要编写实现类,只需要写执行的SQL命令;
三、环境初步搭建
- 导入jar包;
- 在src下新建全局配置文件(编写jdbc四个变量);
2.1名称地址没有要求
2.2在全部配置文件中引入DTD
2.3全局配置文件内容
<?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,当前所使用的环境 -->
<environments default="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/database"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
- 新建以mapper结尾的包,在包下新建实体类名+Mapper.xml;
3.1文件作用:编写需要执行的SQL命令;
3.2 把xml文件当作实现类执行;
3.3xml文件内容
<?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.pojo.Flower">
select * from flower
</select>
</mapper>
- 测试结果(只有在单独使用 mybatis 时使用.) ;
InputStream is = Resources.getResourceAsStream("myabtis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//生产 SqlSession
SqlSession session=factory.openSession();
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list)
{
System.out.println(flower.toString());
}
session.close();
三.1、环境搭建详解
- 全局配置文件中的内容
1.1<transactionManager/>
type 属性可取值;
1.1.1JDBC,事务管理使用 JDBC 原生事务管理方式;
1.1.2 MANAGED 把事务管理转交给其他容器.原生 JDBC 事务setAutoMapping(false);
1.2<dataSouce/>
type 属性;
1.2.1POOLED 使用数据库连接池;
1.2.2UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样;
1.2.3JNDI:java 命名目录接口技术;
三、数据库连接池
-
在内存中开辟一块空间,存放多个数据库连接对象.
-
JDBC Tmocat Pool,直接由Tomcat产生数据库连接池
-
数据库连接的状态有如下两种
3.1active 状态:当前连接对象被应用程序使用中
3.2Idle 空闲状态:等待应用程序使用 -
使用数据库连接池的目的
4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率;
4.2 小型项目不适用数据库连接池 -
实现JDBC Tomcat Pool的步骤
5.1 在 web 项目的 META-INF 中存放context.xml,在 context.xml 编写数据库连接池相关属性;
5.2把项目发布到Tomcat中,数据库连接池产生
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/database"
username="root"
password="123456"
maxActive="50"
maxIdle="20"
name="test"
<!--auth="Container" 允许Tomcat自动启动jdbc连接池 -->
auth="Container"
maxWait="10000"
type="javax.sql.DataSource"/>
</Context>
- 可以在 java 中使用 jndi 获取数据库连接池中对象
6.1Context:上下文接口.context.xml 文件对象类型
6.2 代码
6.3 当关闭连接对象时,把连接对象归还给数据库连接池,把状态
改变成 Idle
Context cxt = new InitialContext();
<!-- cxt.lookup("java:comp/env/databaseName") 固定格式 java:complete environment-->
DataSource ds = (DataSource) cxt.lookup("java:comp/env/test");
Connection conn = ds.getConnection();
四、mybatis三种查询方式
- selectList() 返回值为 List<resultType 属性控制>
1.1 适用于查询结果都需要遍历的需求
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list)
{
System.out.println(flower.toString());
}
- selectOne() 返回值 Object,
2.1 适用于返回结果只是变量或一行数据时
int count = session.selectOne("a.b.selById");
System.out.println(count);
- selectMap() 返回值 Map
3.1适用于需要在查询结果中通过某列的值取到这行数据的需求.
3.22Map<key,resultType 控制>
Map<Object, Object> map = session.selectMap("a.b.c", "name123");
System.out.println(map);