mybatis -初识

学习网站:
http://www.mybatis.cn/
http://blog.csdn.net/isea533/article/category/2092001
http://www.mybatis.org/mybatis-3/zh/index.html
http://www.mybatis.org/spring/zh/index.html
http://www.mybatis.tk/

  1. 传统 jdbc 的弊端:
    · jdbc 底层没有用连接池 ,需要频繁的创建和关闭连接 。消耗很大的资源。
    · 原生的jdbc操作在 java代码中,一旦需要更改sql语句,需要重新编译部署,不利于系统维护。
    · 使用PreparedStatement预编译的话对变量进行设置123数字,这样的序号不利于维护。
    · 对返回结果集也需要硬编码。

  2. mybatis介绍:
    mybatis是一个orm 持久层框架,Objectrelationmapping对象关系映射。它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  3. 快速入门:http://www.mybatis.org/mybatis-3/zh/getting-started.html
    1)maven 依赖

    	```
    	
    	 org.mybatis
    	 mybatis
    	 x.x.x
    	
    	```
    

    2)mybatis-config.xml :
    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实 例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。




  
    
      
      
        
        
        
        
      
    
  
  
    
  

3) mapper 文件: 映射sql语句执行。




  

4)测试:
~xml形式


  @Test
  public void test01 () throws IOException {
    InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    Object o = sqlSession.selectOne("selectUser", 1);
    System.out.println(o);
  }

selectOne 第一个参数就是mapper 文件中定义的id ,第二个就是传入参数

~ 使用annotation 注解方式

·全局指定接口:

 
        
        
    

·接口使用@Select等注解

public interface UserInfoMapper {

    @Select("select * from user_info where id = #{id}")
    UserInfo selectUser(Integer id);
}

·测试

  @Test
  public void test02 () throws IOException {
    InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    SqlSession sqlSession = sqlSessionFactory.openSession();
      UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
      UserInfo userInfo = mapper.selectUser(1);
      System.out.println(userInfo);
  }
  1. 全局配置详解
    1) properties
    这些参数都是可外部配置,动态替换的参数。

  
  

2)settings
对mybatis 极为重要的调整设置,可改变mybatis 运行时行为。


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

3)typeAliases:
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关。


  
  
  
  
  
  

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 若有注解,则别名为其注解值。


  

使用注解

@Alias("author")
public class Author {
    ...
}

4)objectFactory 对象工厂:
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。

// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
  public Object create(Class type) {
    return super.create(type);
  }
  public Object create(Class type, List constructorArgTypes, List constructorArgs) {
    return super.create(type, constructorArgTypes, constructorArgs);
  }
  public void setProperties(Properties properties) {
    super.setProperties(properties);
  }
  public  boolean isCollection(Class type) {
    return Collection.class.isAssignableFrom(type);
  }}
 
  

    

  


5) plugins 插件 :
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。

6) environments 配置环境:
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
每个数据库对应一个 SqlSessionFactory 实例。创建实例时需指定那个环境

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

  
    
      
    
    
      
      
      
      
    
  

7)transactionManager 事务管理器 :
在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”):
JDBC :直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
MANAGED :几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:


  

Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

8) dataSource 数据源:
有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):

9) mappers 映射器:
sql语句执行 映射定位。



  
  
  



  
  
  



  
  
  



  

  1. #{} 和 ${} 的区别:
    #{} :是占位符的方式注入参数。 很大程度防止sql注入
    select * from user where username = ?
    ${} :是字符串替换 。 有sql注入问题。
    select * from user where username = ‘lirb’
    如 : select * from ${} where username = #{}
    第一个参数传 “user --” 会把后边条件注释掉。
  2. 逆向工程:
    1) 引入jar包

org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7


mysql
mysql-connector-java
${mysql-connector-java.version}




2)配置mybatis-genrtator.xml
去掉注释:

3) mybatis-generator:generateXMLMAPPER|ANNOTATEDMAPPER
完成。

你可能感兴趣的:(框架)