文档章节

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

清晨吼于林
 清晨吼于林
发布于 2017/04/07 02:16
字数 585
阅读 24
收藏 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
mybatis源码解读(二)——构建Configuration对象

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

ysocean
05/07
0
0
搭建Spring + SpringMVC + Mybatis框架之二(整合Spring和Mybatis)

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

张辉原
2017/06/15
0
0
mybatis-generator重新生成代码时的SQL映射文件覆盖

mybatis generator工具在使用的时候的时候,命令行输入:-overwrite 参数,表示生成的文件会覆盖原来的文件;但是在实际使用中发现,针对mybatis生成的SQL映射文件(xml文件)只能追加,不能...

alex
2014/04/08
0
11

没有更多内容

加载失败,请刷新页面

加载更多

给女朋友讲解什么是Optional【JDK 8特性】

前言 只有光头才能变强 前两天带女朋友去图书馆了,随手就给她来了一本《与孩子一起学编程》的书,于是今天就给女朋友讲解一下什么是Optional类。 至于她能不能看懂,那肯定是看不懂的。(学到...

Java3y
12分钟前
0
0
2019年六大新兴信息安全方向

导读 黑客攻击和网络犯罪的威胁正在不断升级,相应的技术“军备竞赛”正愈演愈烈,对于信息安全从业人员来说,掌握最新的信息安全工具,是在信息安全战争中生存下来的关键所在。 从特朗普的手...

问题终结者
18分钟前
0
0
redis扩展-自定义PropertyPlaceholderConfigurer,在spring属性注入之前,手动将properteis合并到spring容器中

背景:spring容器启动过程中,通过PropertyPlaceholderConfigurer读取properties配置文件,并将properties配置文件中的值注入spring bean的属性中, PropertyPlaceholderConfigurer使用方式多...

燃犀
20分钟前
0
0
PostgreSQL SPI 中的错误处理

PostgreSQL SPI 用于在 C 或是其他编程语言编写的扩展函数(存储过程)中调用数据库本身的解析器、规划器和执行器的功能,以及对 SQL 语句进行执行。 在最重要的一个函数 SPI_execute 的文档...

helloclia
21分钟前
0
0
深入理解Java内存模型

1 内存模型产生背景 在介绍Java内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物...

小刀爱编程
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部