欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis学习笔记,框架搭建 一

程序员文章站 2022-07-12 22:41:51
...

首先先展示一下搭建环境所需要的jar包

<?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>com.meng</groupId>
    <artifactId>TestMybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

我们有mybatis包、mysql连接驱动包、log4j包、junit测试工具包。
下图是我工程的基本目录结构。。。。
Mybatis学习笔记,框架搭建 一
下面是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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisplus"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="sql/studentMapper.xml"/>
    </mappers>
</configuration>

上面的配置文件我们设置了连接mysql数据库所需要的最基本的连接参数,然后在最下面我们还指定了mapper配置文件,这种配置文件里面存放很多的sql语句。


下面的语句我们就展示的是mybatis的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">
<mapper namespace="com.test.studentMapper">
    <select id="selectStudent" resultType="com.test.Student">
       select * from student where sid = #{id}
  </select>
</mapper>

下面是我们的pojo类

package com.test;

public class Student {
    private int sid;
    private String userName;
    private String age;
    private String userAddress;
    private String sex;
    private String version;

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAge() {
        return age;
    }

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

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", userName='" + userName + '\'' +
                ", age='" + age + '\'' +
                ", userAddress='" + userAddress + '\'' +
                ", sex='" + sex + '\'' +
                ", version='" + version + '\'' +
                '}';
    }

    public Student() {
    }

    public Student(int sid, String userName, String age, String userAddress, String sex, String version) {
        this.sid = sid;
        this.userName = userName;
        this.age = age;
        this.userAddress = userAddress;
        this.sex = sex;
        this.version = version;
    }
}

log4j日志配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration  debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/' >

    <!-- ========================== 自定义输出格式说明================================ -->
    <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
    <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数  -->
    <!-- %c 输出所属的类目,通常就是所在类的全名 -->
    <!-- %t 输出产生该日志事件的线程名 -->
    <!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
    <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921  -->
    <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlo4.main(TestLog4.java:10)  -->
    <!-- ========================================================================== -->

    <!-- ========================== 输出方式说明================================ -->
    <!-- Log4j提供的appender有以下几种:  -->
    <!-- org.apache.log4j.ConsoleAppender(控制台),  -->
    <!-- org.apache.log4j.FileAppender(文件),  -->
    <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
    <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->
    <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->
    <!-- ========================================================================== -->

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <!-- <param name="Target" value="System.out"/> -->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c  Method: %l ]%n%p:%m%n"/>
        </layout>
        <!--  <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="DEBUG"/>
        </filter> -->
    </appender>

    <root>
        <priority value="debug"/>
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="log4jDebug" />
        <appender-ref ref="log4jInfo" />
        <appender-ref ref="log4jWarn" />
        <appender-ref ref="log4jError" />
        <!-- <appender-ref ref="MAIL" /> -->
    </root>
</log4j:configuration>

下面就是我们的测试类了。

@Test
    public void test01() throws Exception{
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        Student student =  sqlSession.selectOne("com.test.studentMapper.selectStudent",1);
        System.out.println(student);
        sqlSession.close();
        inputStream.close();
    }

运行成功没有报错的话说明mybatis框架的最简单是使用我们已经完成了。


下面我们写一下接口式编程:

package com.test.mapper;

import com.test.Student;

public interface StudentMapper {


    public Student findStudentAll(Integer sid);
}

首先我们定义一个接口。

<?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">
<!-- 其中需要注意的是namespace一定要与mapper接口的类的全路径对应,否则是不行的 -->        
<mapper namespace="com.test.mapper.StudentMapper">
	<!-- id要与接口的方法名称一致,返回值要与接口定义的返回值一致 -->
    <select id="findStudentAll" resultType="com.test.Student">
        SELECT * from student where sid = #{sid}
    </select>
</mapper>

然后我们定义了一个mapper配置文件,其中需要注意的是一定要与mapper接口的类的全路径对应,id要与接口的方法名称一致,返回值要与接口定义的返回值一致。

	@Test
    public void test02() throws Exception{
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        Student stu = studentMapper.findStudentAll(1);
        System.out.println(stu);
        sqlSession.close();
        inputStream.close();
    }

上面的代码是一个测试类,其中我们用接口的方式就是用getMapper获取接口,然后调用接口的方法,就可以实现想要的操作。这里使用了动态代理的方式。