mybatis中sqlsession的管理

不结合spring与mybatis,直接用mybatis

首先引入mybatis的依赖   以及druid池和mysql驱动一起加进来

        
			com.alibaba
			druid
			1.0.9
		
			
		
			org.mybatis
			mybatis
			3.2.1
		
		
		
			mysql
			mysql-connector-java
			5.1.34
		

起初直接用mybatis有个自带的连接池,后来找找看能不能这种方式也用druid性能高点的池,还真有

mybatis-cfg.xml 的内容     





	
	
	
		
		
			
			
				
				 
				
				 
				
			
		
	

	
	
		
		 
		
		
	

关键的一行   

自己找个路径   继承 UnpooledDataSourceFactory  将配置在这DataSource

package com.jdy.utils;

import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

import com.alibaba.druid.pool.DruidDataSource;

public class DruidDataSourceFactory extends UnpooledDataSourceFactory{
	
	public DruidDataSourceFactory() {
		this.dataSource=new DruidDataSource();
	}

}

由此使用到了 durid 连接池

sqlsession的具体使用

public class MybatisUtils {

	private static Logger logger = Logger.getLogger(MybatisUtils.class);

	private static SqlSessionFactory sqlSessionFactory;

	public MybatisUtils() {
		super();
	}

	static {
		

		// 加载mybatis配置文件和映射文件,并获取sqlSession

		String resourse = "mybatis-cfg.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resourse);
				// 本地测试 不引用外部配置文件
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			}
			Configuration configuration = sqlSessionFactory.getConfiguration();
			logger.debug("configuration---->>" + configuration);
			Environment environment = configuration.getEnvironment();
			logger.debug("Environment--->>" + environment);
			DataSource dataSource = environment.getDataSource();
			logger.debug("dataSource--->>" + dataSource);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static SqlSession getSqlSession() {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		return sqlSession;
	}

}

具体代码内使用

public static void onLine(Actions action, boolean isOnLine) {
		int result = 0;
		SqlSession sqlSession = MybatisUtils.getSqlSession();
		TvMapper mapper = sqlSession.getMapper(TvMapper.class);
		try {
			 mapper.updateOnLineDouble(action);
			sqlSession.commit();
		} catch (Exception e) {
			sqlSession.rollback();
			e.printStackTrace();
		} finally {
			sqlSession.close();
		}
		
	}

opensession得到一个具体的sqlsession      commit提交更改的sql     也可自动提交在open那里设为true    

需要注意的是  增删改都需要手动commit  如果没有设置自动提交的话,默认是false的 

而查的话是不需要commit的,应该说是有自动提交的,   

最最重要的是      finally 中必须一定千万记得  close

以上的话就是使用的一个完整的流程

还有 mapper.xml 中还有一个小知识点

mybatis中sqlsession的管理_第1张图片

以前不太注意  标签的用法,这个where 标签的作用是有if这种判断且有or  或者and 连接条件的不确定时候加上,

如果两个都有and   or   没有where 标签的话   会select  XX from XX where and XX=xx

这样显然不是我们想要的,加上之后会自动给你去掉符合规范的。

你可能感兴趣的:(第三方框架)