Mybatis — 创造方法、全局配置

 


 *      在sql映射文件中之。

– configuration 配置

private SqlSessionFactory getSqlSessionFactory(){
     String resource = "mybatis-config.xml";
     InputStream inputStream = null;
     try {
           inputStream = Resources.getResourceAsStream(resource);//从配置文件中读取一个流
     } catch (IOException e) {
           e.printStackTrace();
     }
     //利用这个流创建一个sqlSessionFactory对象
     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

     return sqlSessionFactory;
}

– sqlSession
对象表示服务器和数据库的等同次对话,是一个非线程安全的,所以无克定义在接近中,定义在类似吃,多线程的情状下会生差不四个线程共用,一赖下得一赖
,保证时线程安全之

    – name:设置属性名

3.settings蕴含多着重的装项

   将 property 中的 name 换做 C3P0 中之写法

 

 *     sqlSession就是代表以及数据库的等同次等对话!用完而关!

public interface EmployeeMapper {
      /*
       * 增删改查方法
       * */
      public Employee getEmployeeById(Integer id);

}

class:当映射文件与接口文件未以平等目录下通常,用表明

 

 * 4.写代码:

 

MyBatis 的部署文件包含了震慑 MyBatis
行为分外好的安(settings)和性(properties)音信。文档的顶层结构顺序如下:

– 制造一个动态WEB工程,然后创制与上述数据表对应的实业类

用从定义的数据源

即使发出如此多之号可以以:不过提议要用全类名,看SQL语句是怎被封装为JAVA
对象的时候简单!

– dataSource 数据源

  Property-value:为标识由一个号,方便SQL语句以

    
我们为此原来生JDBC操作数据库的时还会面经过:
    
编写sql—->预编译—->设置参数—–>执行sql——->封装结果

 

 *   有数据源的有的运行环境音讯


[参考mybatis官方文档]出席消的jar包[mybatis所欲的jar包,和数据库打交道的jar包,以及羁押打印日志所待的log4j的jar包]:

 */

理所当然假设齐所示:当有指定了databaseId属性的同无点名databaseId属性的,都有情况下这就按着有指定databaseId属性的sql语句执行!

 

  Property-name:数据库厂商标识

4.mapper接口没有兑现类似,但是mybatis这么些接口生成一个代理对象

– 使用MyBatis提供的VendorDatabaseIdProvider解析数据库
厂商标识。也可兑现DatabaseIdProvider接口来自定义。

2.MyBatis简介:
     MyBatis 是支撑定制化 SQL、存储过程和高档 映射的美观的持久层框架
     MyBatis 避免了几所有的 JDBC 代码和手动设置参数和取得结果集
     MyBatis可以利用简便的XML或讲明用于配置和原 始映射,将接口和
     Java的POJO(Plain Old
JavaObjects,普通的Java对象)映射成数据库中之记录.
       
MyBatis,       
3.为什么而动MyBatis?
     MyBatis是一个半自动化的轻量级的持久化层框架。
    
     JDBC
          –     SQL夹在Java代码块里,耦合度高以致硬编码内伤
          –    
维护不易且实际支出需要被sql是产生变化,频繁修改的情景差不多见
    
     Hibernate和JPA
          –     长难复杂SQL,对于Hibernate而言处理呢未容易
          –     内部自动生产的SQL,不轻做特优化。
          –    
基于全映射的自动框架,大量字段的POJO举行有映射时相比不方便。
导致数据库性能降低。
         
     对开发人士而言,核心sql依然亟需好优化
     sql和java编码分开,功效边界清楚,一个小心工作、 一个瞩目数据。
            
       
4.失去哪寻找MyBatis?
     https://github.com/mybatis/mybatis-3/
     或者在百度直接搜索mybatis,然后找到github下的地址下载即可!

public class C3P0DateSource extends UnpooledDataSourceFactory{

      public C3P0DateSource() {
            this.dataSource = new ComboPooledDataSource();
      }
}
<mapper namespace="com.neuedu.MyBatis.EmployeeMapper">
<!--
      namespace:名称空间,随便起一个名,但是要唯一
      id:sql 语句的唯一标识
      #{id}:接收参数传递过来的id值
      resultType:将 sql语句返回成什么对象
 -->
      <select id="selectStudentById" resultType="com.neuedu.entity.Employee">
            select * from student where id = #{id}
      </select>
