Mybatis框架的使用

来源:互联网 发布:女生滴风油精知乎 编辑:程序博客网 时间:2024/06/08 09:02


  • 定义

开源的持久层框架,底层仍然是jdbc
jdbc        优点:速度最快  缺点:繁琐hibernate   优点:不用写sql,代码简洁              缺点:速度慢,需要优化繁杂的sqlmybatis     优点:代码简洁,易掌握 性能速中 需要写sql
  1. 步骤

step1.导包。 mybatis,ojdbc
step2 添加配置文件
step3 实体类
注: 属性必须和表中字段一致,不一致需要额外配置
step4 添加映射文件
主要是sql语句
step5 调用mybatis提供的api访问数据库
注:SqlSession提供的方法

基本原理

这里写图片描述

查询时

  1. 返回map类型的结果
  2. mybatis会将查询结果分两步处理:
    step1. 将记录中的数据添加到一个对应的Map对象里面
    (以字段名作为key,以字段值作为value)。
    step2. 再将Map对象中的数据添加到对应的实体对象里面。

    这里写图片描述

解决字段名与实体类属性名不一致的情况

方式一  使用别名,比如

SELECT id empId,name ename……

方式二  使用resultMap。
<!-- 解决实体类和数据库表的字段的名称不一致的情况 -->    <select id = "findAll2" resultMap="bookResultMap">        SELECT * FROM books    </select>    <!-- 对实体类和表的字段不一致的进行设置,字段一致的不需要设置 -->    <resultMap type = "entity.Book" id = "bookResultMap">        <result property = "bId" column="id"/>    </resultMap>

这里写图片描述

Mapper映射器

定义: 符合映射文件要求的接口
要求如下

方法名要与 sqlId 一致
方法的返回值要与resultType一致
方法的参数类型要与parameterType一致。
映射文件的namespace必须等于接口的完整的名字

mybatis会生成符合该接口(mapper映射器)要求的对象。

如何使用mapper映射器?
step1.按照要求写好接口。
step2.调用SqlSession提供的getMapper方法来获得接口实现。

测试代码

public class Test1 {    private SqlSession session;    @Before    public void init() {        String config = "SqlMapConfig.xml";        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();        SqlSessionFactory ssf = ssfb.build(Test.class.getClassLoader().getResourceAsStream(config));        session = ssf.openSession();    }    @Test    public void t8() {        BookDao dao = session.getMapper(BookDao.class);        Book b = new Book();        b.setbId(12);        b.setName("葵花宝典");        b.setNum(50);        b.setInfor("欲练此功,必先自宫");        dao.updateById(b);        session.commit();        session.close();    }

定义的Mapper接口

public interface BookDao {    /**     *  增,删,改,查     */    public List<Book> findAll2();    public void save(Book b);    public void deleteByName(String name);    public void updateById(Book b);}

mybatis配置文件 (sqlMapconfig.xml)

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"     "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><configuration>    <environments default="environment">        <environment id="environment">            <transactionManager type="JDBC" />            <dataSource type="POOLED">                <property name="driver"                 value="oracle.jdbc.driver.OracleDriver" />                <property name="url"                    value="jdbc:oracle:thin:@localhost:1521:orcl" />                <property name="username" value="scott" />                <property name="password" value="tiger" />            </dataSource>        </environment>    </environments>    <!-- 指定映射文件的位置 -->    <mappers>        <mapper resource="entity/BookMapper.xml" />    </mappers></configuration> 

配置文件中(bookMapper.xml)

<mapper namespace="dao.BookDao">    <select id = "findAll" resultType = "entity.Book">        SELECT * FROM books         </select>    <!-- 解决实体类和数据库表的字段的名称不一致的情况 -->    <select id = "findAll2" resultMap="bookResultMap">        SELECT * FROM books    </select>    <!-- 对实体类和表的字段不一致的进行设置,字段一致的不需要设置 -->    <resultMap type = "entity.Book" id = "bookResultMap">        <result property = "bId" column="id"/>    </resultMap>    <!-- 增加 -->     <insert id = "save" parameterType ="entity.Book">        INSERT INTO books(id,name,num,infor) VALUES(book_seq.nextval,#{name},#{num},#{infor})    </insert>    <delete id = "deleteByName" parameterType="string">        DELETE FROM books WHERE name = #{n}     </delete>    <update id = "updateById" parameterType="entity.Book">        UPDATE books SET name = #{name},num = #{num},infor=#{infor}        WHERE id = #{bId}    </update></mapper>

总结: 在 sqlMapconfig.xml 指定 bookMapper.xml文件的位置。
在调用 SqlSession 提供的api进行相应的数据库操作
一般情况下,一张表,对应一个实体类,并为这个实体类配置一个xxx.xml文件。

原创粉丝点击