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);
}

5.2.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">

<!--namespace 名称空间,指定对哪个接口进行映射-->
<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>

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

緑水長流*z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值