</mapper>

– 创立mybatis配置文件,sql映射文件

    

 

暨数据库打交道的技巧发生:

 *    2)使用sqlSession工厂,获取到sqlSession对象下它们来举办增删改查!

7.databaseIdProvider环境

     3.mysql-connector-java-5.1.37-bin.jar

– environments 环境

– 通过mapper.xml的 namespace 相关联

5.星星只举足轻重之配置文件

– 新建类继承 UnpooledDataSourceFactory

– objectFactory 对象工厂

如何拿双边举行绑定?此前sql配置文件之namespace可以随便写,现在即令不可知无写了,需要指定为接口的全限定名!

2.SqlSession象征与数据库的均等次对话,用完要关闭。

 * 1.因xml配置文件(全局配置文件)创设一个SqlSessionFactory对象

<!--将接口与xml文件进行绑定 -->
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

– 在总控文件 mybatis-config.xml 中改 dataSource 路径

– 提供无参构造器,并拿 dataSource属性设置成想如若连的数据库连接池

– 测试

@Test
public void test01(){
      //1.获取sqlSessionFactory对象
      SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
      //2.利用sqlSessionFactory创建一个session对象,表示和数据库的一次会话
      SqlSession session = sqlSessionFactory.openSession();
      //3.用session对象获取mapper接口的代理对象
      //因为sql映射文件给相应的接口创建了一个代理对象,所以mapper接口类不需要实现类
      EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
      //通过mapper接口的代理对象就可以对数据库进行增删改查操作
      Employee employee = mapper.getEmployeeById(4);
      System.out.println(employee);
      session.close();
}

 

<mapper namespace="com.neuedu.mapper.EmployeeMapper">
<!--
      namespace:将sql映射文件和Mapper接口进行关联
      id:要和相对应的mapper接口的方法名保持一致
      #{id}:从参数中获取id
      resultType:将 sql语句返回成什么对象
 -->

      <!-- public Employee getEmployeeById(Integer id); -->
      <select id="getEmployeeById" resultType="com.neuedu.entity.Employee">
            select * from student where id = #{id}
      </select>

</mapper>

3.SqlSession暨Connection一样,都是非线程安全之,每回用都是理所应当去取得新的靶子,不要将是目的定义在类变量中运用!

而未指出以声明,提出以sql映射文件

 

     2.mybatis-3.4.1.jar 

   MyBatis 可以因不同之数据库厂商执行不一之话语

<environments default="development">
      <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="com.neuedu.datasource.C3P0DateSource">
                  <property name="driverClass" value="${jdbc.driver}" />
                  <property name="jdbcUrl" value="${jdbc.url}" />
                  <property name="user" value="${jdbc.username}" />
                  <property name="password" value="${jdbc.password}" />
            </dataSource>
      </environment>
</environments>

 * 3.将sql映射文件注册于大局配置文件被

<databaseIdProvider type="DB_VENDOR">
      <property name="SQL Server" value="sqlserver"/>
      <property name="DB2" value="db2"/>
      <property name="Oracle" value="oracle"/>
      <property name="MySQL" value="mysql"/>
</databaseIdProvider>

– plugins 插件

 * 2.sql映射文件,配置了各级一个sql,以及sql的卷入规则等。

     1.log4j-1.2.17.jar    注意:log4j的jar包是需要log4j.xml文件的

    – mapUnderscoreToCamelCase
可以以数据库中带下划线的称号,与类似中驼峰式命名的称呼对应起来

– 创造测试用例,.复制mybatis官方文档代码,代码如下:

咱用不使原生的JDBC工具,是以这个家伙:
1.效能简单,sql语句编写在java代码里面【一旦修改sql,就用以java及sql都要重新编译!】这属于硬编码高耦合的主意。
2.咱盼望有开发人士自己编写SQL语句,并且愿意SQL语句与java代码分离,将SQL语句编写在xml配置文件被,实现数据表中记录到目的之间的炫耀!

 

 

 

<!-- typeAliases可以为多个类起别名 -->
<typeAliases>
      <!-- 别名处理器,可以为某个java类型设置别名
      默认是该类名的首字母小写,别名不区分大小写
      alias:可以通过该属性单独指定别名-->
      <!-- <typeAlias type="com.neuedu.entity.Employee" alias="asd"/> -->
      <!-- 用package可以批量为类起别名 -->
      <!-- 批量起别名的情况下,使用@Alias注解为某个实体类指定新的别名 -->
      <package name="com.neuedu.entity"/>
