Mybatis编写dao接口实现类

使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao开发方式和 Mapper 接口代理开发方式。而现在主流 的开发方式是接口代理开发方式,这种方式总体上更加简便。现在给大家介绍一下基于传统编写 Dao 实现类的开发方式。

dao接口:

package ypy.dao;

import ypy.domain.User;

import java.util.List;

public interface IUserDao {
    /**
     * 功能描述:查询所有用户信息
     * @Param:null
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 17:17
     */
    List<User> findAll();
    
    /**
     * 功能描述:保存用户信息
     * @Param: user
     * @return : 
     * @author : yupeiyang
     * @date : 2020/3/10 17:35
     */
    void saveUser(User user);

    /**
     * 功能描述:更新用户信息
     * @Param: user
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 18:30
     */
    void updateUser(User user);

    /**
     * 功能描述:删除用户信息
     * @Param: useid
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 18:30
     */
    void deleteUser(Integer id);

    /**
     * 功能描述:按照用户id查询用户信息
     * @Param: useid
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 18:30
     */
    User findById(Integer id);

    /**
     * 功能描述:按名字模糊查询用户信息
     * @Param: username
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 18:30
     */
    List<User> findByName(String username);

    /**
     * 功能描述:统计记录条数
     * @Param: null
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 18:30
     */
    int findTotal();
}

dao接口实现类:

package ypy.dao.impl;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import ypy.dao.IUserDao;
import ypy.domain.User;

import java.util.List;

public class UserDaoImpl implements IUserDao {
    private SqlSessionFactory factory;
    public UserDaoImpl(SqlSessionFactory factory){
        this.factory = factory;
    }

    public List<User> findAll() {
        SqlSession session = factory.openSession();
        List<User> users = session.selectList("ypy.dao.IUserDao.findAll");
        session.close();
        return users;
    }

    public void saveUser(User user) {
        SqlSession session = factory.openSession();
        session.insert("ypy.dao.IUserDao.saveUser",user);
        session.commit();
        session.close();
    }

    public void updateUser(User user) {
        SqlSession session = factory.openSession();
        session.update("ypy.dao.IUserDao.updateUser",user);
        session.commit();
        session.close();
    }

    public void deleteUser(Integer id) {
        SqlSession session = factory.openSession();
        session.delete("ypy.dao.IUserDao.deleteUser",id);
        session.commit();
        session.close();
    }

    public User findById(Integer id) {
        SqlSession session = factory.openSession();
        User user = session.selectOne("ypy.dao.IUserDao.findById",id);
        session.close();
        return user;
    }

    public List<User> findByName(String username) {
        SqlSession session = factory.openSession();
        List<User> users = session.selectList("ypy.dao.IUserDao.findByName",username);
        session.close();
        return users;
    }

    public int findTotal() {
        SqlSession session = factory.openSession();
        int count = session.selectOne("ypy.dao.IUserDao.findTotal");
        session.close();
        return count;
    }
}

dao接口的xml文件:

<?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="ypy.dao.IUserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="ypy.domain.User">
        select * from user
    </select>

    <!-- 添加用户信息 -->
    <insert id="saveUser" parameterType="ypy.domain.User">
        <!-- 配置插入操作后,获取插入数据的id -->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="ypy.domain.User">
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
    </update>

    <!-- 删除用户信息 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{userid};
    </delete>

    <!-- 按照用户id用户信息 -->
    <select id="findById" parameterType="java.lang.Integer" resultType="ypy.domain.User">
        select * from user where id=#{userid};
    </select>

    <!-- 模糊查询用户信息 -->
    <select id="findByName" parameterType="java.lang.String" resultType="ypy.domain.User">
        select * from user where username like #{name};
    </select>

    <!-- 统计用户信息条数 -->
    <select id="findTotal" resultType="int">
        select count(id) from user;
    </select>
</mapper>

Mybatis测试类:

package ypy.test;

import org.apache.ibatis.io.Resources;
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 ypy.dao.IUserDao;
import ypy.dao.impl.UserDaoImpl;
import ypy.domain.User;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatiesTest {
    private InputStream in = null;
    //private SqlSession session = null;
    private IUserDao userDao = null;

    @Before
    public void init() throws Exception{
        //读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //使用工厂生产SqlSession对象
        //session = factory.openSession();
        //使用SqlSession创建Dao接口的代理对象
        //userDao = session.getMapper(IUserDao.class);
        userDao = new UserDaoImpl(factory);
    }

    @After
    public void destory() throws Exception{
        //session.close();
        in.close();
    }

    /**
     * 功能描述:测试查询所有
     * @Param:
     * @return :
     * @author : yupeiyang
     * @date : 2020/3/10 17:25
     */
    @Test
    public void testfindAll(){
        //使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user:users){
            System.out.println(user);
        }
    }

    @Test
    public void testSave(){
        User user = new User();
        user.setUsername("wwj");
        user.setAddress("安徽利辛");
        user.setSex("女");
        user.setBirthday(new Date());
        System.out.println("\n保存数据前的id值:"+user);
        //使用代理对象保存数据
        userDao.saveUser(user);
        System.out.println("\n保存数据后的id值:"+user);
        //提交事务
        //session.commit();
    }

    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(43);
        user.setUsername("李太白");
        user.setAddress("小亚细亚");
        user.setSex("男");
        user.setBirthday(new Date());

        //使用代理对象保存数据
        userDao.updateUser(user);
        //提交事务
        //session.commit();
    }

    @Test
    public void testDelete(){
        //使用代理对象保存数据
        userDao.deleteUser(54);
        //提交事务
        //session.commit();
    }

    @Test
    public void testFindOne(){
        //使用代理对象保存数据
        User user = userDao.findById(45);
        System.out.println(user);
    }

    @Test
    public void testFindName(){
        //使用代理对象保存数据
        List<User> users = (List<User>) userDao.findByName("%小%");
        for(User user:users){
            System.out.println(user);
        }
    }

    @Test
    public void testFindTotal(){
        int count = userDao.findTotal();
        System.out.println("\n--------------------");
        System.out.println(count);
        System.out.println("--------------------\n");
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值