mybatis基础语法

Mybatis快速入门

1.需求

使用MyBatis查询所有的用户, 封装到List集合

2.分析

  1. 创建maven工程(jar),添加坐标
  2. 创建pojo
  3. 创建UserDao接口
  4. 创建UserDao映射文件
  5. 创建Mybatis核心配置文件SqlMapConfig.xml
  6. 编写java代码测试

3.实现

准备工作:

• 数据库
CREATE TABLE t_user(
uid int PRIMARY KEY auto_increment,
username varchar(40),
sex varchar(10),
birthday date,
address varchar(40)
);

INSERT INTO t_user VALUES (null, ‘zs’, ‘男’, ‘2018-08-08’, ‘北京’);
INSERT INTO t_user VALUES (null, ‘ls’, ‘女’, ‘2018-08-30’, ‘武汉’);
INSERT INTO t_user VALUES (null, ‘ww’, ‘男’, ‘2018-08-08’, ‘北京’);

MyBatis快速入门

命名普遍规则:
类,接口名:两个大写字母。如:UserDao
方法名:中间的大写字母。如:findAll
Dao接口的名字:pojo+Dao。比如:UserDao

1. 创建Maven工程,添加坐标
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <!--引入lombok的依赖-->
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
  </dependency>
  <!--mysql驱动-->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
  </dependency>
  <!--mybatis的依赖-->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
  </dependency>
</dependencies>
2. 创建pojo



public class User implements Serializable {
    private Integer uid;            //用户id
    private String username;    //用户姓名
    private String sex;         //用户性别
    private Date birthday;      //用户生日
    private String address;     //用户地址
}
3. 创建UserDao接口

 UserDao接口就是我们持久层接口(也可以写成UserMapper)

public interface UserDao {

    /**
     * 执行一个查询所有用户的sql语句,并且将查询到的结果封装到List<User>
     * @return
     */
    public List<User> findAll();
}
4. 创建UserDao.xml映射文件

注意:

  1. 映射配置文件的路径在resources里面,要和对应的Dao接口的路径保持一致
  2. 映射配置文件的文件名必须和Dao接口名保持一致
  3. 一定要引入约束文件
  4. Sql语句不要有;号结尾。
    在这里插入图片描述
    注意在rosource下用/,用.的话不会分隔,会全部成一个包名。
<?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,一个映射配置文件,对应一个dao接口
    根标签的namespace属性的值就对应dao接口的权限定名
-->
<mapper namespace="com.gavin.dao.UserDao">
    <!--
        根标签的每一个子标签就对应dao接口的每一个方法:
            select标签对应了查询方法
            标签的id值对应方法的名字
            标签的resultType的值就对应封装结果类型,如果封装结果类型是List就对应其泛型的类型
            标签体的内容就是要执行的SQL语句
    -->
    <select id="findAll" resultType="com.gavin.pojo.User">
        select * from t_user//!!不要有;了!
    </select>
</mapper>
5. 创建mybatis核心配置文件SqlMapConfig.xml

注意:

  1. 存放的路径必须是resources的根路径
  2. 配置文件的名字,随便写
  3. 一定要引入约束文件
<?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
-->
<configuration>
    <!--
        配置数据库的环境信息:
        environments:表示里面可以配置多个环境,default使用哪个环境
            environment:每一个environment表示一种环境
        为什么要配置多个环境:因为我们有多个环境(开发环境、生产环境(真正项目之后运行的环境)、测试环境)
    -->
    <environments default="dev">
        <!--开发环境-->
        <environment id="dev">
            <!--事务管理者,type为JDBC表示使用JDBC的事务管理者(了解)-->
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource表示数据源,1.POOLED表示使用自带的连接池,2.UNPOOLED表示不使用连接池,3.JNDI表示使用JNDI连接池-->
            <dataSource type="POOLED">
                <!--连接池的配置信息-->
                <property name="username" value="root"/>
                <property name="password" value="asd"/>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf8"/>
<!—两个斜杠后面localhost:3306/但是三个斜杠就可省略了这个,直接写数据库名。-->
            </dataSource>
        </environment>
        <!--生产环境-->
        <environment id="pro">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
        <!--测试环境-->
        <environment id="test">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>

    <!--
        指定加载哪些映射配置文件:mappers
            mapper标签:每一个mapper标签负责加载一个配置文件;resource指定要加载的映射配置文件的路径
    -->
    <mappers>
        <mapper resource="com/gavin/dao/UserDao.xml"></mapper>//注意是斜线!
    </mappers>
</configuration>
6. java代码测试

测试包里面绿色java包里面,建个和上面一样的包结构,com.gavin里面一个测试类名即可。
然后运行,点方法旁边的绿色箭头运行即可。

package com.gavin;

import com.gavin.dao.UserDao;
import com.gavin.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.apache.ibatis.io.Resources;

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


public class TestMybatis {
    
    public void testFindAll() throws IOException {
        //1.让mybatis框架去加载主配置文件
        //1.1 将主配置文件SqlMapConfig.xml转换成字节输入流
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //1.2创建一个SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        //1.3使用factoryBuilder对象加载字节输入流,创建 SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = factoryBuilder.build(is);
        //1.4使用sqlSessionFactory对象创建处SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();//使用了工厂模式

最终目标://2.使用sqlSession对象创建出UserDao接口的代理对象
        UserDao userDao = sqlSession.getMapper(UserDao.class);//使用了动态代理

        //3.调用userDao代理对象的findAll()方法进行查询
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        //4.关闭资源
        sqlSession.close();
        is.close();
    }
}
看错误日志

出错时从第一行看,发现告诉了错误位置,和提示可能,都在最前面几行。
就开头这些###的内容都是提示,看这个找就行。
在这里插入图片描述

