Mybatis之一:Mybatis基础配置和使用

一、Mybatis 配置

  • XXXMapper 映射,一般是一个接口
  • XXXMapper.xml Mybatis 封装了 jdbc 操作的配置文件,一般有各种增删改查的 sql 操作

1.maven 依赖
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
2.数据库配置文件 db.properties
db.username=root
db.password=123
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql:///db01?serverTimezone=Asia/Shanghai
3.mybatis-config.xml Mybatis 的全局配置文件

主要配置①与数据库的连接②配置 Mapper 的路径

  • 推荐用 UserMapper 和 UserMapper.xml 文件放在一起,然后在 mybatis-config.xml 中用包扫描的方式和在 pom.xml 中用 build 标签来配置 Mapper 的方式
mybatis-config.xml 中
<configuration>
    <properties resource="db.properties"/>
    
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
                <property name="url" value="${db.url}"/>
                <property name="driver" value="${db.driver}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <package name="com.ze.demo.mapper"/>
    </mappers>
</configuration>
pom.xml中
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

全部代码演示
<?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>

    <!--加载db.properties-->
    <properties resource="db.properties"/>

    <!--为自定义的类配置别名-->
    <typeAliases>
        <!--为 Book 类取一个别名 book-->
<!--        <typeAlias type="com.ze.demo.model.Book" alias="book"/>-->
        <!--
        为 model 包下的所有类取一个别名,默认情况下,别名就是类名首字母小写
        -->
        <package name="com.ze.demo.model"/>
    </typeAliases>

    <!--
    environments 配置系统环境,environments 中有很多 environment,每一个 environment 代表一种环境,比如 prod、dev。通过 environments 中的 default 属性可以实现数据源的一键切换
    -->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <!--配置数据库连接信息-->
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
                <property name="url" value="${db.url}"/>
                <property name="driver" value="${db.driver}"/>
            </dataSource>
        </environment>
    </environments>

    <!--
    配置以下 mapper 文件
    -->
    <mappers>
        <!--指定 Mapper 文件的位置-->
<!--        <mapper resource="com/ze/demo/dao/UserMapper.xml"/>-->
<!--        <mapper resource="com/ze/demo/dao/BookMapper.xml"/>-->
        <!--直接指定所有 mapper 文件的位置-->
<!--        <package name="com.ze.demo.dao"/>-->
        <!--
        换一个思路去配置 mapper
        这种方式是直接去配置接口,指定 mapper 接口。。框架找到接口之后,会自动去查找和接口同名的 xml 配置文件
        -->
        <mapper class="com.ze.demo.dao.BookMapper"/>
    </mappers>
</configuration>

二、Mybatis 的工作流程(伪)


  1. 动态代理
  2. Mapper 接口
  3. Mapper.xml 配置文件
  4. 通过 sqlSession 来 getMapper (获取映射器)
    • 此时通过动态代理生成了一个实现类
    • 通过多态来调用 Mapper 的方法
  5. 增删改需要 sqlSession.commit(),查询不需要

1.Mapper 映射器接口,作用相当于 Dao (动态代理,可能是 JDK 生成的动态代理对象)

开发者只需要提供一个 BookMapper 接口,将来 MyBatis 通过动态代理为接口生成一个实现类,实现类的内容就类似于 UserDao

public interface BookMapper {
    Book getBookById(Integer id);

    Integer addBook(Book book);

    Integer updateBook(Book book);

    Integer deleteBookById(Integer id);

    List<Book> getAllBooks();
}
2.Mapper.xml 映射器配置,在里面写具体的 sql 操作(包括映射)
重点
  1. 一张表的增删改查操作,位于一个 mapper 文件中。
  2. 所有的节点名字要唯一,确保唯一的方式:
    1. 各个 xxxMapper.xml 文件的 namespace 不一样,一般来说,namespace 可以取一个类名全路径
    2. 每一个 xxxMapper.xml 内部的节点 id 不一样
    1. id 是查询标签的唯一名字
    2. resultType 表示这个查询返回的数据类型
    3. parameterType 表示这个语句传入的数据类型
    4. #{id} 表示传入的参数
<?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.ze.demo.dao.BookMapper">
    <select id="getBookById" resultType="book">
        select * from book where id=#{id};
    </select>

    <insert id="addBook" parameterType="book">
        insert into book (name,author) values (#{name},#{author});
    </insert>
    
    <update id="updateBook" parameterType="book">
        update book set name = #{name},author=#{author} where id=#{id};
    </update>
    <!--
    Integer ,系统提供一个别名,叫做 integer
    -->
    <delete id="deleteBookById" parameterType="integer">
        delete from book where id=#{id}
    </delete>
    
    <select id="getAllBooks" resultType="book">
        select * from book;
    </select>
</mapper>
3.创建执行 sql 的对象 SqlSession
重点
  1. 通过 SqlSessionFactoryBuilder.build(Resources.getResourceAsStream(“mybatis-config.xml”)).openSession 创建 SqlSession 对象
  2. 通过 sqlSession.getMapper(BookMapper.class) 动态代理生成一个代理类
  3. 增删改需要 commit, sqlSession.commit();
public class MainDemo3 {
    public static void main(String[] args) throws IOException {
        //1. 构造 SqlSessionFactoryBuilder,SqlSessionFactoryBuilder 可以用来构造一个 SqlSessionFactory
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //2. 加载配置文件,获取一个 sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
        //3. 创建一个 SqlSession,这个类似于 JDBC 中的 Connection
        SqlSession sqlSession = sqlSessionFactory.openSession();

        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
//        Book b = bookMapper.getBookById(1);
//        System.out.println("b = " + b);
        Book b1 = new Book();
        b1.setName("红楼梦1");
        b1.setAuthor("曹雪芹1");
        Integer i = bookMapper.addBook(b1);
        //增删改需要 commit
        sqlSession.commit();
//        List<Book> list = bookMapper.getAllBooks();
//        System.out.println("list = " + list);
//        b1.setId(1);
//        Integer i2 = bookMapper.updateBook(b1);
//        sqlSession.commit();
//        System.out.println("i2 = " + i2);
        //com.ze.demo.dao.BookMapper.deleteBookById
//        Integer i = bookMapper.deleteBookById(2);
//        System.out.println("i = " + i);
//        sqlSession.commit();
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值