MyBatis 入门Demo

 

新建数据库my_db,新建表student_tb

 id为主键,不自动递增。

不必插入数据。

 

 


 

 

下载MyBatis

https://github.com/mybatis/mybatis-3/releases

解压。

 

 


 

 

新建Java项目,什么都不用勾选(如果要在IDEA中操作数据库,可勾选SQL Support)。

 

勾选后,IDEA右侧会有一个Database的工具,可在IDEA中直接操作数据库。

 

 


 

 

导入mybatis所有的jar包、数据库驱动

mybatis.jar是必需的。

lib是mybatis依赖的第三方jar包,根据需要选择,嫌麻烦或者小白,可全部导入lib中的jar。

pdf是mybatis的文档。

 

 


 

设置MyBatis的日志

在src下新建文件 log4j.properties ,内容如下:

# Global logging configuration 
log4j.rootLogger=DEBUG, stdout,D


# MyBatis logging configuration... 
log4j.logger.org.mybatis.example.BlogMapper=TRACE 


# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
# log4j.appender.stdout.Threshold = ERROR
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n


# File output...
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/log.txt
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.D.encoding=UTF-8

可到 mybatis.pdf   8.1.1.2小节复制来修改。

这个配置会在控制台输出DEBUG级的日志,我们可以看到程序的执行过程,如果觉得打印的东西太多看着烦,可以把红色部分的#去掉,这样只打印错误信息。

 

 log4j的配置可参考: 

 https://www.cnblogs.com/chy18883701161/p/12117192.html

 

 

 


 

 

 

src下新建包com.chy.pojo,包下新建POJO类Student:

package com.chy.pojo;

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private Integer score;

    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 Integer getAge() {
        return age;
    }

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

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
 
POJO(Plain Ordinary Java Object)简单的Java对象,属性及其getter、setter方法,开发时t可以加oString()便于调试。
PO,Persistent Object,持久层对象,对应数据表,即数据表的映射,po也算是pojo。
pojo、po的包名也常使用model、domain。
 
VO ,value object,值对象,一般是在po、pojo的基础上进行扩展,封装数据进行传输或者接受前台传递的数据
DTO(Data Transform Object)  数据传输对象,可以把po、pojo、vo作为dto。
 
pojo类的基本类型的成员变量,尽量使用包装类型。

 

 


 

 

src下新建包com.chy.mapper,mapper下创建实体-数据表的映射文件  StudentMapper.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.chy.mapper.StudentMapper">
    <insert id="insertStudent" parameterType="com.chy.pojo.Student">
        INSERT INTO student_tb(id,name,age,score)VALUES (#{id},#{name},#{age},#{score})
    </insert>

    <select id="queryById" parameterType="Integer" resultType="com.chy.pojo.Student">
        SELECT * FROM student_tb WHERE id=#{id}
    </select>

    <update id="updateStudent" parameterType="com.chy.pojo.Student">
        UPDATE student_tb SET name=#{name},age=#{age},score=#{score} WHERE id=#{id}
    </update>

    <delete id="deleteStudent" parameterType="Integer">
        DELETE FROM student_tb WHERE id=#{id}
    </delete>
</mapper>

 可以到mybatis.pdf  2.1.5小节复制来修改。

我们把映射文件都放在mapper包下,映射文件常以 实体类名+Mapper 命名。

<mapper>的namespace常设置为  包名.映射文件名

 

通过namepace和id调用相应的sql语句,这两者组合起来要唯一。

parameterType指定参数类型,resultType指定要把查询结果映射到哪种数据类型。如果数据类型是pojo类,尽量写全限定类名,这样Ctrl+B可以转到定义处。

 

映射文件的写法可参考:

 https://www.cnblogs.com/chy18883701161/p/12122079.html

 

 

 


 

 

 

src下新建数据库配置文件mysql.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
username=chy
password=abcd

 对应信息要换为自己的。

 

 

src下新建mybatis的核心(全局)配置文件mybatis-config.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>
    <!--指定数据库配置文件的位置-->
    <properties resource="mysql.properties"></properties>

    <!--指定日志实现使用的是log4j-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--指定实体类-->
    <typeAliases>
        <typeAlias type="com.chy.pojo.Student" alias="Student"/>
    </typeAliases>
    
    <!--指定数据库配置文件中的变量名-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射文件的位置-->
    <mappers>
        <mapper resource="com/chy/mapper/StudentMapper.xml"/>
    </mappers>
    <!-- Continue going here -->

</configuration>

可到mybatis.pdf  2.1.2小节复制来改。

 <configuration>的子元素是有一定顺序的,顺序不对会报红。

 

mybatis全局配置文件的写法可参考:

https://www.cnblogs.com/chy18883701161/p/12120023.html

 

 


  

 

src下新建包com.chy.test,包下新建测试类Test:

package com.chy.test;

import com.chy.pojo.Student;
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 Test {
    public static void main(String[] args) throws IOException {
        //加载mybatis的全局配置文件
        String resources="mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resources);
        
        //根据配置文件构建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //通过SqlSessionFactory创建SqlSession
        SqlSession sqlSession=sqlSessionFactory.openSession();

        //
        Student student = new Student();
        student.setId(1);
        student.setName("chy");
        //第一个参数对应映射文件中的namespace+id,通过namespace+id调用相应的sql语句,第二个参数是传给sql语句的参数
        sqlSession.insert("com.chy.mapper.StudentMapper.insertStudent", student);
        
        //修改数据库(增、删、改)后,需要commit()提交给数据库,才会同步本次会话做的修改。只有查询的,可以不commit()。
        sqlSession.commit();
        //关闭会话
        sqlSession.close();
    }
}

 

     //
        Student student = new Student();
        student.setId(1);
        student.setName("chenghongyong");
        sqlSession.update("updateStudent", student);

 

        //
        Student student=sqlSession.selectOne("queryById", 1);
        System.out.println(student);    

如果本次session期间,只有查询,可以不用commit()。

 

        //
        sqlSession.delete("deleteStudent", 1);    

 

 可参考:https://www.cnblogs.com/chy18883701161/p/12150758.html

 

 

 


 

 

说明

(1)版本声明部分,最好不要复制其他人的,如果你和ta用的mybatis库版本不同,会出错。最好到mybatis.pdf中去复制。

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

 

(2)配置文件的文件名问题

log4j.properties这个文件名是约定的,不能自己取。

映射文件、数据库配置文件需要在mybatis全局配置文件中指定,它们的文件名可以自己取。

mybatis全局配置文件要在程序中指定,文件名可以自己取。

 

 

(3)配置文件的位置问题

配置文件必须放在资源根目录下。常见的做法有2种:

  • 在项目的根目录下新建文件夹resource,右键标识为资源根目录

注意是Resource Root,不是Source Root。

在里面放配置文件:

 

  • 也可以像demo中一样放置在src下,因为src就是默认的资源根目录。

 

mapper中的映射文件放哪儿都行,只要路径配置对得上就ok。

log4j.properties必须直接放在资源根目录下(不能放在子文件夹里)。

posted @ 2019-12-29 22:07  chy_18883701161  阅读(664)  评论(0编辑  收藏  举报