Mapper动态代理方式规范

入门案例回顾

Mapper.xml(映射文件)
  1. 映射配置文件存储的路径在resources里面,要和对应的Dao接口的路径保持一致
  2. 映射配置文件的文件名必须和Dao接口名保持一致
  3. 一定要引入约束文件
  4. namespace属性的值和对应Dao接口的全限定名一致
  5. 每一个子标签,就对应Dao接口中的一个方法
    查询方法就对应select标签
    添加方法就对应insert标签
    删除方法就对应delete标签
    修改方法就对应update标签

标签的id就对应方法的名字

标签的parameterType就对应方法的参数类型

标签的resultType(只有select标签才有)就对应方法的返回值类型,如果返回值类型是List,那么resultType就是List的泛型类型

标签体中的内容就是要执行的sql语句

<?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.gavin.dao.UserDao"> 
    <select id="findAll" resultType="com.gavin.pojo.User">
        select * from t_user
    </select>
</mapper>
Mapper.java(dao接口)
public interface UserDao {

    /**
     * 执行一个查询所有用户的sql语句,并且将查询到的结果封装到List<User>
     * @return
     */
    public List<User> findAll();
}

规范

Mapper接口开发需要遵循一下规范:

  1. 存储路径建议和对应的Dao接口保持一致
  2. 文件名建议和对应的Dao接口的名字保持一致
  3. 配置文件的根标签的namespace属性必须和对应的Dao接口的全限定名保持一致
  4. 接口中的每一个方法,就对应映射配置文件中的一个标签
    a) 查询方法,对应select标签
    b) 添加方法,对应insert标签
    c) 删除方法,对应delete标签
    d) 修改方法,对应update标签
  5. 映射配置文件中的标签的id属性,就必须和对应的方法的方法名保持一致
  6. 映射配置文件中的标签的parameterType属性,就必须和对应的方法的参数类型(全限定名)保持一致
  7. 映射配置文件中的标签的resultType属性,就必须和对应的方法的返回值类型(全限定名)保持一致,但是如果返回值是list则和其泛型保持一致

3、核心配置文件详解

核心配置文件的顺序

标签顺序如图
在这里插入图片描述

properties(引入外部的properties文件)

.properties文件同样放在在根目录下。
jdbc.properties配置文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.user=root
jdbc.password=asd

SqlMapConfig.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标签引入外部的properties文件
        目的:也是为了配置文件解耦,专门的信息就放到专门的配置文件中
    -->
    <properties resource="jdbc.properties"></properties>

      <environments default="dev">
        <!--开发环境-->
        <environment id="dev">
            <!--事务管理者,type为JDBC表示使用JDBC的事务管理者(了解)-->
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource表示数据源,1.POOLED表示使用自带的连接池,2.UNPOOLED表示不使用连接池,3.JNDI表示使用JNDI连接池-->
            <dataSource type="POOLED">
                <!--连接池的配置信息-->
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
            </dataSource>
        </environment>
            </environments>
……
 </configuration>

typeAliases(类型别名)

定义单个别名

• 核心配置文件

<typeAliases>
    <typeAlias type="com.gavin.pojo.User"  alias="user"></typeAlias>
还可以写很多个。<typeAlias>,一个<typeAlias>代表一个。
</typeAliases>

• 修改UserDao.xml:

<select id="findAll" resultType="user">//直接用自定义的别名
    select * from t_user
</select>
批量定义别名

因为有的时候pojo里面的类过多,一个一个写很麻烦。
因为所有要配置别名的类都写在一个包当中,所以我们可以使用包扫描去配置别名,通过package标签扫描整个包,就能给该包中所有类都配置别名,别名就是该类的类名,不区分大小写。

使用package定义的别名:就是pojo的类名,不区分大小写。

<typeAliases>
    <package name="com.gavin.pojo"/>//这里没有类名
</typeAliases>

修改UserDao.xml

<select id="findAll" resultType="User">//直接类名就可以
    select * from t_user
</select>

Mapper

方式一:引入映射文件路径
<mappers>
    <mapper resource="com/gavin/dao/UserDao.xml"></mapper>
</mappers>

在这里插入图片描述

方式二:扫描接口

• 配置单个接口

<mappers>
    <mapper resource="com.gavin.dao.UserDao "></mapper>
</mappers>

• 批量配置
当配置文件太多了,还有别的很多dao,还挨个配置很麻烦。
在这里插入图片描述

<mappers>
    <package name="com.gavin.dao"/>
</mappers>
注意!!!!

核心配置文件的顺序不能错
在这里插入图片描述

相关推荐

  1. MyBatis基础

    2024-07-12 10:08:01       28 阅读
  2. Mysql mybatis 语法示例

    2024-07-12 10:08:01       64 阅读
  3. mybatis中的xml语法

    2024-07-12 10:08:01       65 阅读
  4. Mybatis增删改查基础

    2024-07-12 10:08:01       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 10:08:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 10:08:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 10:08:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 10:08:01       68 阅读

热门阅读

  1. 递归生成对象

    2024-07-12 10:08:01       24 阅读
  2. Mybatis SQL注解使用场景

    2024-07-12 10:08:01       16 阅读
  3. python 缩放照片

    2024-07-12 10:08:01       24 阅读
  4. 谈一谈徒劳的坐地收益的副业问题

    2024-07-12 10:08:01       26 阅读
  5. Milvus Cloud向量数据库:优势解析与深度应用探索

    2024-07-12 10:08:01       21 阅读
  6. MyBatis与数据库交互的四种方法详解

    2024-07-12 10:08:01       18 阅读