• 05【DAO开发的方式】


    五、DAO开发的方式

    使用 Mybatis开发 Dao,通常有两个方法,即原始 Dao 开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。也就是我们之前用的方式

    5.1 dao 代理的开发

    现在我们来一起总结一下代理方式开发dao:

    • 1)写一个dao接口,定义操作方式

    • 2)需要针对dao接口,写一个对应的映射配置文件

    • 3)映射文件中,namespace对应接口的全名

    • 4)映射文件中的每个标签的id与接口的方法名称对应

    • 5)映射文件中的parameterType指定的类型与接口方法参数类型一致

    • 6)映射文件中的resultType指定的类型与接口方法返回类型一致

    • 7)在主配置文件中,除了配置连接数据库信息、连接池信息外,还要指定加载的接口映射文件

    • 8)在执行时候,mybatis会自动根据dao接口,生成代理对象,由代理对象调用具体的实现方法。

    5.2 dao 传统开发

    mybatis除了支持dao接口代理的开发方式外,还支持传统的写dao接口、dao实现的方式进行dao开发。

    5.2.1 dao接口

    package com.dfbz.dao;
    
    import com.dfbz.entity.Emp;
    
    import java.util.List;
    
    public interface EmpDao {
        // 统计总记录数
        Long count();
    
        // 查询全部
        List<Emp> findAll();
    
        // 模糊查询
        List<Emp> findByName(String name);
    
        // 新增用户
        void save(Emp emp);
    
        // 修改用户
        void update(Emp emp);
    
        // 删除用户
        void delete(Integer id);
    
        // 主键查询
        Emp findById(Integer id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    5.2.2 接口映射

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    
    <mapper namespace="com.dfbz.dao.EmpDao">
    
        
        <select id="count" resultType="long">
            select count(1) from emp
        select>
    
        
        <select id="findAll" resultType="emp">
            select * from emp
        select>
    
        
        <select id="findByName" parameterType="string" resultType="emp">
            select * from emp where name like #{name}
        select>
    
        
        <insert id="save" parameterType="emp">
            <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
                SELECT LAST_INSERT_ID();
            selectKey>
            insert into emp VALUES (null,#{name},#{age},#{salary},#{addr})
        insert>
    
        
        <update id="update" parameterType="emp">
            update emp set name=#{name},age=#{age},salary=#{salary},
            addr=#{addr} where id=#{id}
        update>
    
        
        <delete id="delete" parameterType="int">
            delete from emp where id=#{id}
        delete>
    
        
        <select id="findById" parameterType="int" resultType="emp">
            select * from emp where id=#{id}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    5.2.3 测试类

    package com.dfbz.test;
    
    import com.dfbz.dao.EmpDao;
    import com.dfbz.entity.Emp;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class Demo01 {
    
        InputStream is;
    
        //获取工厂构造器对象
        SqlSessionFactoryBuilder builder;
    
        //获取session工厂
        SqlSessionFactory factory ;
    
        //获取session会话对象,与数据交互会话
        SqlSession session;
    
        EmpDao empDao;
    
        @Before
        public void before() throws Exception{
    
            //获取主配置文件流
            InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
            builder = new SqlSessionFactoryBuilder();
            factory = builder.build(is);
            session = factory.openSession(true);
            empDao = session.getMapper(EmpDao.class);
        }
    
    
        @After
        public void after() throws IOException {            // 关闭session
            session.close();
        }
    
        @Test
        public void test1() {
            Long count = session.selectOne("com.dfbz.dao.EmpDao.count");
            System.out.println(count);
        }
        @Test
        public void test2() {
            List<Emp> userList= session.selectList("com.dfbz.dao.EmpDao.findAll");
            System.out.println(userList);
        }
    
        @Test
        public void test3() {
            List<Emp> empList = session.selectList("com.dfbz.dao.EmpDao.findByName","%小%");
            System.out.println(empList);
        }
        @Test
        public void test4() {
            session.insert("com.dfbz.dao.EmpDao.save",new Emp(null,"小刚",26,"江西吉安",3000.0));
        }
        @Test
        public void test5() {
            session.update("com.dfbz.dao.EmpDao.update",new Emp(2,"李小四",21,"福建南平",8000.0));
        }
        @Test
        public void test6() {
            session.delete("com.dfbz.dao.EmpDao.delete",2);
        }
        @Test
        public void test7() {
            Emp user = session.selectOne("com.dfbz.dao.EmpDao.findOne",1);
            System.out.println(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
  • 相关阅读:
    git 把master分支代码合并到自己分支(常用git 命令)
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wcsrtombs
    java计算机毕业设计医药垃圾分类管理系统源程序+mysql+系统+lw文档+远程调试
    【电子学会】2023年05月图形化三级 -- 数星星
    项目部署教程
    Linux 下的 动静态库
    Spring Boot微服务打包 Docker 镜像发布运行
    MATLAB算法实战应用案例精讲-【数模应用】线性判别分析(附MATLAB、python和R语言代码实现)
    【深度学习】 Python 和 NumPy 系列教程(十九):Matplotlib详解:2、3d绘图类型(5)3D等高线图(3D Contour Plot)
    【QT】信号与槽
  • 原文地址:https://blog.csdn.net/Bb15070047748/article/details/127993561