一,框架是什么?
1.框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础上进行扩充.
2.框架中一些不能被封装的代码(变量),需要使用框架者新建一个xml文件,在文件中添加变量内容.
2.1需要建立特定位置和特定名称的配置文件.
2.2需要使用xml解析技术和反射技术.
3.常用概念
3.1类库:提供的类没有封装一定逻辑.举例:类库就是名言警句,写作文时引入名言警句
3.2框架:区别与类库,里面有一些约束.举例:框架是填空题
二,MyBatis简介
1.Mybatis开源免费框架.原名叫iBatis,2010在googlecode,2013年迁移到github
2.作用:数据访问层框架.
2.1底层是对JDBC的封装.
3.mybatis优点之一:
3.1使用mybatis时不需要编写实现类,只需要写需要执行的sql命
三,环境搭建
2.在src下新建全局配置文件(编写JDBC四个变量)
2.1没有名称和地址要求
2.2在全局配置文件中引入DTD或schema
2.2.1如果导入dtd后没有提示Window-->preference-->XML-->XMlcatalog-->add按钮
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>
<!-- 配置JDBC连接-->
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/****"/>
<property name="username" value="账户"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ljx/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
3.新建以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">
<!-- 可以理解成实现类的全路径 -->
<mapper namespace="a.b">
<!--
id:是方法名
resultType:返回值类型(包名+类名)
parameterType:定义参数的类型
注意:
如果返回值是List集合,那么在resultType中写他的泛型,
因为mybatis对JDBC的封装是一行一行的读取
-->
<select id="selAll" resultType="com.ljx.pojo.Flower">
select * from flower
</select>
</mapper>
4.测试结果(只有在单独使用mybatis时使用,最后ssm整合时下面代码不需要编写.)
package com.ljx.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ljx.pojo.Flower;
/**
* 测试mybatis
* @author
*
*/
public class Test {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
SqlSession session = factory.openSession();
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
}
}
四,环境搭建详解
1.全局配置文件中内容
1.1<transactionManager/>type属性可取值
1.1.1JDBC,事务管理使用JDBC原生事务管理方式
1.1.2MANAGED把事务管理转交给其他容器.原生JDBC事务setAutoMapping(false);
1.2<dataSouce/>type属性
1.2.1POOLED使用数据库连接池
1.2.2UNPOOLED不实用数据库连接池,和直接使用JDBC一样
1.2.3JNDI:java命名目录接口技术.
五.数据库连接池
1.在内存中开辟一块空间,存放多个数据库连接对象.
2.JDBCTomcatPool,直接由tomcat产生数据库连接池.
3.图示
3.1active状态:当前连接对象被应用程序使用中
3.2Idle空闲状态:等待应用程序使用
4.使用数据库连接池的目的
4.1在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率.
4.1.1小型项目不适用数据库连接池.
5.实现JDBCtomcatPool的步骤.
5.1在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/数据库名"
username="用户名"
password="密码"
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWait="10000"
type="javax.sql.DataSource"
/>
</Context>
5.2把项目发布到tomcat中,数据库连接池产生了
6.可以在java中使用jndi获取数据库连接池中对象
6.1Context:上下文接口.context.xml文件对象类型
6.2代码:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/test");
Connection conn =ds.getConnection();
6.3当关闭连接对象时,把连接对象归还给数据库连接池,把状态改变成Idle