不结合spring与mybatis,直接用mybatis
首先引入mybatis的依赖 以及druid池和mysql驱动一起加进来
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!--mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
起初直接用mybatis有个自带的连接池,后来找找看能不能这种方式也用druid性能高点的池,还真有
mybatis-cfg.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"></properties>
<environments default="production">
<!-- 生产环境 -->
<environment id="production">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="com.jdy.utils.DruidDataSourceFactory">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 定义映射文件 -->
<mappers>
<!-- sql映射文件的路径 -->
<mapper resource="mapper/TvMapper.xml"/>
<!-- 也可以通过配置接口的包扫描,但是xml文件路径要和接口的包路径一样 -->
<!-- <package name="com.jdy.dao" /> -->
</mappers>
</configuration>
关键的一行 <dataSource type="com.jdy.utils.DruidDataSourceFactory">
自己找个路径 继承 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 中还有一个小知识点
以前不太注意 <where> 标签的用法,这个where 标签的作用是有if这种判断且有or 或者and 连接条件的不确定时候加上,
如果两个都有and or 没有where 标签的话 会select XX from XX where and XX=xx
这样显然不是我们想要的,加上之后会自动给你去掉符合规范的。