【MyBatis】MyBatis入门
来源:互联网 发布:朗朗数码的mac怎么样 编辑:程序博客网 时间:2024/06/04 20:02
MyBatis
Hibernate 缺点
- 全表映射,更新少量信息是发送所有字段,性能不佳。
- 无法根据不同条件组装不同SQL语句,也就是说不支持SQL优化。
- 对多表关联和复杂的SQL支持不好,需要自己写SQL,然后将结果组装为POJO。
- 不能有效的支持存储过程。
- 虽然有HQL,但是性能较差。
MyBatis
半自动映射:需要手动配置POJO、SQL和映射关系。
映射文件主要部分
- SQL
可以配置动态SQL。 - 映射规则
- POJO
Mybatis基本构成(核心组件)
- SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory。
生成SqlSessionFactory后,作用就完结了。 - SqlSessionFactory(工厂接口):通过工厂可以生成SqlSession。
创建SqlSession,采用单例模式,一个数据库只有一个SqlSessionFactory,每创建一个SqlSession会话就会调用SqlSessionFacrtory,存在于MyBatis应用的整个生命周期中。 - SqlSession(会话):可以发送SQL去执行并返回结果,也可以获得Mapper的接口。
SqlSession是一个会话,相当于一个JDBC中的Connection对象。生命周期是请求数据库处理事务的过程。 - SQL Mapper:由一个Java接口和XML文件(或者注解)构成,需要给出对应的SQL语句和映射规则。负责发送SQL去执行,并返回结果。
Mapper是一个接口,没有任何实现类,作用就是发送SQL,然后返回结果,是一个存在于SqlSession事务方法之内的一个方法级别的东西,SqlSession销毁时,也将其销毁。
SqlSessionFactory
SqlSessionFactory是一个工厂接口,Mybatis提供了两个实现类,DefaultSqlSessionFactory和SqlSessionManager,后者目前没有使用。
构造器SqlSessionFactory需要一个Configuration(org.apache.ibatis.session.Configuration)对象作为参数,该对象存在于MyBatis整个生命周期中,可以反复读取和使用。
可以使用代码方式或者XML配置文件来创建SqlSessionFactory对象,推荐后者。
使用XML创建SqlSessionFactory
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="jdbc.properties"/><typeAliases> <typeAlias alias="role" type="com.learn.chapter2.po.Role"/></typeAliases><environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="autoCommit" value="false"/> </transactionManager> <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><mappers> <mapper resource="com\learn\chapter2\mapper\roleMapper.xml"/></mappers></configuration>
创建SqlSession
SqlSession是一个接口,实现类有DefaultSqlSession和SqlManager。
SqlSession sqlSession = null;try{ //打开SqlSession会话 sqlSession = sqlSessionFactory.openSession(); //...... sqlSession.commit();}catch(Exception e){ System.err.println(e.getMessage()); sqlSession.rollback();}finally{ //类似JDBC中的Connection对象,使用完毕后要close if(sqlSession!=null){ sqlSession.close(); }}
映射器
由Java接口和XML文件(或注解)组成。推荐使用XML配置文件,映射器是MyBatis的核心,也是最复杂的。
//接口类 package com.learn.chapter2.mapper;import com.learn.chapter2.po.Role;public interface RoleMapper { public Role getRole(Long id); public int deleteRole(Long id); public int insertRole(Role role);}//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="com.learn.chapter2.mapper.RoleMapper"> <select id="getRole" parameterType="long" resultType="role"> select id,role_name as roleName, note from t_role where id =#{id} </select> <insert id="insertRole" parameterType="role"> insert into t_role(role_name,note) values(#{roleName},#{note}) </insert> <delete id="deleteRole" parameterType="long"> delete from t_role where id =#{id} </delete></mapper>
我们需要在mybatis-config.xml中配置上述配置文件,MyBatis会根据配置文件生成映射器。
用SqlSession获取Mapper
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);Role role = roleMapper.getRole(1L);System.out.println(role.getRoleName());
阅读全文
0 0
- mybatis入门--初识mybatis
- 【MyBatis】MyBatis入门
- 【mybatis】mybatis入门
- MyBatis入门
- MyBatis 入门
- myBatis入门
- MyBatis入门
- mybatis入门
- MyBatis入门
- Mybatis入门
- Mybatis入门
- Mybatis入门
- mybatis入门
- Mybatis入门
- mybatis入门
- mybatis入门
- mybatis 入门
- mybatis入门
- Cookie
- 线性表之循环列表
- 17icpc北京网络赛G题(gcd意义)
- 取数组的最后一个元素
- lvs DR模式
- 【MyBatis】MyBatis入门
- 宁南山:中国未来的国运如何?
- Python数据结构中列表,字典,元组,集合的总结
- Balanced Game HDU
- 递归问题 D: 八皇后
- 【LeetCode】 Implement Queue by Two Stacks用栈实现队列
- Python学习笔记:文件操作
- WIN7_64 + CVE-2012-1889的分析
- 扫盲系列之负载均衡算法