【MyBatis】mybatis传统DAO层使用


其实大概思路是差不多的,所以我直接搬代码了。

持久层接口

package com.siyi.dao;

import com.siyi.domain.User;

import java.util.List;

/**
 * 用户持久层接口
 */
public interface IUSerDao {

    /**
     * 查询所有用户
     * @return
     */
    public List<User> findAll();

    /**
     * 保存用户
     * @param user
     */
    public void saveUser(User user);

    /**
     * 更新用户
     * @param user
     */
    public void updateUser(User user);

    /**
     * 根据Id删除用户
     * @param userId
     */
    public void deleteUser(Integer userId);

    /**
     * 根据id查询用户信息
     * @param userId
     * @return
     */
    public User findById(Integer userId);

    /**
     * 根据名称模糊查询用户信息
     * @return
     */
    public List<User> findByName(String name);

    /**
     * 查询总用户数
     * @return
     */
    public int findTotal();
}

持久层接口的映射文件

<?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.siyi.dao.IUSerDao">
    <!-- 查询所有 -->
    <select id="findAll" resultType="user">
        select * from user;
    </select>

    <!-- 保存用户 -->
    <insert id="saveUser" parameterType="com.siyi.domain.User">
        <!-- 配置插入操作后,获取插入数据的id -->
        <selectKey keyProperty="id" keyColumn="id" resultType="Integer" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday) value(#{username},#{address},#{sex},#{birthday});
    </insert>

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

    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id = #{id}
    </delete>

    <!-- 根据id查询用户 -->
    <select id="findById" parameterType="Integer" resultType="com.siyi.domain.User">
        select * from user where id=#{id}
    </select>

    <!-- 根据名称模糊查询的语法 -->
    <select id="findByName" parameterType="String" resultType="com.siyi.domain.User">
        <!--select * from user where username like #{name} 第一种写法参数必须自己手动加%-->
        select * from user where username like '%${value}%' <!--第二种写法参数固定为value-->
    </select>
    
    <!-- 获取用户的总记录条数 -->
    <select id="findTotal" resultType="Integer">
        select count(*) from user;
    </select>
</mapper>

持久层接口的实现类

package com.siyi.dao.impl;

import com.siyi.dao.IUSerDao;
import com.siyi.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements IUSerDao {

    private SqlSessionFactory factory;

    public UserDaoImpl(SqlSessionFactory factory){
        this.factory = factory;
    }

    public List<User> findAll() {
        //根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2. 调用SqlSession中的方法,实现查询列表
        List<User> users = session.selectList("com.siyi.dao.IUSerDao.findAll");
        //3.释放资源
        session.close();
        return users;
    }

    public void saveUser(User user) {
        SqlSession session = factory.openSession();
        int x = session.insert("com.siyi.dao.IUSerDao.saveUser",user);
        session.commit();
        System.out.println(user);
        session.close();
    }

    public void updateUser(User user) {
        SqlSession session = factory.openSession();
        int x = session.update("com.siyi.dao.IUSerDao.updateUser",user);
        session.commit();
        System.out.println(user);
        session.close();
    }

    public void deleteUser(Integer userId) {
        SqlSession session = factory.openSession();
        int x = session.update("com.siyi.dao.IUSerDao.deleteUser",userId);
        session.commit();
        System.out.println(x);
        session.close();
    }

    public User findById(Integer userId) {
        SqlSession session = factory.openSession();
        User user = session.selectOne("com.siyi.dao.IUSerDao.findById",userId);
        session.commit();
        session.close();
        return user;
    }

    public List<User> findByName(String name) {
        SqlSession session = factory.openSession();
        List<User> users = session.selectList("com.siyi.dao.IUSerDao.findByName",name);
        session.commit();
        session.close();
        return users;
    }

    public int findTotal() {
        SqlSession session = factory.openSession();
        Integer total = session.selectOne("com.siyi.dao.IUSerDao.findTotal");
        session.commit();
        session.close();
        return total;
    }
}

测试类

package com.siyi.test;

import com.siyi.dao.IUSerDao;
import com.siyi.dao.impl.UserDaoImpl;
import com.siyi.domain.User;
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.Date;
import java.util.List;

public class MbatisTest {

    private InputStream in;
    private IUSerDao iuSerDao;

    @Before//用于在测试方法执行之前执行
    public void init() throws IOException {
        //1.读取配置文件生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂对象创建dao对象
        iuSerDao = new UserDaoImpl(factory);
    }

    @After//用于在测试方法之后执行
    public void destroy() throws IOException {
        in.close();
    }

    @Test
    public void testFindAll() throws IOException {
        //5.执行查询所有方法
        List<User> users = iuSerDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 测试保存操作
     */
    @Test
    public void testSave() throws IOException {
        User user = new User();
        user.setUsername("私忆一秒钟");
        user.setAddress("中国四川");
        user.setSex("男");
        user.setBirthday(new Date());
        iuSerDao.saveUser(user);
    }

    @Test
    public void testUpadate(){
        User user = new User();
        user.setId(42);
        user.setUsername("siyiyimiaozhong");
        user.setAddress("sichuan");
        user.setSex("男");
        user.setBirthday(new Date());
        iuSerDao.updateUser(user);
    }

    @Test
    public void testDelete(){
        iuSerDao.deleteUser(55);
    }

    @Test
    public void testFind(){
        User user = iuSerDao.findById(55);
        System.out.println(user);
    }

    @Test
    public void testFindByName(){
        //List<User> users = iuSerDao.findByName("%yi%");
        List<User> users = iuSerDao.findByName("yi");
        for (User user : users){
            System.out.println(user);
        }
    }

    @Test
    public void testFindTotal() {
        System.out.println(iuSerDao.findTotal());
    }
}
发布了476 篇原创文章 · 获赞 152 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41879343/article/details/104872137
今日推荐