MyBatis

    技术2025-09-14  76

    1.引入

       上一节课,我们使用MyBatis实现了对数据的查找功能。但是呢这里面有一个问题。什么问题呢,就是我们的这一个代码:

    Admin Admin = openSession.selectOne("com.cn.entity.AdminMapper.getAdmById", 1); //参数给的是Object类型的参数,也就是说可以传递任何形式的参数,如何我们传入了一个和数据库字段中类型不一致的参数。那么它不会报错。但是没有查询的结果。

    为了解决这一个问题。MyBatis给我们提供了一个接口,使用这一个接口来把传入的参数和返回的结果进行一个包装。并且接口可以和我们的配置文件进行动态的绑定。

     

    2.代码实现

    (1).编写接口

    package com.cn.dao; import com.cn.entity.Admin; public interface AdminMapper { public Admin getAdminById(Integer id); }

    (2).配置文件和接口进行动态的绑定,在配置文件中进行设置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.cn.dao.AdminMapper"> <!-- namespace:名称空间;指定为接口的全类名 id:唯一标识 resultType:返回值类型 #{id}:从传递过来的参数中取出id值 public Admin getAdmById(Integer id); --> <select id="getAdmById" resultType="com.cn.entity.Admin"> select id,username,password from admin where id = #{id} </select> </mapper>

    (3).编写测试类

    public class MyBatisTest { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test() throws IOException { // 1、获取sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); // 2、获取sqlSession对象 SqlSession openSession = sqlSessionFactory.openSession(); try { // 3、获取接口的实现类对象 //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法 AdminMapper mapper = openSession.getMapper(AdminMapper.class); Admin Admin = mapper.getAdminById(1); System.out.println(mapper.getClass()); System.out.println(Admin); } finally { openSession.close(); } } }

    (4).实现结果测试

    使用了接口式编程以后,我们有了更好地的解耦和数据校验。

     

    3.HelloWorld案例小总结

    (1).接口式编程的流程和注意事项

    1、接口式编程 原生: Dao ====> DaoImpl mybatis: Mapper ====> xxMapper.xml 2、SqlSession代表和数据库的一次会话;用完必须关闭; 3、SqlSession和connection一样它都是非线程安全。每次使用都应该去获取新的对象。 也就是说:private SqlSession sqlSession;(错误,非线程安全,多线程环境会产生资源的竞争) SqlSession openSession = sqlSessionFactory.openSession();(正确) 4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml进行绑定) AdminMapper mapper = openSession.getMapper(AdminMapper.class); 注意使用的是接口的对象,而不是实体的对象。 5、两个重要的配置文件: mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息 sql映射文件(非常重要):保存了每一个sql语句的映射信息: 将sql抽取出来。

    (4).代码

    链接:https://pan.baidu.com/s/1do75zUmp_sErMfqfNXbtpQ  提取码:rwsj

    Processed: 0.009, SQL: 9