使用mybatis操作数库

现在使用mybatis对学生表进行操作,步骤如下:
第一,创建mybatisdb数据库,并创建Student学生表

maven 引入xboxcontroller库 maven引入mysql_mybatis


第二步,在pom.xml文件中加入相应的依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>per.pcqstart</groupId>
  <artifactId>mybatisDemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
<!--    添加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.35</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
<!--
      idea默认扫描resources下的xml文件,
          因此需要添加该resources组件来扫描项目所有xml文件
-->
      <resources>
      <resource>
<!--所有文件夹用**/表示,例如java下的所有文件夹**/;所有的具体文件用*.表示。例如*.xml-->
          <directory>src/main/java</directory><!--所在的目录-->
          <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
              <include>**/*.properties</include>
              <include>**/*.xml</include>
          </includes>
          <filtering>false</filtering>
      </resource>
  </resources>
  </build>
</project>

第三步,使用java在idea中创建对应的Student类

public class Student{
    private Integer id;
    private String name;
    private Integer age;
    private Integer grade;
    省略getter,setter,toString方法
}

第四步,创建对应的StudentDao和对应的StudentDao.xml文件
①创建StudentDao.java

public interface StudentDao {
    public List<Student> selectStudents();
}

②创建StudentDao.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="per.dao.StudentDao">
    <select id="selectStudents" resultType="per.domain.Student">
    select id,name,age,grade from Student order by id
  </select>
<!--
        sql映射文件(sql mapper):写sql语句的,mybatis执行
        1.①namespace:命名空间,唯一值,可以是自定义的字符串。
                 但是规范要求使用dao接口的全限定名称。
          ②id:要执行sql语句的唯一标识,mybatis会根据这个id来执行相应sql语句。
               可以自定义,但要求使用接口中的方法名称;
          ③resultType:表示查询语句返回的结果类型;是执行sql语句后得到的ResultSet,
          遍历这个ResultSet得到的java对象类型。规范要求编写被查询类的全限定名称;
-->
<!--
    studentDao.xml是sql映射文件:写sql语句的,mybatis会执行这些sql
    1.指定约束文件
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

     mybatis-3-mapper.dtd:约束文件的名称,扩展名是dtd的。
    2.约束文件作用:限制,检查在当前文件中出现的标签,属性必须符合mybatis的要求。
    3.mapper:当前文件的根标签。

    4.在当前文件中,可以使用特定的标签,表示数据库的特定操作;
        <select>:表示执行查询的操作
        <update>:表示更新数据库的操作
        <insert>:表示插入的操作
        <delete>:表示删除的操作
-->
</mapper>

第五步,配置mybatis.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>
    <settings>
<!--        在mybatis的主配置文件中加入STDOUT_LOGGING日志配置,可以在控制台
            输出执行的sql语句和参数-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
<!--    环境配置:数据库的连接信息-->
<!--
        environments:可以在该标签内部配置多个环境变量
                    default的值:用到的配置环境,与用到的环境变量<environment id="development">一制;
                       例如使用<environment id="development">这个环境变量,则default="development"
-->
    <environments default="development">
<!--
        environment:一个数据库的环境配置
            id:唯一值,自定义,表示环境的名称
-->
        <environment id="development">
<!--
                transactionManager:mybatis的事务类型
                        type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)
-->
            <transactionManager type="JDBC"/>
<!--
            dataSource:连接池的数据源
                type:表示数据源的类型,POOLED表示使用连接池
 -->
            <dataSource type="POOLED">
<!--                数据库的驱动类名-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                连接数据库的url地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
<!--                访问数据库的用户名-->
                <property name="username" value="root"/>
<!--                访问数据库用户的密码-->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
<!--    sql mapper(sql映射文件的位置,
例如:studentDao.xml编译后的在target/classes后面的地址per/dao/StudentDao.xml)-->
    <mappers>
<!--        有多少个sql映射文件,就需要多少个<mapper>-->
        <mapper resource="per/dao/StudentDao.xml"/>
    </mappers>
</configuration>
<!--
   1.此处为mybatis的主配置文件,名称可以自定义:主要定义了①数据库的配置信息 ②sql映射文件的位置;
   2.①<?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>:配置文件的根标签;
     ④<mappers>:多sql映射文件的位置(sql.xml);
-->

最后一步,创建主函数并读取student表的数据

package per;

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 per.domain.Student;

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


/**maven项目的主入口(或者main函数)所在的类要在其他类的上一层**/
public class ReadData {
    public static void main(String[] args) throws IOException {
        //访问mybatis读取student数据
        //1.定义mybatis主配置文件的名称,从类路径的根开始(即target/classes之后开始)
        String config="mybatis.xml";
        //2.读取config的主配置文件的内容,通过Resource.getResourceAsStream(),获取InputStream输入流对象
        InputStream resourceAsStream = Resources.getResourceAsStream(config);
        //3.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(resourceAsStream);
        //5.【重要】获取SqlSession对象,从SqlSessionFactory中获取SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //6.【重要】指定要执行的sql语句的标识。sql映射文件中的namespace+"."+标签的id值
        String sqlId = "per.dao.StudentDao.selectStudents";
        //7.执行sql语句,通过sqlId找到相应的语句
        List<Student> studentLists = sqlSession.selectList(sqlId);
        //8.输出结果
        /**
         * lamba表达式
         *studentLists.forEach(stu -> System.out.println(stu));
         *
         */
        //增强for
        for(Student stu : studentLists){
            System.out.println("查询的对象"+stu);
        }
        //9.关闭SqlSession对象
        sqlSession.close();
        /**
         * 关键对象:
         * ①通过Resource的getResourceAsStream()方法获取InputStream对象
         * ②通过new SqlSessionFactoryBuilder创建SqlSessionFactoryBuilder builder对象
         * ③通过builder对象的build()方法获取SqlSessionFactory factory对象
         * ④通过factory对象的openSession()方法获取SqlSession对象
         * ⑤指定sql语句的标识String sqlId;
         * ⑥通过SqlSession对象的selectList()方法多去List<Object>集合
         * ⑦输出
         *
         */
    }
}

输出结果

maven 引入xboxcontroller库 maven引入mysql_java_02