文档章节

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

清晨吼于林
 清晨吼于林
发布于 2017/04/07 02:16
字数 585
阅读 21
收藏 0
点赞 0
评论 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
南京
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笔记(一)——带你入门带你飞

MyBatis(原名是ibatis)简介 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单...

HappyBKs
2015/07/02
0
5
mybatis-generator重新生成代码时的SQL映射文件覆盖

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

alex
2014/04/08
0
11
MyBatis使用笔记

MyBatis MyBatis作为一个轻量的SQL映射框架,确实很简单,但是知识点挺多,实际使用中还是会有时想不起来某个标签该怎么写,所以整理了这篇文章,以备查询。由于MyBatis如此简单,使得这一篇...

楠木楠
2016/11/22
17
0
mybatis(七)mapper映射文件配置之insert、update、delete

上篇文章简单地给mybatis的配置画上了一个句号。那么从本篇文章开始,将会介绍mapper映射文件的配置, 这是mybatis的核心之一,一定要学好。在mapper文件中,以mapper作为根节点,其下面可以...

LCZ777
2014/12/19
0
0
mybatis(六)objectFactory、plugins、mappers简介与配置

上篇文章简单看了一下TypeHandler, 本次将结束对于mybatis的配置文件的学习, 本次涉及到剩下没提及到的几个节点的配置:objectFactory、databaseIdProvider、plugins、mappers。 那么,接下...

LCZ777
2014/12/19
0
0
项目开发框架-SSM

1.Spring 无需多言,作为开源届数一数二的典例,项目开发中无处不在; 核心IOC容器,用来装载bean(java中的类)-用Spring的IOC容器来管理Bean的生命周期,有了这样一种机制,我们就可以不用...

glmapper
2017/10/28
0
0
关于maven多模块问题,懂的帮忙解释下,谢谢

昨天开始接触maven的多模块创建问题,之前maven也只是用来jar包管理。以下几个问题有点迷糊。希望使用过的人能给个解答。 问题1:你是如何分模块的 parent :消除依赖重复,聚合模块。没问题。...

似故人来
2015/06/24
594
2
【Mybatis】深入浅出Mybatis(三)——环境搭建

一、前言 前一篇博客向大家介绍了Mybatis的架构——【Mybatis】深入浅出Mybatis(二)——Mybatis的框架,在这篇我们就开始通过一个例子来搭建一下Mybatis的环境。 二、环境要求 mybatis-3....

kisscatforever
2017/03/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaEE——JavaScript

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 JavaScript 内置对象 String对象方法: date对象...

凯哥学堂
7分钟前
0
0
Git 远程代码回滚master

方式一(推荐): git revert commit-id 方式二(不推荐):不推荐原因:推送到线上后,其它开发人员需要重新clone git reset --hard commit-id git push origin HEAD --force...

浮躁的码农
7分钟前
0
0
Elasticesearch学习(7)—— ES查询与Java API的对应关系

1、普通查询 类型 ES查询语句 Java查询实现 结果 查询格式 { "query": { "bool": { "must": [], "must_not": [], "should": [], "filter": [] } }, "from": 0, "size": 10, "sort": [] } Que......

叶枫啦啦
8分钟前
4
0
getElementsByClassName()与getElementById()区别

1.document.getElementsByClassName() 返回的是数组 使用:document.getElementsByClassName("className")[0].innerText='具体内容' 2.document.getElementById() 返回的是单个元素 使用:d......

botkenni
19分钟前
0
0
MyBatis入门

一、安装 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency> 二、从 XML 中构建 SqlSessionFactory String r......

一个yuanbeth
20分钟前
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
22分钟前
0
0
【转】使用Lombok来优雅的编码

前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖:...

HAVENT
24分钟前
0
0
Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
32分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
41分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部