mybatis初学

mybatis工作流程

1)通过Reader对象读取src目录下的mybatis.xml配置文件(该文本的位置和名字可任意)

2)通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象

3)从当前线程中获取SqlSession对象

4)事务开始,在mybatis中默认

5)通过SqlSession对象读取StudentMapper.xml映射文件中的操作编号,从而读取sql语句

6)事务提交,必写

7)关闭SqlSession对象,并且分开当前线程与SqlSession对象,让GC尽早回收

mybatis.xml 

<?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>

        <!-- 加载类路径下的属性文件 -->
        <properties resource="db.properties"/>
        <!-- 设置类型别名 -->
        <typeAliases >
                <typeAlias type="cn.buaa.mybatis.app1.Student" alias="student"/>
        </typeAliases>
        <!--   设置默认的连接环境信息 -->
        <environments default="mysql_developer">
               <!--    连接环境信息  ,随便起一个唯一的名字 -->
                <environment id="mysql_developer">
                        <!--   mybatis使用jdbc事物管理方式 -->
                        <transactionManager type="jdbc"></transactionManager>
                        <!--     mybatis使用连接池方式来获取连接 -->
                        <dataSource type="pooled">
                                <property name="driver" value="com.mysql.jdbc.Driver"/>
                                <property name="url" value="jdbc:mysql://localhost:3306/emp"/>
                                <property name="username" value="root"/>
                                <property name="password" value="123456"/>
                        </dataSource>
                </environment>
                
                <!--    连接环境信息  ,随便起一个唯一的名字 -->
                <environment id="oracle_developer">
                        <!--   mybatis使用jdbc事物管理方式 -->
                        <transactionManager type="jdbc"></transactionManager>
                        <!--     mybatis使用连接池方式来获取连接 -->
                        <dataSource type="pooled">
                                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                                <property name="url" value="jdbc:oracle:thin:@localhost:1521/orcl"/>
                                <property name="username" value="zhangdong"/>
                                <property name="password" value="123456"/>
                        </dataSource>
                </environment>
        </environments>
        <!--    加载映射文件-->
        <mappers>
                <mapper resource="cn/buaa/mybatis/app1/studentMapper.xml"/>
        </mappers>
</configuration>
studentMapper.xml

<?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">
<!-- namespace属性是名称空间,必须唯一 -->
<mapper namespace="studentNamespace"> 
    
    <!-- resultMap标签:映射实体与表 
         type属性:表示实体全路径名
         id属性:为实体与表的映射取一个任意的唯一的名字
    -->
    <resultMap type="student" id="studentMap">
        <!-- id标签:映射主键属性
             result标签:映射非主键属性
             property属性:实体的属性名
             column属性:表的字段名  
        -->                         
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="sal" column="sal"/>
    </resultMap>

    
    <!-- 
        insert标签:要书写insert这么一个sql语句
        id属性:为insert这么一个sql语句取一个任意唯一的名字
        parameterType:要执行的dao中的方法的参数,如果是类的话,必须使用全路径类
    -->
   
    <insert id="add1">
             insert into students(id,name,sal) values(2,'哈哈',7000)
    </insert>
    
     <!--  
    <insert id="add2" parameterType="student">
        insert into students(id,name,sal) values(#{id},#{name},#{sal})
    </insert>
    
    
    <insert id="add3" parameterType="student">
        insert into students(id,name,sal) values(#{id},#{name},#{sal})
    </insert>
-->
</mapper>
StudentDao.java

package cn.buaa.mybatis.app1;

import org.apache.ibatis.session.SqlSession;

import cn.buaa.mybatis.util.MybatisUtil;

/**
 * 持久层
 * @author 梧桐下的茵
 *
 */
public class StudentDao {

	/**
	 * 增加学生
	 */
	public void add1() throws Exception{
		SqlSession sqlSession = null;
		try {
			sqlSession = MybatisUtil.getSqlSession();
			int i = sqlSession.insert("studentNamespace.add1");
			System.out.println("本次操作影响了" + i + "行");
			//事物提交
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
			sqlSession.rollback();
		}finally{
			MybatisUtil.closeSqlSession();
		}
	}
	
	//测试
	public static void main(String[] args) throws Exception{
		StudentDao dao = new StudentDao();
		dao.add1();
		//dao.add2(new Student(2,"呵呵",8000D));
		//dao.add3(new Student(3,"嘻嘻",9000D));
		//dao.add3(new Student(4,"笨笨",9000D));
	}
}
MybatisUtil.java  mybatis工具类

package cn.buaa.mybatis.util;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 工具类
 * @author 梧桐下的茵
 *
 */
public class MybatisUtil {
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
	private static SqlSessionFactory sqlSessionFactory;
	/**
	 * 加载位于src/mybatis.xml配置文件
	 */
	static{
		try {
			Reader reader = Resources.getResourceAsReader("mybatis.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	//禁止外部 new 
	private MybatisUtil(){}
	
	/**
	 * 获取SqlSession
	 */
	public static SqlSession getSqlSession(){
		SqlSession sqlSession = threadLocal.get();
		if(sqlSession == null){
			sqlSession = sqlSessionFactory.openSession();
			threadLocal.set(sqlSession);
		}
		return sqlSession;
	}
	
	
	/**
	 * 关闭SqlSession与当前线程分离
	 */
	public static void closeSqlSession(){
		SqlSession sqlSession = threadLocal.get();
		if(sqlSession != null){
			sqlSession.close();
		}
		//分离当前线程与SqlSession对象的关系,目的是让GC尽早回收
		threadLocal.remove();
	}
	
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		Connection connection = MybatisUtil.getSqlSession().getConnection();
		System.out.println(connection != null ? "连接成功" : "连接失败");
	}
	
	
	
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值