`
zhchx0827
  • 浏览: 194068 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mybatis学习笔记(一) 入门demo

 
阅读更多

1:通过java代码

 

package org.mybatis.dao;

import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.apache.ibatis.datasource.pooled.PooledDataSource;
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 org.mybatis.entity.GameServer;
import org.mybatis.mapper.GameServerMapper;

/**
 * SqlSessionFactoryBuilder:这个类可以被实例化,使用和丢弃。一旦你创建了SqlSessionFactory后,这个类就不需要存在了。
 * 							   因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。
 *                           可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例
 * SqlSessionFactory:SqlSessionFactory的最佳范围是应用范围。可以通过单利,静态方法,容器注入等方式实现
 * SqlSession:每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,也是线程不安全的
 * Mapper:映射器接口的实例可以从SqlSession中获得。那么从技术上来说,当被请求时,任意映射器实例的最宽范围和SqlSession是相同的。
 *         然而,映射器实例的最佳范围是方法范围。也就是说,它们应该在使用它们的方法中被请求,然后就抛弃掉。它们不需要明确地关闭                          
 * @ClassName: MyBatisDao 
 * @Description: 
 * @author 
 */
public class MyBatisDao {
	private static final String driver = "oracle.jdbc.driver.OracleDriver";
	private static final String url =  "jdbc:oracle:thin:@ip:port:database";
	private static final String userName = "XXX";
	private static final String password = "XXX";
	private static final SqlSessionFactory sessionFactory;
	
	static {
		DataSource dataSource = new PooledDataSource(driver, url, userName, password);
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		Environment environment = new Environment("development", transactionFactory, dataSource);
		Configuration config = new Configuration(environment);
		config.addMappers("org.mybatis.mapper");
		sessionFactory = new SqlSessionFactoryBuilder().build(config);
	}
	
	public SqlSession getSqlSession() {
		return sessionFactory.openSession();
	}
	
	//通过这种方式操作数据库,对应的Mapper接口仍然是必须得
	public void queryBySession() {
		SqlSession session = sessionFactory.openSession();
		List<GameServer> ss = session.selectList("org.mybatis.mapper.GameServerMapper.getAllGames");
		System.out.println(ss.size());
		List<GameServer> server = session.selectOne("org.mybatis.mapper.GameServerMapper.getGamePartition",null);
		System.out.println(server==null);
		session.close();
	}
	
	private void queryByMapper() {
		SqlSession session = sessionFactory.openSession();
		GameServerMapper mapper = session.getMapper(GameServerMapper.class);
		List<GameServer> list = mapper.getAllGames();
		System.out.println(list.size());
		List<GameServer> list2 = mapper.getGamePartition(null);
		System.out.println(list2==null);
		session.close();
	}
	
	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		MyBatisDao dao = new MyBatisDao();
		dao.queryBySession();
		dao.queryByMapper();
	}
}

 

package org.mybatis.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.mybatis.entity.GameServer;

public interface GameServerMapper {

	/**
	 * 注解方式不适合于复杂的语句
	 * @Title: getGameInfo 
	 * @Description: 
	 * @return
	 */
	@Select("SELECT ID,NAME FROM GAME_SERVER WHERE PID=0 ORDER BY ID DESC")
	List<GameServer> getAllGames();

	/**
	 * @Title: getGamePartition 
	 * @Description: 
	 * @param gameId
	 * @return
	 */
	List<GameServer> getGamePartition(Long gameId);
}

 

<?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">

<!-- namespace必须是完整的包名加类型 -->
<mapper namespace="org.mybatis.mapper.GameServerMapper">
	<!-- 如果没有定义别名,这里的resultType必须使用完整的包名加类名 -->
	<!-- <select id="getAllGames" resultType="org.mybatis.entity.GameServer">
		<![CDATA[
			SELECT ID,NAME FROM GAME_SERVER WHERE PID=0 ORDER BY ID DESC
		]]>
	</select> -->
	
	<!-- #{}条件通过指定第二个参数jdbcType,在传入的参数为空时也能正常执行;同样适用于insert操作 -->
	<select id="getGamePartition" parameterType="java.lang.Long" resultType="org.mybatis.entity.GameServer">
		<![CDATA[
			SELECT ID,NAME FROM GAME_SERVER WHERE PID=#{gameId,jdbcType=NUMERIC} ORDER BY ID DESC
		]]>
	</select>
</mapper> 
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.pps</groupId>
	<artifactId>mybatis</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>3.1.2.RELEASE</version>
		</dependency>


		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.1.1</version>
		</dependency>
		
		<dependency>
			<groupId>ojdbc</groupId>
			<artifactId>ojdbc</artifactId>
			<version>14</version>
		</dependency>
	</dependencies>
</project>





2:通过配置文件
<?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="jdbc.properties">
		<property name="username" value="GCWO_DEV"/>
		<property name="password" value="GCWO_DEV"/>
	</properties>
	
	<environments default="development">
		<environment id="develop">
			<!-- 
				1:JDBC直接依赖JDBC的提交和回滚设置
				2:MANAGED几乎不做任何事情,既不会提交也不会回滚事物,而是交给容器来管理事物声明周期
			 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 
				1:UNPOOLED这个数据源的实现是每次被请求时简单打开和关闭连接。
				2:POOLED这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例
				3:JNDI这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
				        这个数据源配置只需要两个属性:initial_context data_source
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	
	<proxyFactory type=""></proxyFactory>
	<!-- <settings>
		<setting name="LazyLoadingEnable" value="false"/>
	</settings> -->
	
	<!-- 定义别名,可以使用别名,而不用在每次使用时都指定完整的包名 -->
	<typeAliases>
		<typeAlias alias="GameServerMapper" type="org.mybatis.mapper.GameServerMapper"/>
	</typeAliases>
	
	<!-- 指定类型转换器,需要实现TypeHandler接口 -->
	<!-- <typeHandlers>
		<typeHandler handler="org.apache.ibatis.type.TypeHandler.DateHandler" javaType="java.util.Date" jdbcType="Date"/>
	</typeHandlers> -->
	
	<!-- 每次创建实例使用的方法:继承DefaultObjectFactory -->
	<!-- <objectFactory type="org.apache.ibatis.type.factory.MyObjectFactory"></objectFactory> -->
	
	<!-- 在某一点拦截已经映射语句的调用。实现Interceptor接口,通过注解指定需要拦截的操作等信息 -->
	<!-- <plugins>
		<plugin interceptor="org.apache.ibatis.type.plugin.InsertPlugin"></plugin>
	</plugins> -->

	<!-- 告诉Mybatis,到哪里寻找映射文件 -->
	<mappers>
		<mapper resource="org/mybatis/mapper/PlayerMapper.xml" />
	</mappers>
</configuration> 
分享到:
评论

相关推荐

    【MyBatis学习笔记一】——MyBatis入门demo.zip

    【MyBatis学习笔记一】——MyBatis入门demo.zip 博客地址:https://blog.csdn.net/weixin_43817709/article/details/117370755

    SpringBoot集成MyBatis-Plus快速入门Demo

    编译器版本:IntelliJ IDEA 2020.3.2 x64 JDK版本:java 1.8.0_111 SpringBoot集成MyBatis-Plus快速入门Demo,包括CRUD操作、多条件查询、性能分析等代码实现。

    MyBatis学习笔记1

    【标题】"MyBatis学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...

    mybatis学习笔记

    这篇“mybatis 学习笔记”将带你深入理解 MyBatis 的核心概念和主要功能。 1. **MyBatis 概述**: MyBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它的核心是 SQL 映射文件和 SqlSessionFactory。ORM 技术...

    Mybatis.md学习笔记

    mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记

    Mybatis学习笔记(狂神).md

    Mybatis学习笔记(狂神).md

    Mybatis学习笔记整合架构

    1.课程计划 第一天: 1、Mybatis的介绍 2、Mybatis的入门 a)使用jdbc操作数据库存在的问题 b)Mybatis的架构 c)Mybatis的入门程序 3、Dao的开发方法 a)原始dao的开发方法 ... 从入门学习到使用精通。

    04实现mybatis条件构造器代码demo

    04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis条件构造器代码demo04实现mybatis...

    MyBatis学习笔记.zip

    在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...

    MyBatis-Plus 学习笔记.pdf

    MyBatis-Plus 学习笔记 MyBatis-Plus 是一个基于 MyBatis 的增强工具,旨在简化开发、提高效率。它提供了许多实用的特性和功能,例如无侵入、损耗小、强大的 CRUD 操作、支持 Lambda 形式调用、支持多种数据库、...

    mybatis入门案例 mybatis入门案例

    mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...

    Mybatis学习笔记

    本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...

    mybatis学习笔记.md

    个人mybatis学习笔记,是个人学习后记录所得,记录内容仅供参考,如如果有什么不对的地方,欢迎指正。

    mybatis demo

    在本示例中,"mybatis demo" 是一个基于Dubbo的MyBatis演示项目,旨在帮助开发者理解和实践如何在分布式环境中使用MyBatis进行数据访问。Dubbo是阿里巴巴开源的高性能服务框架,用于构建微服务架构,而MyBatis则为...

    Mybatis学习笔记+学习源码.zip

    在本学习资源中,你将找到一份详尽的Mybatis学习笔记和源码,这将极大地助力你的学习过程,尤其是对自学者而言。这份笔记被认为是非常有价值且深入的,作者在其中倾注了大量的精力,确保了内容的全面性和实用性。 ...

    MyBatis学习笔记

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    【MyBatis学习笔记六】——MyBatis一对一,一对多,多对一,多对多.zip

    【MyBatis学习笔记六】——MyBatis一对一,一对多,多对一,多对多.zip博客地址:https://blog.csdn.net/weixin_43817709/article/details/117537580

Global site tag (gtag.js) - Google Analytics