Mybatis基础操作

    Mybatis前身是IbatisIbatisapache的一个顶级开源项目。2010年迁移到Google code,更名为MybatisMybatis说起来也算的是一个基本的ORM,但是现对于Hibernate来说,就术语半自动的了,只是对数据的映射,没有涉及到sql的映射。

有了基本认识后咱们就切入正题了。

 

基本架构如下图

 

  • Mabytis配置,其中sqlMapConfig是全部配置文件,配置运行环境,而mappersql映射文件,此文件需要全局文件加载
  • 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
  • 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行,
  • mybatis底层自定义了Executor执行器接口操作数据库
  •  Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sqlid即是Mappedstatementid

搭建Mybatis环境 


下载mybatishttps://github.com/mybatis/mybatis-3/releases,该文档中使用的是3.2.7

需要依赖的包有

mybatis-3.2.7.jar----mybatis的核心包

lib----mybatis的依赖包

 

 

1 创建配置文件

   创建log4j.properties文件,创建sqlMpaConfig.xml,因为mybatis依赖包中有log4j,所以需要配置属性文件

      sqlMapConfig文件内容可以从mybatis包中说明文档中进行进行复制

 

sqlMapConfig 文件

<?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>
		<!-- 懒加载配置 -->
		
	<!-- 别名定义  type类型路径 ,alias 别名-,单个别名-->
	<typeAliases >
		<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
		<package name="com.tgb.mybatis.po"/>
	</typeAliases>
	
	
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 mybatis管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>

	<mappers>

	<!-- 通过mapper接口加载映射文件,必须保证 mapper接口类名和mapper.xml映射文件名称一致,并在一个目录中 -->
	<package name="com.tgb.mybatis.mapper"/>
	
	</mappers>
</configuration>


db.properties文件

 该文件是配置数据库信息文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=mysql

Logo4J文件

log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

2 创建映射文件

映射文件的创建有两种方式,一种是ibatis原始方式,一种是mapper代理方式。问文档采用mapper代理方式

映射文件userMapper

<?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 有特殊重要作用,namespace 
	等于mapper接口地址 -->
<mapper namespace="com.tgb.mybatis.mapper.UserMapper">


	<!-- 配置sql语句 -->
	<!-- 通过select 执行查询 id表示映射的slq ,成为statement 的id, 将sql语句封装到mapappedStatement对象中 -->
	<!-- 通过id查询用户表记录 #{}标识一个占位符号 #{id} 其中id表示输入的参数,参数名称id,若参数类型是简单类型,若 参数名称可以是任意,可以value或其他名称 
		parameterMap 和parameterType表示参数类型,这里指定int类型
		 resultType:指定sql输出结果的映射java对象类型,selec或指定resulType表示将单条记录映射的java对象 -->
	<select id="findUserById" parameterType="int"
		resultType="com.tgb.mybatis.po.User">
		select * from user where id=#{id}
	</select>

</mapper>

3 编写Mapper接口


UserMapper 接口

 

package com.tgb.mybatis.mapper; 

import com.tgb.mybatis.po.User;

/**
 * mapper接口相当于userdao
 *
 * @author hanyk
 * @version 1.0.0 , 2015年8月20日 下午7:51:44
 */
public interface UserMapper {

	
	//根据id 查询用户信息
	public User findUserById(int id)throws Exception; 
	
}

 使用Mapper代理开发,只需要编写Mapper接口,不需要写实现代码,原理是mybatis内部根据接口生成代理对象,org.mybatis.spring.mapper.MapperFactoryBean

 

要求:

         Mapper.xml文件中的namespacemapper接口的类路径相同。

         Mapper接口方法名和Mapper.xml中定义的每个statementid相同

         Mapper接口方法的输入参数类型和mapper.xml中定义的每个sqlparameterType的类型相同

        Mapper接口方法的输出参数类型和mapper.xml中定义的每个sqlresultType的类型相同

 

测试:

 

	private SqlSessionFactory sessionFactory;
	private String url = "SqlMapConfig.xml";

	@Before
	public void setUp() throws IOException {
		// 创建sqlsessionfacotry

		InputStream inputStream = Resources.getResourceAsStream(url);
		// 创建会话工厂
		sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

	}

	//根据id 查询对象
	@Test
	public void testFindUserbyId() throws Exception {

		SqlSession session = sessionFactory.openSession();

		// 创建usermapper对象,自动生层代理对象
		UserMapper userMapper = session.getMapper(UserMapper.class);

		User user = userMapper.findUserById(1);
		session.close();//释放资源
		System.out.println(user);
	}

 输出结果:

User [id=1, username=张宏民, sex=2,birthday=Thu Aug 20 00:00:00 CST 2015, address=廊坊市气象局]

 

小结:

Mybatis上手简单,主要是在于对sql语句的编写,相对于Hibernate重量级ORM框架,mybaits专注与sql本身,需要自己编写slq,适应希求变化较多的项目。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值