MyBatis3---Dao开发方法

接上篇文章,Mapper的增删改查

Dao开发方法

  • 有两种:传统Dao方法和Mapper代理
  • 基本不用传统Dao方法—>因为麻烦
  • 推荐使用Mapper代理

1.传统Dao方式

  • UserDao接口
package com.neuedu.Dao;

import com.neuedu.entity.User;

public interface UserDao {
    void insertUser(User user);
}

  • UserDaoImpl 类,实现UserDao接口
package com.neuedu.Dao;

import com.neuedu.entity.User;
import com.neuedu.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class UserDaoImpl implements UserDao{
    private SqlSessionFactory sqlSessionFactory;
    @Override
    public void insertUser(User user) {
        sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
//        using
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            int insert = sqlSession.insert("com.neuedu.mapper.UserMapper.insertUser", user);
            System.out.println(insert);
            sqlSession.commit();
        }
    }
}

  • MyBatisUtils
package com.neuedu.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MyBatisUtils {
    public static SqlSessionFactory getSqlSessionFactory(){
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        SqlSessionFactory sqlSessionFactory=null;
        try {
//            读取配置文件
            inputStream = Resources.getResourceAsStream(resource);
//            通过SqlSessionFactoryBuilder对象 来获取一个SqlSessionFactory对象
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return sqlSessionFactory;
    }

    public static SqlSession getSqlSession(){
        return getSqlSessionFactory().openSession();
    }
}

  • UserDaoImplTest 测试
package com.neuedu;

import com.neuedu.Dao.UserDaoImpl;
import com.neuedu.entity.User;
import org.junit.Test;

public class UserDaoImplTest {
    @Test
    public void insertUser(){
        UserDaoImpl userDao = new UserDaoImpl();
        User user = new User();
        user.setUsername("小宋");
        userDao.insertUser(user);
    }
}

拓展:什么是Dao层,Entity层,Service层,Utils层?

Dao层

  • DAO(Date Access Object)模型就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间.
  • Dao是数据访问层,Dao的作用是封装对数据库的访问---->增删改查,不涉及业务逻辑,只是达到某个条件获得指定数据的要求

Entity层

  • Entity层—>就是实体层,放置一个个实体,以及相应的set,get方法.
  • 如果想要对数据库进行一些操作(比如说读取)的话,就要先写entity层.

Service层

  • Service被称为业务逻辑层,就是处理逻辑上的业务,而不去考虑具体的实现
  • Service层通常使用接口来定义,为什么?
    • java中接口是多继承的,而类是单继承的,如果需要一个类实现多个service,就可以用接口来实现,用类定义service就没那么灵活
    • 要提供不同的数据库的服务时,我们只需要面对接口用不同的类实现即可,而不用重复地定义类

Servlet层

  • Servlet(Server Applet)是java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容
  • Servlet实现过程
    • (1)客户端发送请求至服务器端
    • (2)服务器将请求信息送至Servlet
    • (3)Servlet生成响应内容并将其传给服务器.响应内容动态生成,通常取决于客户端的请求
    • (4)服务器将响应返回客户端
  • Servlet可以完成以下任务
    • (1)动态生成HTML文档
    • (2)将请求转发给Servlet组件
    • (3)读取客户端的Cookie,以及向客户端写入Cookie
    • (4)访问服务器的资源,如数据库,XML,文件对象等
  • Servlet的特点
    • (1)Servlet对象,有Servlet容器(Tomcat)创建
    • (2)Servlet是一个接口,位于javax.servlet包中
    • (3)service方法用于接受用户的请求并返回响应
    • (4)用户访问时多次被执行(可以统计网站的访问量)

Utils层

  • Util是utility的缩写,是一个多功能,基于工具的包.
  • 如字符串处理,日期处理等,(建立数据库之间的连接),是通用的,与业务无关的,可以独立出来的,可供其他项目使用

2.Mapper代理

  • (1)编写Mapper接口
    接口定义有如下特点:
    1.Mapper接口方法名和Mapper.xml中定义的statement的id相同
    2.Mapper接口方法的输入参数类型和Mapper.xml中定义的statement的parameterType的类型相同
    3.Mapper接口方法的输出参数类型和Mapper.xml中定义的statement的resultType的类型相同

  • 也就是说,Mapper接口的编写格式是:resultType id(parameterType)
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • UserMapper 接口

package com.neuedu.mapper;

import com.neuedu.entity.User;

public interface UserMapper {
    /**
     * insertUser:现在要调用UserMapper.xml中的insertUser(注意:方法名一定是UserMapper.xml文件中有的)
     * void:UserMapper.xml中的insertUser方法,没有要输出的值-->所以返回类型resultType为void
     *User user:与UserMapper.xml中的parameterType相同
     */
    void insertUser(User user);
    void updateUser(User user);
    User findById(Integer id);
    void deleteById(Integer id);
}

  • UserMapperTest2 测试
package com.neuedu;

import com.alibaba.fastjson.JSON;
import com.neuedu.entity.User;
import com.neuedu.mapper.UserMapper;
import com.neuedu.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Before;
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class UserMapperTest2 {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setup(){
        sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
    }

    @Test
    public void insertUser(){
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();
            user.setUsername("李小四");
            user.setSex("女");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
            user.setBirthday(sdf.parse("2023-1-1"));

            userMapper.insertUser(user);

            sqlSession.commit();

        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void updateUser(){
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();

            user.setId(9);
            user.setUsername("赵四");
            user.setSex("男");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
            user.setBirthday(sdf.parse("2023-1-1"));
            user.setAddress("东北");

            userMapper.updateUser(user);

            sqlSession.commit();

        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    @Test
    public void findById(){
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();
            user=mapper.findById(9);
            System.out.println(JSON.toJSONString(user));
            sqlSession.commit();
        }
    }

    @Test
    public void deleteById(){
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User();
            mapper.deleteById(12);
            sqlSession.commit();
        }
    }
}

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值