0
点赞
收藏
分享

微信扫一扫

SSM系列——Mybatis相应API,代理开发day5-3

拾光的Shelly 2022-05-03 阅读 56

SSM系列——Mybatis相应API

相应API

SqlSessionFactoryBuilder工厂构建器

SqlSessionFactoryBuilder().build(InputStream inputStream):通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

        //加载核心配置文件
        InputStream resource = Resources.getResourceAsStream("config/sqlMapperConfi.xml");
        //获得sqlSession工厂对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);

SqlSessionFactory工厂对象

用于创建sqlSession实例
常用有

  1. openSession():会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据车中
  2. openSession(boolean autoCommit):参数为是否自动提交,如果设置为true,那么不需要手动提交事务
//获取sqlSession会话对象
//手动提交
SqlSession sqlSession = factory.openSession();
//自动提交
SqlSession sqlSession = factory.openSession(true);

SqlSession会话对象

SqlSession实例在MyBatis中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。
执行语句的方法主要有:

  1. <T> T selectOne(String statement);
  2. <E> List<E> selectList(String statement);
  3. <K, V> Map<K, V> selectMap(String statement, String mapKey);
  4. void select(String statement, Object parameter, ResultHandler handler);
  5. int insert(String statement, Object parameter);
  6. int update(String statement, Object parameter);
  7. int delete(String statement, Object parameter);
  8. void commit();
  9. void rollback();

代理开发

采用Mybatis的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流。
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:

  1. Mapper.xml文件中的namespace与mapper接口的全限定名相同
  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

关键点

使用getMapper方法获取映射sql

例子:

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

namespace命名空间对应Mapper接口

例子:

<mapper namespace="com.example.mybatis.mapper.UserMapper">

示例代码

目录

在这里插入图片描述

对应关系

在这里插入图片描述

1.创建User实体类

package com.example.mybatis.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String username;
    private String password;
}

2.创建UserMapper接口

package com.example.mybatis.mapper;

import com.example.mybatis.entity.User;

import java.io.IOException;
import java.util.List;

public interface UserMapper {

    public List<User> findAll() throws IOException;
    public List<User> findById(Long id);
}

3.创建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">

<mapper namespace="com.example.mybatis.mapper.UserMapper">

    <select id="findAll" resultType="user">
        select *
        from user
    </select>
    <select id="findById" resultType="user" parameterType="long">
        select *
        from user
        where id = #{id}
    </select>
</mapper>

4.创建sqlMapperConfig.xml进行配置

<?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>
    <properties resource="properties/jdbc.properties"></properties>
    <!--    自定义别名-->
    <typeAliases>
        <typeAlias type="com.example.mybatis.entity.User" alias="user"></typeAlias>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}"/>
                <property name="url"
                          value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--    加载映射文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>


5.抽取出jdbc.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/syf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&allowPublicKeyRetrieval=true
username=root
password=syf20020816

6.测试

package com.example.mybatis;

import com.example.mybatis.entity.User;

import com.example.mybatis.mapper.UserMapper;
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;
import java.util.List;

public class Application {
    public static void main(String[] args) throws IOException {
        InputStream resource = Resources.getResourceAsStream("config/sqlMapperConfi.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.findAll();
        List<User> user = mapper.findById(2L);
        user.forEach(System.out::println);
        System.out.println("-----------------");
        list.forEach(System.out::println);
    }
}

在这里插入图片描述

举报

相关推荐

0 条评论