文档章节

就那么几行的Mybatis核心使用代码

清晨吼于林
 清晨吼于林
发布于 2017/04/07 02:16
字数 585
阅读 22
收藏 0

    MyBatis的本质就是对JDBC的一个封装,包括JDBC的事务管理、SQL组装、CRUD操作、结果映射等等。

    1. 常规使用代码

整合代码片段MyBatisTest.java(基本上把这一段调试一边之后,对MyBatis的核心代码就有一些了解了)

package i.love.mylife;

import java.util.List;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import i.love.mylife.vo.Stat;
import i.love.mylife.vo.StatMapper;

public class MyBatisTest {

	public static void main(String[] args) {
		
		Properties properties = new Properties();
		properties.setProperty("driver", "com.mysql.jdbc.Driver");
		properties.setProperty("url", "jdbc:mysql://localhost:3306/employees?useSSL=false");
		properties.setProperty("username", "root");
		properties.setProperty("password", "123456!");
		
		//1.获得数据源,对DriverManaager和Connection对象本身对象做了一些封装,比如连接池。
		//池化连接之后,在调用close的时候,通过JDK代理模式,修改了方法的执行逻辑,不适直接关闭Conneciton,而是将Connection放到DataSource的PoolState对象变量中。
		PooledDataSourceFactory pooledDataSourceFactory = new PooledDataSourceFactory();
		pooledDataSourceFactory.setProperties(properties);
		DataSource ds =  pooledDataSourceFactory.getDataSource();
		
		//2.事务工厂,获取事务,其实就是获取连接,对Connection的事务相关的功能进行了封装
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		Environment environment = new Environment("development", transactionFactory, ds);
		
		//3.初始化Configuration
		Configuration configuration = new Configuration(environment);
		
		//初始化Mapper接口。并缓存对应的Mapper接口的代理类,要不然你以为,Mapper接口是怎么执行方法的啊。
		configuration.addMapper(StatMapper.class);
		
		//4.默认的DefaultSqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
		//sqlSession封装了一些调用数据库的方法,组合了一个 Excutor
		//Excutor用于真正的去做拿Connection、拿PrepareStatement、参数映射、结果映射。组合了一个Transaction。
		//Transaction ,组合了一个Connection
		SqlSession session = sqlSessionFactory.openSession();
		
		StatMapper mapper = null;
		try {
			//1.基于StatementID
			//Map<String,Object> params = new HashMap<String,Object>();
			//params.put("id", 832);
			//sqlSession.selectList("i.love.mylife.vo.StatMapper。getAll",params);
			
			//2.基于Mapper接口
			//MapperProxy jdk动态代理
			mapper = session.getMapper(StatMapper.class);
			List<Stat> stats = mapper.getAll(1);
			System.out.println(stats.size());
			for (int i = 0; i < stats.size(); i++) {
				System.out.println(stats.get(i).getJobName());
			}
			session.commit();
			
		} finally {
		  session.close();
		}
	}

}

StatMapper.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">
<mapper namespace="i.love.mylife.vo.StatMapper">
  <select id="getAll" resultType="i.love.mylife.vo.Stat">
    select * from Stat where id = #{id};
  </select>
</mapper>

StatMapper.java

package i.love.mylife.vo;

import java.util.List;

public interface StatMapper {
	public List<Stat> getAll(int id);
}

Stat.java

package i.love.mylife.vo;

import java.util.Date;

public class Stat {
	private int id;
	private Date time;
    private String type;
    private String appId;
    private String jobName;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Date getTime() {
		return time;
	}
	public void setTime(Date time) {
		this.time = time;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getAppId() {
		return appId;
	}
	public void setAppId(String appId) {
		this.appId = appId;
	}

	public String getJobName() {
		return jobName;
	}
	public void setJobName(String jobName) {
		this.jobName = jobName;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
清晨吼于林
粉丝 3
博文 16
码字总数 9877
作品 0
南京
Mybatis拦截器之数据权限过滤与分页集成

需求场景 最近项目有个数据权限的业务需求,要求大致为每个单位只能查看本级单位及下属单位的数据,例如:一个集团军下属十二个旅,那么军级用户可以看到所有数据,而每个旅则只能看到本旅部...

佛系程序猿灬
07/21
0
0
Wing4j ORM 系列组件--Wing4j family

使用Java的小伙伴们,被JDBC的SQL语句组装折磨了很久,出现了ORM,例如Hibernate和MyBatis为代表的两大流派。 Hibernate这个流派还是不错的,但是设计这个的小伙子可能没有做过复杂的金融项目...

woate
2017/01/08
626
2
搭建Spring + SpringMVC + Mybatis框架之二(整合Spring和Mybatis)

目录 整合Spring和Mybatis 整合Spring和Mybatis 首先给出完整的项目目录: (1)引入项目需要的jar包 使用http://maven.apache.org作为中央仓库即可。 Spring核心包,mybatis核心包,json数据需...

张辉原
2017/06/15
0
0
mybatis源码解读(二)——构建Configuration对象

  Configuration 对象保存了所有mybatis的配置信息,主要包括:   ①、 mybatis-configuration.xml 基础配置文件   ②、 mapper.xml 映射器配置文件 1、读取配置文件   前面例子有这...

ysocean
05/07
0
0
Mybatis SqlSessionTemplate 源码解析

Mybatis SqlSessionTemplate 源码解析 在使用Mybatis与Spring集成的时候我们用到了SqlSessionTemplate 这个类。 通过源码我们何以看到 SqlSessionTemplate 实现了SqlSession接口,也就是说我...

微wx笑
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
6
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部