</typeAliases>

1.configuration 也大局配置文件绑定dtd约束:

总结:

下面这种开发模式是一味版的Mybatis使用者的开发情势!而新一批的Mybatis使用者都是运接口的点子

– 创造同摆放测试表

这样在尽不一数据库的时刻,就会师履不同数据库的报告句子了

    所有的 sql映射文件都碰面刻画及总控文件被

<!-- settings标签可以设置多个属性值 -->
<settings>
      <!-- setting标签负责每一个属性的设置 -->
      <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

 *    1)依据全局配置文件得到SqlSessionFactory

 

– databaseIdProvider 数据库厂商标识

    

      比如,在数据库被称也
user_name,在实体类中称也userName,value值是true的话,也堪对诺达到

 

 

实际介绍:

– sql映射文件(EmployeeMapper.xml):保存了每一个sql语句的照射信息。

5.typeHandlers:类型处理器

总结:

– mappers 映射器

– 创制 mybatis-config.xml 文件并以 mybatis
文档中的内容复制过来,并拿数据库配置音信转换成温馨的:

 

 

 

– transactionManager 事务管理器

 

public class TestMyBatis {
      @Test
      public void test() {
            String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            try {
                  inputStream = Resources.getResourceAsStream(resource);//从配置文件中读取一个流
            } catch (IOException e) {
                  e.printStackTrace();
            }
            //利用这个流创建一个sqlSessionFactory对象,也就是总控文件创建了这个对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //和数据库建立的一次会话,通过openSession,创建一个sqlsession对象
            SqlSession sqlsession = sqlSessionFactory.openSession();
            try {
                  //selectOne查询一条记录,第一个参数时sql语句的唯一标识,第二个参数时sql要用的参数
                  //为了确保唯一标识唯一,所以在前面写上namespace,因为namesapce唯一
                  //如果第二个参数"4"在数据库中找不到的话,不会报错,返回null
                  Object selectOne = sqlsession.selectOne("com.neuedu.MyBatis.EmployeeMapper.selectStudentById",4 );
                  System.out.println(selectOne);
            } finally {
                  sqlsession.close();
            }
      }
}

1.MyBatis历史
     原是Apache的一个开源项目iBatis,  2010年5月即 独品类由Apache
Software Foundation 迁移
     到了 Google Code,随着开发团队转投Google Code 旗下,
iBatis3.x正式更名为MyBatis ,代码于
二零一三年十月搬迁到Github(下载地址见后)。

 

 


 

       类型处理器:负责什么将数据库的序列及java对象类型中变换的工具类

 

Mybatis的全局配置文件

– mybatis的全局配置文件(mybatis-config.xml):包含数据库连接池信息,事务管理器音讯等..系统运转环境音信。

– 创制数据库及数据表并插入数据

以mybatis的全局配置文件配置了之将来,我们才待以sql映射文件被经过当举行语句的签及加一个特性databaseId即可!

    setting:用来装各一个安

<!-- mappers:将sql映射注册到全局配置中 -->
     <mappers>
     <!-- mapper:注册一个sql映射
          注册配置文件:
               resource:引用类路径下的sql映射文件  mybatis/mapper/EmployeeMapper.xml
               url:引用网络路径下或者磁盘路径下的sql映射文件  url="file:///var/mappers/AuthorMapper.xml"

          注册接口
               class:引用(注册)接口:
                    1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一个目录下(可以在conf下见一个同名的包,放在里面);
                    2.没有sql映射文件,所有的sql都是利用注解写在接口方法上;
                    推荐:
                        比较重要的,复杂的Dao接口我们来写sql映射文件
                        不重要,见到的Dao接口为了开发快速可以使用注解
      -->
      <!-- <mapper class="com.neuedu.mapper.EmployeeMapper"/> -->
     <mapper resource="com/neuedu/mapper/EmployeeMapper.xml"/>
      <!-- 批量注册:
           对于sql 映射文件和接口需要保证在同一个包下,且名字必须相同 -->
      <package name="com.neuedu.mapper"/>
</mappers>

 

 

     Window–>Preference–>XML–>XML Catalog

圆介绍:MyBatis实际上是Ibatis3.0版本之后的持久化层框架【也便是同数据库打交道的框架】!

