自己看B站视频学习的笔记,看着UP自己手敲的,侵删

目录

自己看B站视频学习的笔记,看着UP自己手敲的,侵删

一·简介

二·第一个Mybatis程序

一 新建数据库

二搭建环境

三.CRUD

四·配置解析

1.核心配置文件

2.环境配置(environments)

3.属性(properties)

4.类型别名(typeAliases)

5.设置(settings)

6.其他配置


 


一·简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二·第一个Mybatis程序

一 新建数据库

CREATE DATABASE mybatis;

USE mybatis;

CREATE TABLE user(

id INT(20) NOT NULL PRIMARY KEY,

name VARCHAR(30) DEFAULT NULL,

pwd VARCHAR(30) DEFAULT NULL

)ENGINE = INNODB DEFAULT CHARSET=utf8;

 

INSERT INTO user(id,name,pwd) VALUES

(1,'李珍','000'),

(2,'王德发','123')

 

二搭建环境

1 新建普通的maven项目

2 删除src目录

3 导入依赖

 <!--父工程-->
    <groupId>org.example</groupId>
    <artifactId>Mybatis_Day01</artifactId>
    <version>1.0-SNAPSHOT</version>
​
    <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <!--https://downloads.mysql.com/archives/c-j/ -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--mybatis-->
        <!--https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
​
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

4 创建一个模块

4·1编写mybatis核心文件 (数据库链接)

<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库配置  在url的后续信息配置中“=”左右不要加空格-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

4·2编写mybatis配置文件

public class MybatisUtils {
​
    private static SqlSessionFactory sqlSessionFactory;
​
    static {
        try {
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
​
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

4·3编写代码

·实体类

public class User {
    private int id;
    private String name;
    private String pwd;
​
    public User() {
    }
​
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getPwd() {
        return pwd;
    }
​
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
​
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

·Dao接口

resultType: 返回一个结果(用的多) resultMap: 返回一个集合

public interface UserDao {
    List<User> getUserlist();
}

·接口实现类(由原来的UserDaolmpl装变为一个Mapper配置文件)

<?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">
<!--绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.li.dao.UserDao">
    <!--select 查询-->
    <select id="getUserList" resultType="com.li.pojo.User">
    select * from mybatis.user
  </select>
</mapper>

·4.4测试(junit)

注意:Could not find resource mybatis.config.xml

maven由于约定大于配置,配置文件无法被导出或生效。解决方案 在pom.xml下加入一下代码

<!--在build中配置resources,防止资源导出失败   手动导出资源到resources-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

常见问题:

1.配置文件没有 注册

2.绑定接口错误

3.方法名不对

4.返回类型不对

5.Maven导出资源问题

三.CRUD

1.namespace

中的报名要和Dao/mapper接口名一致

2.select 选择查询

id:就是对应的namespace中的方法名

resultType:Sql语句执行的返回值!parameterType:参数类型!

1.编写接口

//根据id查用户
User getUserById(int id);

2.编写对应的mapper中的sql语句

<!--select 根据id查询-->
<select id="getUserById" parameterType="int" resultType="com.li.pojo.User">
        select * from mybatis.user where id = #{id}
</select>

3.测试

@Test
public void getUserById(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
​
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
​
    User user = mapper.getUserById(1);
    System.out.println(user);
​
    sqlSession.close();
}

3.Insert

<!--insert一个用户(通过对象) 其中对象中的属性可以直接取出来-->
<insert id="addUser" parameterType="com.li.pojo.User">
    insert into mybatis.user (id, name ,pwd) value (#{id}, #{name}, #{pwd});
</insert>

4.update

<!--update一个用户(通过对象) 其中对象中的属性可以直接取出来-->
<update id="updateUser" parameterType="com.li.pojo.User">
    update mybatis.user set name = #{name}, pwd = #{pwd}  where id = #{id};
</update>

5.Delete

<!--delete一个用户-->
<delete id="deleteUser" parameterType="com.li.pojo.User">
    delete from mybatis.user where id = #{id}
</delete>

 

·增删改查需要提交事务! sqlSession.commit();

 

四·配置解析

1.核心配置文件

  • mybatis-config.xml

  • MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

    configuration(配置)
    properties(属性)
    settings(设置)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境配置)
    environment(环境变量)
    transactionManager(事务管理器)
    dataSource(数据源)
    databaseIdProvider(数据库厂商标识)
    mappers(映射器)

2.环境配置(environments)

mybatis可以配置成多种环境

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

学会使用配置多套运行环境

Mybatis默认的事务管理器是JDBC, 连接池:POOLED

 

3.属性(properties)

可以通过properties属性来实现引用配置文件

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置

编写一个配置文件

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123

在核心配置文件中引入

<!--引入外部文件-->
<properties resource="db.properties">
    <property name="username" value="root"/>
    <property name="password" value="123"/>
</properties>
  • 可以直接引入外部文件

  • 可以在其中增加一些属性配置

  • 如果两个文件有同一字段,优先使用外部配置文件

    个人犯的错误:在配置完properties文件后测试发现并不能导出数据库信息,查询后发现在db.properties文件中的url地址是不需要加 “” 及其 amp字符,且每个属性应该用 & 连接,而不应该用

    需要注意的就是&amp转义字符的使用

    xml文件中url的设置

    url="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"

 

4.类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写

<!--给实体类起别名-->
<typeAliases>
    <typeAlias type="com.li.pojo.User" alias="User"/>
</typeAliases>

也可以指定一个包名,MyBatis会在包名下搜索需要的JavaBean:

扫描实体类的包,默认别名就为这个类的 类名,首字母小写

<!--给实体类起别名-->
<typeAliases>
    <typeAlias type="com.li.pojo"/>
</typeAliases>

实体类比较少时推荐使用第一种方式;

实体类比较多时使用第二种方式

第一种可以DIY别名,第二种不行,如要强行给需在实体上增加注解

@Alias("user")
public class User{}

 

5.设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为

 

 

 

6.其他配置