MyBatis学习笔记
1.Mybatis 开源免费框架,以前叫ibatis,2010年在google code,2013年迁移到git tub。
2.作用:数据访问层框架。
2.1底层是对jdbc的封装。
3.mybatis优点:使用mybatis时不用编写实现类,只需要写需要执行的sql
一.环境搭建
1.导入jar包
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.11.0.GA.jar
log4j-1.2.16.jar
mybatis-3.2.2.jar
mysql-connector-java-5.0.3-bin.jar
slf4j-api-1.6.2.jar
slf4j-log4j12-1.6.2.jar
cglib依赖的包,动态代理包,日志包,字节码解析包也是cglib依赖的包,日志包,mybatis核心包,日志包,日志包。
二,在src下新建全局配置文件(编写jdbc)xml
2.1没有名称和地址要求
2.2在全局配置文件中引入DTD或schemal
2.2.1如果导入dtd后没有提示
要windows-->preferences-->XML-->xml catalog-->add本地的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/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/test/mapper/FlowersMapper.xml"/>
</mappers>
</configuration>
三.新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml
3.1文件作用:用来编写需要执行的sql命令
3.2把xml文件理解成实现类
3.3xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC ".//mtbatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis_3_mapper.dtd" >
<!-- namespace:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b">
<!-- id:方法名
parameterType:返回值类型
如果方法返回值时list,在resultType中写list的泛型,因为mybatis对jdbc封装,一行一行读取数据-->
<select id="selAll" parameterType="" resultType="com.test.pojo.Flowers">
select * from flowers
</select>
</mapper>
四,测试结果,这个只在测试mybatis中单独使用,在框架整合时不适用。
package com.test.sessiontest;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.annotation.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.pojo.Flowers;
public class Test {
public static void main(String[] args) throws Exception {
InputStream in = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//生产sqlSession
SqlSession session = factory.openSession();
List<Flowers> list = session.selectList("a.b.selAll");
for (Flowers flowers : list) {
System.out.println(flowers.toString());
}
session.close();
}
}
五,环境搭建讲解
5.1<transactionManager> type属性可取值
5.1.1 JDBC,事务管理使用JDBC原生事务管理方式
5.1.2 MANAGED把事务管理转交给其他容器,原生jdbc事务setAutoMapping(false)
5.2<dataSourse> type属性
5.2.1 POOLED 使用数据库连接池
5.2.2 UNPOOLED 不适用数据库连接池
5.2.3 JNDI :java命名目录接口技术
六.数据库连接池
1.在内存中开辟一块空间,存放多个数据库连接对象。
2.jdbc Tomcat Pool 直接由tomcat产生数据库连接池
3.图示
3.1 active状态:当前连接对象被应用程序使用中
3.2 idle空闲状态:等待应用程序使用
4.使用数据库连接池目的
4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率。
小项目不适用数据库连接池。
5.实现jdbc tomcat Pool的步骤
5.1在web项目的META_INF下面存放context.xml 并配置
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url ="jdbc:mysql://localhost:3306/test"
username="root"
password="root"
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWait="10000"
type="javax.sql.DataSourse"
/>
</Context>
5.2 把项目发布导tomcat中,数据库连接池产生了
七.可以在java中使用jndi获取数据库连接池中对象
7.1Context:上下文接口context.xml对象文件类型
7.2代码:
Context cont = new InitialContext();
DataSource ds = (DataSource) cont.lookup("java:comp/env/test");
Connection conn = ds.getConnection();
7.3当关闭连接对象时,是把连接对象归还给连接池,把状态改为idle空闲
八.三种查询方式
8.1,selectList()返回值为List<resultType属性控制>,适用于查询结果都需要遍历的需求。
8.2,selectOne()返回值Object,适用于返回值只是变量的一条数据。
8.3,selectMap()返回值map,适用于需求需要再查询结果中通过某列的值取到这行数据的需求。
8.4,Map<key,resultType控制>
package com.test.sessiontest;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.pojo.Flower;
public class Test {
public static void main(String[] args) throws Exception{
InputStream in = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//生产sqlSession
SqlSession session = factory.openSession();
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
int count = session.selectOne("a.b.selOne");
System.out.println(count);
Map<Object, Object> map = session.selectMap("a.b.c", "name");
System.out.println(map);
session.close();
}
}