SpringBoot+MyBatis项目Dao层最简单写法

前言

DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查。这就意味着Dao层要提供增删改查操作。
不知道大家是怎么写Dao层的接口的。如果你没有一个好的思路,那就看看我的思路吧。如果你有更好的思路,欢迎指正。

正文

1.每一个实体类对应一个Dao接口文件和一个mybatis文件

结构如下:

2.UserDao采用统一写法

Dao层只写六个接口就能解决百分之九十的问题

User.java

package com.example.demo.entity;

public class User {
    private Long id;
    private String username;
    private String password;
    private String realname;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", realname='" + realname + '\'' +
                '}';
    }
}

UserDao.java

package com.example.demo.dao;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserDao {
    // 用于添加用户
    int insertUser(User user);

    // 用于删除用户
    int deleteUser(Long userId);

    // 用于更新用户
    int updateUser(User user);

    // 用于查询用户
    User getUser(Long userId);

    // 用于查询用户列表
    List<User> getUserList(@Param("userCondition") User userCondition,
                                @Param("rowIndex") int rowIndex,
                                @Param("pageSize") int pageSize);

    // 用于查询用户列表数量
    int getUserCount(@Param("userCondition") User userCondition);
}

UserDao.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="com.example.demo.dao.UserDao">

    <insert id="insertUser" parameterType="com.example.demo.entity.User"
            useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into
        tb_user(username,password,realname)
        values (#{username},#{password},#{realname})
    </insert>

    <delete id="deleteUser">
        delete from
        tb_user
        where id=#{id}
    </delete>

    <update id="updateUser" parameterType="com.example.demo.entity.User"
            keyProperty="id" useGeneratedKeys="true">
        update tb_user
        <set>
            <if test="username != null">username = #{username},</if>
            <if test="password != null">password = #{password},</if>
            <if test="realname != null">realname = #{realname}</if>
        </set>
        where id=#{id}
    </update>

    <select id="getUser" resultType="com.example.demo.entity.User" parameterType="Long">
         select
         u.id,
         u.username,
         u.password,
         u.realname
         from tb_user u
         where ur.id = #{id}
    </select>

    <select id="getUserList" resultType="com.example.demo.entity.User">
        select
        u.id,
        u.username,
        u.password,
        u.realname
        from tb_user u
        <where>
            <if test="userCondition != null and userCondition.username != null">
                and u.username LIKE concat('%',#{userCondition.username},'%')
            </if>
            <if test="userCondition != null and userCondition.realname != null">
                and u.realname LIKE concat('%',#{userCondition.realname},'%')
            </if>
        </where>
        limit #{rowIndex},#{pageSize};
    </select>

    <select id="getUserCount" resultType="int">
        select count(1) from tb_user u
        <where>
            <if test="userCondition != null and userCondition.username != null">
                and u.username LIKE concat('%',#{userCondition.username},'%')
            </if>
            <if test="userCondition != null and userCondition.realname != null">
                and u.realname LIKE concat('%',#{userCondition.realname},'%')
            </if>
        </where>
    </select>
</mapper>
3.使用方法

添加用户

User user = new User();
user.setUsername("lauyon");
user.setRealname("lauyon");
user.setPassword("e10adc3949ba59abbe56e057f20f883e");
int insertCount = userDao.insertUser(user);   //返回添加数据的条数

删除用户

int deleteCount = userDao.deleteUser(1L);   //返回删除用户的个数

更新用户

User user = new User();
user.setId(1L);         // 注意:与添加用户不同
user.setUsername("lauyon2");
user.setRealname("lauyon2");
user.setPassword("pf2wzmefd3sfgh5dfs6sdf");
int count = userDao.updateUser(user);   //返回更新数据的条数

查询用户

User user = userDao.getUser(1L);    //返回用户,参数为用户Id

查询用户列表

int listCount = userDao.getUserCount(userCondition);    //返回给service层,用于封装分页对象
List<User> userList = userDao.getUserList(userCondition, (page - 1) * size, size);  //page:页码       size:每页的数据数量

至此,已经列举了基本的增删改查接口。当然,还可以组合出其他接口,可以解决大部分实际问题。

如果这篇博客对你有用,点个赞再走呗~

原文地址:https://www.cnblogs.com/lauyon/p/12257888.html

时间: 2024-10-12 08:40:12

SpringBoot+MyBatis项目Dao层最简单写法的相关文章

基于Mybatis的Dao层的开发

基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量. SqlSessionFactory是一个接口,接口中定义了openSession

MyBatis的Dao层注入SqlSession

有点坑爹,以前没用过Mybatis,最近才用,而且一直用Mybatis推荐的接口映射的方式,但是今天有人告诉我接口方式用得少,大多还是采用从配置文件里面读sql的方式,当然接口也是类似的,都是利用mapper.xml. 于是就想把这东西整合进来,当进行dao的时候发现一个小问题,sqlSession怎么注入进来的问题,以前Hibernate的的习惯用sessionFactory的openSession()方法,但是每个方法都要open一下,麻烦,就想能不能直接把sqlSession通过注解注入进

基于Mybatis的Dao层开发

转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为 SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用, 最佳使用范围是

MyBatis开发Dao层的两种方式(Mapper动态代理方式)

MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上一篇博客中Dao接口实现类方法. Mapper接口开发需要遵循以下规范: (1)Mapper.xml文件中的namespace与mapper接口的类路

SpringBoot Mybatis项目中的多数据源支持

1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 2.建数据源 首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据 CREATE TABLE `groupidinfo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `groupId` varchar(255) DEFAULT NULL, `versio

02.MyBatis在DAO层开发使用的Mapper动态代理方式

在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis Mybatis鼓励使用Mapper动态代理的方式 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体等于Dao接口实现类方法. 1.编写Mapper.xml映射文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP

java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl

在spring+hibernate的web项目中,处理数据层通常会使用Spring框架提供的HibernateTemplate类提供的方法.通常的用法是每一个实体类对应的去写DAO层的接口和实现类.每个实现类中都写hibernateTemp.save(entity).hibernateTemp.update(entity).hibernateTemp.get(id)...这样写固然没错,但存在着大量的重复代码.所以懒惰的程序员烦了,他们要写一个通用的实现类来解决这个问题,让DAO层解放出来.如果

Mybatis 传统 DAO 层开发[了解]

目录 Mybatis 实现 DAO 的传统开发方式 持久层 Dao 接口 持久层 Dao 实现类 持久层映射配置 测试类 Mybatis 实现 DAO 的传统开发方式 持久层 Dao 接口 package com.sunyan.dao; import com.sunyan.domain.User; import java.util.List; /** * 持久层接口 */ public interface UserDao { /** * 查询所有用户 * @return */ List<User

简单的Dao层的模板写法

public class CategoryDAO { public int getTotal() { int total = 0; try (Connection c = DBUtil.getConnection(); Statement s = c.createStatement()) { String sql = "select count(*) from Category"; ResultSet rs = s.executeQuery(sql); while (rs.next()