Mybatis基础操作
2015-08-22 20:59
411 查看
Mybatis前身是Ibatis,Ibatis是apache的一个顶级开源项目。2010年迁移到Google
code,更名为Mybatis。Mybatis说起来也算的是一个基本的ORM,但是现对于Hibernate来说,就术语半自动的了,只是对数据的映射,没有涉及到sql的映射。
有了基本认识后咱们就切入正题了。
基本架构如下图
Mabytis配置,其中sqlMapConfig是全部配置文件,配置运行环境,而mapper为sql映射文件,此文件需要全局文件加载
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行,
mybatis底层自定义了Executor执行器接口操作数据库
Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped
Statement对象,sql的id即是Mappedstatement的id
搭建Mybatis环境
下载mybatis,https://github.com/mybatis/mybatis-3/releases,该文档中使用的是3.2.7
需要依赖的包有
mybatis-3.2.7.jar----mybatis的核心包
lib----mybatis的依赖包
sqlMapConfig文件内容可以从mybatis包中说明文档中进行进行复制
sqlMapConfig 文件
db.properties文件
该文件是配置数据库信息文件
Logo4J文件
映射文件userMapper
使用Mapper代理开发,只需要编写Mapper接口,不需要写实现代码,原理是mybatis内部根据接口生成代理对象,org.mybatis.spring.mapper.MapperFactoryBean
要求:
Mapper.xml文件中的namespace与mapper接口的类路径相同。
Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
测试:
输出结果:
User [id=1, username=张宏民, sex=2,birthday=Thu Aug 20 00:00:00 CST
2015, address=廊坊市气象局]
code,更名为Mybatis。Mybatis说起来也算的是一个基本的ORM,但是现对于Hibernate来说,就术语半自动的了,只是对数据的映射,没有涉及到sql的映射。
有了基本认识后咱们就切入正题了。
基本架构如下图
Mabytis配置,其中sqlMapConfig是全部配置文件,配置运行环境,而mapper为sql映射文件,此文件需要全局文件加载
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行,
mybatis底层自定义了Executor执行器接口操作数据库
Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped
Statement对象,sql的id即是Mappedstatement的id
搭建Mybatis环境
下载mybatis,https://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文件中的namespace与mapper接口的类路径相同。
Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
测试:
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,适应希求变化较多的项目。相关文章推荐
- 里氏替换原则
- HDU_1754 I Hate It(线段树)
- Add Digits
- java中string与json互相转化
- 我多希望我学编程时,有人教我这些事!
- 5种类型的程序员
- java file 删除目录下无用的文件
- 快速排序
- 用户体验工程师的多重角色
- [ACdream]小Y上学记——要迟到了![最短路][spfa]
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
- Android中定时
- Linux - bash : ifconfig command not found
- MVC处理程序类型
- CodeForcesGym 100676H Capital City
- 交互式shell和非交互式shell、登录shell和非登录shell的区别
- css--Bootstrap框架
- 编程算法 - 旋转矩阵 代码(C)
- mfc单文档程序对添加CEdit控件并操作
- spring 注解