Mybatis学习笔记(一)

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();
	}
		
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值