mybatis入门(包含仅有mybatis的项目)

本文主要通过一个mybatis的helloworld项目来入门,以及介绍mybatis的一些基本知识点。

1、映射器。

        映射器是由java接口和xml文件(或注解)共同组成的,有下列用处。

        #定义参数类型

        #描述缓存

        #描述sql语句

        #定义查询结果和polo的映射关系

        应该优先使用xml文件去描述sql语句,以便在有动态sql的时候,能够更好的维护。


2、mybatis生命周期。

        mybatis的生命周期主要相关联的是4个类:SqlSessionFactoryBuilder,SqlSessionFactory

SqlSession,Mapper。

        #SqlSessionFactoryBuilder:它会根据配置信息或者代码来生成SqlSessionFactory,它的作用就是一个构建器,一旦我们构建了

SqlSessionFactory,它的作用就完结了,此时应该毫不犹豫的废弃它,将它回收。所以它的生命周期只存在于方法的内部。

        #SqlSessionFactory:依靠工厂来生成SqlSession,SqlSession就是一个会话,相当于jdbc中的connection对象。采用单例模式创建SqlSessionFactory。

        #SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取mapper的接口。

        #SQL mapper,它是mybatis新设计的组建,是由一个java接口和xml文件(或者注解)构成的,需要给出对应的sql和映射规则,负责发送

        sql去执行,并返回结果。

下面看具体类结构图:


先看mybatis的配置:

<?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>
	<typeAliases>
		<typeAlias type="study.helloworld.po.Role" alias="role"/>
	</typeAliases>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC">
				<property name="autoCommit" value="false"/>
			</transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- resource="study/helloworld/mapper/roleMapper.xml"  -->
	<mappers>
		<mapper class="study.helloworld.mapper.RoleMapper"/>
	</mappers>
	
</configuration>
这里写出了3个字节点,mappers(构建器),enviroments(环境,这里用于配置数据库信息),typealiases(配置别名)

mapper:

package study.helloworld.mapper;

import org.apache.ibatis.annotations.Select;

import study.helloworld.po.Role;

public interface RoleMapper {
	@Select(value="select id, role_name as roleName, note from t_role where id = #{id}")
	public Role getRole(Long id);
	public int insertRole(Role role);
	public int deleteRole(Long id);
	
}

<?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="study.helloworld.mapper.RoleMapper">
	<!--  
	
	<select id="getRole" parameterType="java.lang.Long" resultType="role">
		select id, role_name as roleName, note from t_role where id = #{id}
	</select>
	-->
	<insert id="insertRole" parameterType="study.helloworld.po.Role">
		insert into t_role(role_name, note) values(#{roleName}, #{note})
	</insert>
	
	<delete id="deleteRole" parameterType="java.lang.Long">
		delete from t_role where id = #{id}
	</delete>
</mapper>


sqlfactoryutil,用于初始化全局的SqlSessionFactory

package study.helloworld.util;

import java.io.InputStream;

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 org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
 * 用于创建及初始化sqlsessionfactory,
 * 使用单例模式实现,保证一个系统只有一个sqlsessionfactory
 * @author anla7856
 *
 */
public class SqlSessionFactoryUtil {
	private static SqlSessionFactory sqlSessionFactory = null;
	
	//类线程锁
	private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
	
	private SqlSessionFactoryUtil() {}
	
	public static SqlSessionFactory initSqlSessionFactory() {
		String resource = "mybatis-config.xml";
		InputStream inputStream = null;
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (Exception e) {
			Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.ERROR, null,e);
		}
		
		synchronized(CLASS_LOCK) {
			if(sqlSessionFactory == null) {
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			}
		}
		return sqlSessionFactory;
	}
	
	public static SqlSession openSqlSession() {
		if(sqlSessionFactory == null) {
			initSqlSessionFactory();
		}
		return sqlSessionFactory.openSession();
	}
}









测试方法:

	@Test
	public void testHelloWorld() {
		SqlSession sqlSession = null;
		
		try {
			sqlSession = SqlSessionFactoryUtil.openSqlSession();
			RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
			Role role = new Role();
			role.setRoleName("testName");
			role.setNote("testNote");
			roleMapper.insertRole(role);
			roleMapper.deleteRole(1L);
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
			sqlSession.rollback();
		} finally {
			if(sqlSession != null) {
				sqlSession.close();
			}
			
		}
	}

如何?是不是很简单啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值