Mybatis框架的基本开发

Mybatis框架的存在简化业务代码与数据库的交互,实现了对数据库的操作与业务逻辑的解耦,方便维护。

Mybatis的开发步骤:

  • 添加Mbatis的坐标。
  • 创建数据表。
  • 创建实体类。
  • 编写映射文件。
  • 编写核心文件。
  • 编写测试类。

使用Mybatis实现简单的开发:

添加Mybatis坐标的代码:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.9</version>
</dependency>

创建数据表:

创建实体类:

public class User1 {
    private String username;
    private  Integer password;

    public String getUsername() {
        return username;
    }

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

    public Integer getPassword() {
        return password;
    }

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

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

创建映射文件:

<?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">

<!--namesapce属性 表示当前文件的命名空间  可以是使用 命名空间。id(sql操作的id来进行具体的实现和调用)-->
<mapper namespace="Mymapper">
<!--    来个参数分别表示 id就是id   resultType 参数指明返回值的类型-->
    <select id="user1"  resultType="com.itheima.zhujie.doman.User1">
        select * from user
    </select>
</mapper>

 映射文件详解:

映射文件中<mapper namespace="Mymapper">中的namespace属性是代表的映射文件的命名空间,

<sql标签 id="id名称"  resultType="封装返回数据的实体类的权限类名"  parameterType="对传入sql数据的权限类名,可以是实体类型也可以是普通的数据类型" >

通过id+命名空间可以实现调用映射文件中特定的sql操作。

主配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置当前数据源的环境-->
<!--   下面可以配置很多的环境  default属性就是指明选择下面的那个环境 -->
        <environments default="deve">
<!--            指明当前环境的  环境id  供上面进行选择-->
            <environment id="deve">
<!--            指明是使用的哪一个事务管理器-->
                <transactionManager type="JDBC"></transactionManager>
<!--                配置数据源    type属性是指明当前数据源的类型 POOLED 表示的是池类型的 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>

          <!--    加载映射文件-->
        <mappers>
              <mapper resource="mapper/UserMapper.xml"></mapper>
        </mappers>

</configuration>

由 <environments default="deve">和<environment id="deve">可以看出在主配置文件中可以配置多个数据源,可以根据运行环境来选择不同的数据源。例如:测试时的数据源,编译时的数据源。

配置数据源的时候需要指明数据源的事务管理器,需要指明数据源的类型。

需要加载映射文件,<mapper resource="映射文件的地址">中映射文件的地址是相对于类加载路径的。加载映射文件路径的原因是在使用Mybatis时需要加载主配置文件,所以在主配置文件中引入映射文件一起加载。

测试类:

public static void main(String[] args) throws IOException {
        //加载核心配置文件   其中参数的地址是相对于  类加载路径下的地址
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session的会话对象
        SqlSession sqlSession = build.openSession();
        //执行数据库的操作  参数是 命名空间.id
        List<User1> objects = sqlSession.selectList("Mymapper.user1");
        System.out.println(objects);
        //关闭session会话对象
        sqlSession.close();

    }
}

Mybatis的增删改查的操作

插入操作:

测试类:

 只要对数据中的数据进行了修改就需要进行提交事务的操作。sql会话对象.commit()。

执行操作中user参数是进行传入sql语句的实体类对象。

修改操作

测试类:

映射文件中:

 

 使用#{*******}表达式来进行接收传入的实体类对象中的属性值,***要和实体类中的属性名一致,才能实现精确封装。

 删除操作:

 这是传入的参数是基本数据类型所以paramterType的属性值书写简单类型的权限类名。

sql语句中使用#{任意字符串}方式引用传递的单个参数

核心配置文件概述:

 

 

 为数据类型定义别名

在映射文件中操作sql语句的参数或者是sql语句返回的数据类型 可以使用别名来进行设置,减少代码的复杂度。

基本数据类型的别名:

 不是基本数据类型的,是自己创建的实体类,需要在核心配置文件中进行定义别名。

示例:

 其中type代表的是需要进行设置别名的实体类的权限别名,alias表示定义的别名。

Mybatis的相关API:

 桉树

 

Mybatis通过接口的代理方式实现Dao层

    使用这种方式只需要我们编写Mapper接口,由mybatis框架来进行创建对应的实现类【原理是使用动态代理】

接口代理方式的开发规范:

  • Mapper.Xml文件中的namespace(映射文件中额命名空间)和Mapper接口的全限定名相同。
  • Mapper接口中的方法名和Mapper。Xml中定义的每个statement(sql操作的标签)的id相同。
  • Mapper接口中的方法的输入参数类型要和映射文件中定义的每个sql的parameterType的类型相同。
  • Mapper接口中的方法的返回值要和映射文件中定义的每个sql的resultType的类型相同相同。

图形规范:

 代码实现:
Dao层接口:
mapper代码的实现:

public interface UserDao {
      void  save();
}

映射文件:

 测试代码:

@Test
 public  void   sh() throws IOException {

    //加载核心配置文件   其中参数的地址是相对于  类加载路径下的地址   返回值是一个流
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //获得sqlsession工厂对象
    SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
    //获得sqlsession的会话对象
    SqlSession sqlSession = build.openSession();
    //执行数据库的操作
    UserDao1 mapper = sqlSession.getMapper(UserDao1.class);
    List<User> save = mapper.save();
    System.out.println(save);

    //关闭session会话对象
    sqlSession.close();

使用接口代理的方式需要使用sqlsession会话对象创建mapper对象,sqlSession.getMapper(UserDao1.class);参数是mapper接口的类对象。 List<User> save = mapper.save();返回值类型自动识别。

 mapper接口中的方法含有参数:

    dao层接口:

 映射文件:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值