– typeHandlers 类型处理器

– settings 设置

 

8.mapper映射

 以前依旧用为接口写一个落实类似,但是此时,mybatis提供了接口可以和sql配置文件动态绑定!

<environments default="development">
      <environment id="development">
            <transactionManager type="JDBC" />
            <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>

      <environment id="dev_oracle">
            <transactionManager type="JDBC" />
            <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>

    – value:设置属性值

     框架是身的事物,例如事务控制,查询缓存,字段映射等等。

写一个 MyBatis 的 HelloWorld:

 

    mybatis-config.xml 是究竟决定文件,EmployeeMapper.xml 是MyBatis的
sql映射文件,在里边为 sql 语句

– properties 属性:加载properties文件

     原生的JDBC技术—>Spring的JdbcTemplate技术

<select id="getEmployeeById" resultType="emp">
       select * from tbl_employee where id = #{id}
</select>
<select id="getEmployeeById" resultType="emp" databaseId="mysql">
       select * from tbl_employee where id = #{id}
</select>
<select id="getEmployeeById" resultType="emp" databaseId="oracle">
       select * from tbl_employee where id = #{id}
</select>

dtd文档规定了以上顺序不克转换

Type: DB_VENDOR

 

public interface EmployeeMapper {
      /*
       * 增删改查方法
       * */
      @Select("select * from student where id = #{id}")
      public Employee getEmployeeById(Integer id);

}
  1. properties属性









     iBatis一词来源于“internet”和“abatis”的结缘,是
一个基于Java的持久层框架。
     iBatis提供的坚持不渝不懈 层框架包括SQL  Maps和Data  Access 
Objects、(DAO)

<!--
    environments:环境们,mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境。
    environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
    transactionManager:事务管理器
    type:事务管理器的类型;type="[JDBC|MANAGED]"),这两个都是别名,在Configuration类中可以查看具体类!但是Spring对事务的控制才是最终的管理方案!
         当然也可以自定义事务管理器:只需要和人家一样实现TransactionFactory接口,type指定为全类名。
    dataSource:数据源
    type:type="[UNPOOLED|POOLED|JNDI]"
    自定义数据源:实现DataSourceFactory接口,type也是全类名

    但是我们也说了,无论是事务管理器的配置还是数据源的配置我们都会使用spring来做,这里只需要了解一下即可!
    -->
<environments default="development">
      <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.user}"/>
                    <property name="password" value="${jdbc.passowrd}"/>
             </dataSource>
       </environment>
       <environment id="development">
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.user}"/>
                    <property name="password" value="${jdbc.passowrd}"/>
             </dataSource>
        </environment>
</environments>

– environment 环境变量

– typeAliases 类型命名

sql和java编码分开,功效边界清晰,一个留意让业务,一个在意于数据,可以行使简单的XML或注明用于配置与原始映射,将接口及Java的POJO映射成数据库被的记录,完成业务+底层数据库的媒介!
         

   

/**

 HelloWorld—-接口式编程

         原生:                  Dao  ==================>  DaoImpl

6.environments:环境们

 

 – 测试

        mybatis:         xxMapper ================>  xxMapper.xml

 

– 导包:C3P0

– 新创造一个 mapper包,里面包含 mapper接口,与 mapper.xml文件相对应

    
这一个工具依然提供简单的SQL语句之行,可是与大家这里学的MyBatis框架还发生若干不同,

<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
      <properties resource="jdbc.properties"/>

      <environments default="development">
            <environment id="development">
                  <transactionManager type="JDBC" />
                  <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 resource="com/neuedu/mapper/EmployeeMapper.xml" />
      </mappers>
</configuration>

databaseId 与
value 值对应

1.接口式编程

    

4.typeAliases:起别名

 

这儿接口和sql配置文件举办了绑定,还要将select标签的id和方名举行绑定

 

 *    3)使用sql的绝无仅有标识告诉MyBatis执行哪个sql。而sql都是保存

– 创制对应之javaBean

  – 创制sql语句之投文件EmployeeMapper.xml;

    
2)没网的时【/org/apache/ibatis/builder/xml/mybatis-3-config.dtd】:解压mybatis
的jar包然后以eclipse中绑定

     1)联网会自动绑定

9.说到底便是全局配置文件被签实际上是暴发各样的!

网站地图xml地图