MyBatis

2017-10-11  本文已影响0人  无止无尽

关键词:持久层框架、xml配置、JDBC高级对象映射
MyBatis前身是apache的开源项目iBATIS,iBATIS是一个基于Java的持久层框架(持久:指数据能够长久的保存在某些文件或者物理设备(硬盘、磁带)中,而不是存储在内存中随着程序运行结束就丢失),iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO);MyBatis支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或者注解来配置和映射原生信息。将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1、databaseIdProvider
通过数据库别名判断使用哪个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>
<!-- mybatis会自动根据当前使用的数据库,筛选出对应databaseId的sql语句 -->
<select id="selectUserById" resultType="User" databaseId="mysql">
     select * from user where uid=#{value}
</select>

2、properties 加载配置文件

<!-- resource:加载配置文件,如果resource有值,property标签也有值,那么以resource为主 -->
<!-- url:可以加载本地文件,或者网络文件,例如url="file:///d:db.properties"-->
<properties resource="db.properties"> 
      <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>

3、settings 全局配置信息

<settings> 
<setting name="logImpl" value="LOG4J" />
</settings>

4、typeAliases 类型别名

<typeAliases> 
    <!-- 指定某个类的别名 --> 
    <typeAlias type="com.mybatis.bean.User" alias="User"/> 
    <!-- 自动扫描某个包下的所有类,默认将类名的大(小)写作为别名 --> 
    <package name="com.mybatis.bean" /> 
</typeAliases>

5、typeHandler 类型处理器
详解见mybatis官方文档 mybatis官方文档
凡是mybatis内置的类型处理器有的,都可以使用相对于的别名,或者不用写。使用#{value}来取值
例如:

<!-- int输入类型有对应类型处理器处理,所以可以不用写parameterType输入映射 --> 
<select id="selectUserById" resultType="User">
     select * from user where uid=#{value} 
</select>

下面以maven搭建MyBatis框架,Mapper接口开发为例来进行说明:
1、新建maven工程,使用xml进行mybatis-config配置;如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
<?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"/>
          <!--生成日志-->
          <settings>
                <setting name="logImpl" value="LOG4J"/>
         </settings>
          <!--统一为javabean设置类型别名-->
          <typeAliases>
              <package name="com.entity"/>
          </typeAliases>
    ....
<!--环境配置 -->
    <environments default="development">
        <environment id="development">
            <!--事务管理器-->
            <transactionManager type="JDBC"/>
            <!--JDBC数据源-->
            <dataSource type="POOLED">
                <property name="driver" value= "${jdbc.driverClass}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
<!-- mapper映射-->
    <mappers>
        <mapper resource="UserMapper.xml"/>
        <mapper resource="GoodsMapper.xml"/>
    </mappers>
</configuration>

2、在构建好数据库实体对象后,使用xml配置来进行数据库连接操作。

public class Goods {
    private int gid;
    private String gname;
    private double gprice;
    private String description;
    private int num;
    private int good_type;
    private Date create_time;
...
}
public interface GoodsMapper {
    Goods selectGoodsById();//单条查询
    List<Goods> selectGoodsAll(); //多条查询
    Goods updateGoods(); //更新操作
    Goods insertGoods(); //插入操作
    Goods deleteGoods(); //删除操作
}
<mapper namespace="com.mapper.GoodsMapper">
 <resultMap id="GoodsResultMap"  resultType="com.entity.Goods">
     <!--保留id属性,其余可省略-->
  <!--属性映射封装 -->
     <id property="gid" column="gid"/>
     <result property="gname" column="gname"/>
     <result property="gprice" column="gprice"/>
     <result property="description" column="description"/>
   ...
 </resultMap>
<select id="selectGoodsById" resultType="com.entity.Goods">
    select * from goods where gid= 3
</select>
</mapper>

3、mabatis流程处理

  //获取配置文件
        InputStream inputstream = Resources.getResourceAsStream("mybatis-config.xml");
        //创建sqlsessionfactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputstream);
        //获取sqlsession
        SqlSession sqlsession = factory.openSession();
        //获取处理结果
        GoodsMapper mapper = sqlsession.getMapper(GoodsMapper.class);
        //单条查询
//      Goods goods = mapper.selectGoodsById();
        //多条查询
        List<Goods> list = mapper.selectGoodsAll();
        for (Goods goods:list) {
            System.out.println(goods);
        }
上一篇 下一篇

猜你喜欢

热点阅读