Mybatis框架的使用


  • 定义

开源的持久层框架,底层仍然是jdbc
jdbc        优点:速度最快  缺点:繁琐
hibernate   优点:不用写sql,代码简洁  
            缺点:速度慢,需要优化繁杂的sql
mybatis     优点:代码简洁,易掌握 性能速中 需要写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文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值