MyBatis

Mybatis基本使用

IDEA使用Maven配置Mybatis

配置数据库

首先下载MySQL,我这里是最新版8.0.20

image 128

在Maven中根据你的Sql版本引入两个包,一个是MyBatis,一个是Sql驱动。注意:这两个包的版本一定要与你的mybatis和sql相同

   <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.20</version>
    </dependency>

IDEA已经集成了数据库管理系统,我们可以不使用Navicat Premium 了。点击右侧数据库,选择MySQL。

image 132

添加Maven导入的Driver包,找不到的话可以在Maven中右键复制路径。

image 135

点击Driver上面的Project Data Sources中新建的mysql。输入账号密码,点击Test Connection。配置成功的话会有√。

image 136

新建一个模式,我命名为schema_person。

image 137

再右键这个schema,建立一个表。再右键这个表建立三列数据

image 138

全部完成后结构是这样的

image 139

插入一条数据

双击表名,点击加号添加一条数据

image 143

配置Mybatis

新建一个maven项目,添加代码模板,模板中的代码复制后别忘更改Extension拓展名为xml,点击Apply。

image 129

复制此段代码模板,下面详细讲解

<?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>
<typeAliases>
<package name="${packagename}"/>  <!--在包中寻找所需的类,Mapper中不用写全称-->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--  mysql的驱动,这里注意JDK1.6以上使用cj版本的驱动-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- schema_person是模式名,cj版本的驱动必须提前设置好时区-->
<property name="url" value="jdbc:mysql://localhost:3306/${schema}?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--   在mapper文件中寻找语句映射-->
<mappers>
<mapper resource="${Mapper}"/>
</mappers>
</configuration>
image 131
参数讲解:
  1. environment:你可以创建多个环境,比如测试环境,运行环境。通过defauft或者Reader切换。
  2. dataSource type:
    1. POOLED:连接池方式,每次从链接池中取出链接执行。不需要打开和关闭数据库。
    2. UNPOOLED:JDBC方式,不推荐。每次需要重新打开数据库,很消耗性能。
    3. JNDI:TomCat自带连接池
  3. transactionManager:事务提交方式
    1. JDBC:JDBC方式手动提交事务
    2. MANAGED: 事务由其它组件去托管(spring,jboss)。默认使用完成连接后自动关闭链接。

在resource文件夹中建立名为conf的Mybatis配置文件,为什么一定要放在resources文件夹中呢?

IDEA的maven项目中,默认源代码目录下(src/main/java目录)的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。maven工具默认在编译的时候,会将resources文件夹中的资源文件一块打包进classes目录中。

image 130

在resources中建立xxxMapper.xml映射文件,这里我们写入一条查询语句。

注意由于是基本类型。传入参数括号中的占位符可以不是id。

image 140

在conf中映射文件定位,这句就是告诉sql执行的语句在哪。

image 141

测试SQL

新建一个Person类,生成简单java类。

public class Person {
    int id;
    String name;
    int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

再新建一个名为TestMybatis类

image 142
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.Reader;

public class TestMybatis {

    public static void main(String[] args) throws IOException {
        //加载mybatis配置文件
       Reader reader= Resources.getResourceAsReader("conf.xml");//得到配置文件
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession(); //得到session
        String statement="com.cztcode.mybatis.PersonMapper.queryPersonById"; //执行的语句
        Person person=sqlSession.selectOne(statement,1); //第一个参数
        System.out.println(person.toString());
        sqlSession.close();
    }
}

输出结果

image 144

这样实现的方式是基础方式,除此之外CRUD的代码为

和上面的方式是类似的,这里不再详述了。

<?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.cztcode.mybatis.PersonMapper">
    <select id="queryPersonById" parameterType="int" resultType="Person">
    select * from Person where id = #{id}
  </select>
    <insert id="addPerson" parameterType="Person">
    insert into person(id,name,age) values (#{id},#{name},#{age})
    </insert>
    <update id="updatePerson" parameterType="Person">
        update person set id= #{id}, name=#{name},age=#{age} where id=#{id}
    </update>
    <delete id="deletePersonById" parameterType="int">
        delete from person where id=#{id}
    </delete>
    <select id="queryAllPerson" parameterType="int" resultType="Person">
        select * from Person
    </select>
</mapper>

        String statement01="queryPersonById"; //执行的语句
        Person person01=sqlSession.selectOne(statement01,1); //第一个参数
        System.out.println(person01.toString());

        String statement02="com.cztcode.mybatis.PersonMapper.queryAllPerson";
        List<Person> person02=  sqlSession.selectList(statement02);
        for(Person it:person02){
            System.out.println(it.toString());
        }

        Person person =new Person(3,"Shi",20);
        String statement03 ="addPerson";
        int count=sqlSession.insert(statement03,person);
        sqlSession.commit();
        System.out.println(count);

        String statement04="deletePersonById";
        sqlSession.delete(statement04,3);
        sqlSession.commit();

            Person person =new Person(2,"Tao",23);
            String statement05= "updatePerson";
            sqlSession.update(statement05,person);
            sqlSession.commit();

发表评论