Mybatis的Entity,Mapper,Service层的小示例——(初学Mybatis)

简介:

Entity就是实体层,我理解是java中的一个实体类,一个对象。

Mapper层与DAO等价,是用于直接操作数据库的层。

Service层就是对DAO层进行封装,相当于做好的工具,让用户直接用就好了。

 Mybatis和数据库的引入

这里使用Maven进行项目的构建,Maven引入上述jar包版本如下

<!--引入mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>

    <!--引入数据库-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.24</version>
    </dependency>

试验对象--User

这里创建一个Entity-->User

User.java

package org.test.mybatis.entity;

public class User {
//这是三个属性
    private int userId;

    private String userName;

    private String password;

//这里是String化,以后用这个方法能输出看到user内容

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
//下面是上面三个属性的setter、getter
    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

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

userMapper--(与User实体对应的Mapper,这里只写select、insert两个数据库操作方法)

userMapper.java

package org.test.mybatis.Mapper;

import org.apache.ibatis.annotations.Param;
import org.test.mybatis.entity.User;

public interface userMapper {
//这里的@Param是表示有一个参数userId,这个是在Mybatis的xml文件上用的,不然Mybatis识别不了这个参数
    User selectUser(@Param("userId") int userId);

    int insertUser(User user);

}

有了userMapper.java就必须要有对应的userMapper.xml文件与它对应,不然操作不了数据库。当然,这个xml文件生成后也是会用得到的,将在后面Mybatis配置文件中进行使用。

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

<!--
以下语句可以这样理解:
    在org.test.mybatis的包下有一个接口类:userMapper
    然后里面有一个方法:selectUser,且该方法暂时没有放置参数,当sql语句带有条件时可以添加参数进行sql条件查询,该方法的返回值是User类型的数据
namespace处就填写userMapper的全文称路径(好像是叫这个名)
-->
<mapper namespace="org.test.mybatis.Mapper.userMapper">
    <select id="selectUser" resultType="org.test.mybatis.entity.User">
        select * from test1
    </select>
    <insert id="insertUser">
        <!--这里没有userId的原因是:我已经在数据库中设置这个字段为自增长,所以这里没有-->
        insert into test1 (userName,password)
        values (#{userName},#{password})
    </insert>
</mapper>

userService.java——对Mapper层进行一个封装

这里是一个接口类,里面的方法实现将在userServiceImpl.java中进行实现。

userService.java

package org.test.mybatis.Service;

import org.test.mybatis.entity.User;

public interface userService {

    User queryUser(int userId);

    int addUser(User user);

}

userServiceImpl.java

package org.test.mybatis.Service;

import com.mysql.cj.Session;
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.test.mybatis.Service.userService;
import org.test.mybatis.entity.User;

import java.io.IOException;
import java.io.InputStream;

public class userServiceImpl implements userService {
    //导入配置文件
    String config = "MybatisDispositions.xml";
    //将配置文件转换成stream
    InputStream inputStream = Resources.getResourceAsStream(config);
    //这是必需要添加的东西,现在不太清楚为什么,有待后面了解
    public userServiceImpl() throws IOException {
    }

    //每个Mybatis都必须具备的SqlSessionFactory。使用一个SqlSessionFactory建造器,通过将转换的配置流交给建造器建造起SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    //建造完成后,再把Session给打开就可以使用SqlSession进行数据库操作(即openSession)

    @Override
    public User queryUser(int userId) {
        User result = new User();
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            User user = sqlSession.selectOne("selectUser",userId);

            result = user;
        }catch (Exception e) {e.printStackTrace();}
        return result;
    }

    @Override
    public int addUser(User user) {
        int num = 0;
        try (SqlSession session = sqlSessionFactory.openSession()) {
            num = session.insert("insertUser",user);
            session.commit();
        }catch (Exception e) {e.printStackTrace();}
        return num;
    }
}

配置文件——Mybatis连接数据库所使用的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    XML 头部的声明,它用来验证 XML 文档的正确性。
    environment 元素体中包含了事务管理和连接池的配置。
    mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。
-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--以下配置是Mybatis中的关键配置-->
    <environments default="development">
        <environment id="development">
            <!--这是一个决定事务作用域和控制方式的事务管理器-->
            <transactionManager type="JDBC"/>
            <!--这是获取数据库连接实例的数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/wechartsmallprogrammanage?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="org/test/mybatis/userMapper.xml"/>
    </mappers>
</configuration>

最后再写个测试类TestMybatis.java

TestMybatis.java

package org.test.mybatis;

import org.test.mybatis.Service.userServiceImpl;
import org.test.mybatis.entity.User;

import java.io.IOException;

public class TestMybatis {
    public static void main(String[] args) throws IOException {
//这就是对代码进行Entity、Mapper、Service分层的代码,
//我们可以看到这里的代码量算是挺少的,这也算是一个好处
//代码也可以很容易读懂,这样后期维护起来也简单
        userServiceImpl serviceImpl = new userServiceImpl();
        User user = new User();
        user.setUserName("aaa");
        user.setPassword("a");

        int num = serviceImpl.addUser(user);

        User user1 = serviceImpl.queryUser(1);
        System.out.println(num);
        System.out.println("=============================");
        System.out.println(user1.toString());

    }
}

//输出结果如下:
//   1
//   =============================
//   User{userId=1, userName='aaa', password='a'}

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值