Mybatis框架快速入门(二)

1.Mybatis在IDEA中的使用
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
</dependency>

2.实现步骤:

 第一步:添加mybatis和mysql驱动的依赖,然后点击右上角的maven刷新按钮,检查依赖是否添加进去

<!-- 添加mybatis依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>

    <!-- 添加mysql驱动依赖 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>

第二步:创建实体类,保存表中的一行数据

package com.bjpowernode.domain;

public class Province {
    private Integer id;
    private String name;
    private String jiancheng;
    private String shenghui;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getJiancheng() {
        return jiancheng;
    }

    public void setJiancheng(String jiancheng) {
        this.jiancheng = jiancheng;
    }

    public String getShenghui() {
        return shenghui;
    }

    public void setShenghui(String shenghui) {
        this.shenghui = shenghui;
    }

    @Override
    public String toString() {
        return "Province{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", jiancheng='" + jiancheng + '\'' +
                ", shenghui='" + shenghui + '\'' +
                '}';
    }
}

第三步:创建持久层的到接口,定义操作数据库的方法

package com.bjpowernode.dao;

import com.bjpowernode.domain.Province;

import java.util.List;

public interface ProvinceDao {
    /**
     * 查询Province表的所有数据
     * 1.返回值:是一个List的集合,集合中的元素是Province对象
     * 2.该方法对应的是SQL语句的执行,该语句要写在SQL映射文件里面
     */
    public List<Province> selectProvinces();
}

第四步:定义SqlMapper.xml文件:书写和接口方法中对应的SQL语句

  1.SqlMapper.xml文件配置说明

  

 

   2.SqlMapper.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.bjpowernode.dao.ProvinceDao">
    <select id="selectProvinces" resultType="com.bjpowernode.domain.Province">
        select id,name,shenghui,jiancheng from province order by id
    </select>
</mapper>

第五步:创建主配置文件:1)连接数据库 2)指定Mapper文件位置

<?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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--
        环境配置:数据库的连接信息
            environment:数据库的信息配置
            default:和某个environment的id值必须一致,告诉mybatis要使用哪个数据库
    -->
    <environments default="myDev">
        <environment id="myDev"> <!-- id:环境的名称,具有唯一性 -->
            <!--
                transactionManager:mybatis的事务类型
                type:表示使用jdbc中的Connection对象的commit,rollback做事务处理
            -->
            <transactionManager type="JDBC"/>

            <!--
                dataSource:表示数据源,用来连接数据库
                type:数据源的类型,POOLED:表示使用连接池
             -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/bjpowernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--
        mappers:sql映射文件的位置
        mapper:一个mapper标签指定一个文件的位置
            从类路径(target/classes)开始的路径信息
            注意:target/classes目录下要有ProvinceDao.xml文件存在
     -->
    <mappers>
        <mapper resource="com/bjpowernode/dao/ProvinceDao.xml"/>
    </mappers>
</configuration>

第六步:(测试)创建mybatis类,通过mybatis访问数据库

package com.bjpowernode;

import com.bjpowernode.domain.Province;
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 MyApp {
    public static void main(String[] args) throws IOException {
        // 访问mybatis读取province数据
        String config = "mybatis.xml";// 1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
        InputStream in = Resources.getResourceAsStream(config);// 2.读取这个config表示的文件
        // 3.创建SQLSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 4.创建SQLSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        // 5.获取SQLSession对象
        SqlSession sqlSession = factory.openSession();
        // 6.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值
        String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "selectProvinces";
        // 7.执行SQL语句,通过SQLID找到语句
        List<Province> provinceList = sqlSession.selectList(sqlId);
        // 8.输出结果
        provinceList.forEach(pro -> System.out.println(pro));
        // 9.关闭资源
        sqlSession.close();
    }
}

第七步:注意事项

  1.如果: Could not find resource mybatis.xml

  2.就把ProvinceDao.xml和mybatis.xml文件手动复制到target目录下的classes目录中。

总结:

 2.插入方法测试

第一步:接口中增加插入方法

package com.bjpowernode.dao;
import com.bjpowernode.domain.Province;
import java.util.List;
public interface ProvinceDao {
    /**
     * 插入方法
     * 1.参数:province,表示要添加到数据库的数据
     * 2.返回值:int,表示执行insert操作后,影响数据库的行数
     */
    public int insertProvince(Province province);
}

第二步:打开Mapper文件(ProvinceDao.xml)

<!-- 插入方法 -->
<insert id="insertProvinc">
    insert into province values(#{id},#{name},#{jiancheng},#{shenghui})
</insert>

第三步:测试类

public class TestMybatis {
    // 测试插入方法
    @Test
    public void testInsert() throws IOException {
        // 访问mybatis读取province数据
        String config = "mybatis.xml";// 1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
InputStream in = Resources.getResourceAsStream(config);// 2.读取这个config表示的文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 3.创建SQLSessionFactoryBuilder对象
SqlSessionFactory factory = builder.build(in); // 4.创建SQLSessionFactory对象
SqlSession sqlSession = factory.openSession(); // 5.获取SQLSession对象 String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "insertProvince"; // 6.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值 Province pro1 = new Province(10,"山东","鲁","济南"); // 7.执行SQL语句,通过SQLID找到语句 int num = sqlSession.insert(sqlId, pro1);
sqlSession.commit(); // 因为mybatis默认不提交事务,所以在insert、delete、update的时候,需要手动提交一下。 System.out.println("执行插入方法后的结果是:" + num); // 8.输出结果 sqlSession.close(); // 9.关闭资源 } }

第四步:配置日志
    1.写在<configuration>标签里面第一个标签位置
    2.在mybatis.xml文件加入日志配置,可以在控制台输出执行的SQL语句和参数。
    3.配置内容

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

 3.主要类的介绍

1.Resources:
    1.mybatis中的一个类,负责读取主配置文件。
    2.示例
        String config = "mybatis.xml";
            InputStream in = Resources.getResourceAsStream(config);
2.SqlSessionFactoryBuilder
    1.创建SqlSessionFactory对象
    2.示例
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
3.SqlSessionFactory
    1.重量级对象,在整个项目中有一个就够用了
    2.作用:获取SqlSession对象
    3.示例:
        SqlSession sqlSession = factory.openSession();
4.openSession()方法说明
    1.openSession():无参数,获取的是非自动提交事务的SqlSession对象
    2.openSession(boolean):openSession(true):获取的是自动提交事务的SqlSession对象

5.SqlSession对象
    1.它不是线程安全的,在执行sql语句之前,需要使用openSession()方法获取。
    2.执行sql语句之后,就要关闭这个对象,这样才能保证它的使用是线程安全的。

4.使用了工具类以后,下面是优化版的测试类

package com.bjpowernode;
import com.bjpowernode.domain.Province;
import com.bjpowernode.util.MyBatisUtils;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class TestMybatis2 {
    // 测试插入方法
    @Test
    public void testInsert() throws IOException {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        // 1.指定要执行的SQL语句标识。SQL映射文件中:namespace + "." + 标签的id值
        String sqlId = "com.bjpowernode.dao.ProvinceDao" + "." + "insertProvince";
        // 2.执行SQL语句,通过SQLID找到语句
        Province pro1 = new Province(11,"四川","川","成都");
        int num = sqlSession.insert(sqlId, pro1);
        // 3.输出结果
        System.out.println("执行插入方法后的结果是:" + num);
        // 4.关闭资源
        sqlSession.close();
    }
}
posted @ 2021-03-06 21:10  兵长砍猴  阅读(67)  评论(0)    收藏  举报