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

MyBatis 入门Demo

程序员文章站 2022-06-05 17:34:05
新建数据库my_db,新建表student_tb id为主键,不自动递增 下载MyBatis https://github.com/mybatis/mybatis-3/releases 解压。 新建Java项目,什么都不用勾选(如果要在IDEA中操作数据库,可勾选SQL Support)。 勾选后, ......

 

新建数据库my_db,新建表student_tb

MyBatis  入门Demo

 id为主键,不自动递增

 

 


 

 

下载mybatis

MyBatis  入门Demo

解压。

 

 


 

 

新建java项目,什么都不用勾选(如果要在idea中操作数据库,可勾选sql support)。

 MyBatis  入门Demo

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

MyBatis  入门Demo

 

 


 

 

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

MyBatis  入门Demo

mybatis.jar是必需的。

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

pdf是mybatis的文档。

 

 


 

设置mybatis的日志

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

# global logging configuration 
log4j.rootlogger=error, stdout,a
# 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.layout.conversionpattern=%5p [%t] - %m%n
# file output...
log4j.appender.a = org.apache.log4j.dailyrollingfileappender
log4j.appender.a.file = d:/log.txt
log4j.appender.a.append = true
log4j.appender.a.threshold = error
log4j.appender.a.layout = org.apache.log4j.patternlayout
log4j.appender.a.layout.conversionpattern = %-d{yyyy-mm-dd hh:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.a.encoding=utf-8

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

 

 


 

 

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

package com.chy.pojo;

public class student {
    private int id;
    private string name;
    private int age;
    private int score;

    public int getid() {
        return id;
    }

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

    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;
    }

    public int getscore() {
        return score;
    }

    public void setscore(int score) {
        this.score = score;
    }

    @override
    public string tostring() {
        return "student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
pojo(plain ordinary java object)简单的java对象,实际就是普通的javabean,有一些属性及其getter、setter方法,可以有一些简单方法,比如tostring(),但不能有处理业务逻辑的方法,有时可当做dto(data transform object)来使用。
我们把数据库实体对应的类都放在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="student">
        insert into student_tb(id,name,age,score)values (#{id},#{name},#{age},#{score})
    </insert>

    <select id="querybyid" parametertype="int" resulttype="student">
        select * from student_tb where id=#{id}
    </select>

    <update id="updatestudent" parametertype="student">
        update student_tb set name=#{name},age=#{age},score=#{score} where id=#{id}
    </update>

    <delete id="deletestudent" parametertype="int">
        delete from student_tb where id=#{id}
    </delete>
</mapper>

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

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

<mapper>的namespace常设置为此映射文件的路径。

 

通过id调用相应的sql语句,parametertype指定参数类型,resulttype指定要把结果集记录映射到哪种数据类型(只有<select>有这个属性)。

#{}相当于sql语句中的占位符?,{}中写对应实体类的成员变量,会自动把参数转换为指定的成员变量。

 

 


 

 

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

driver=com.mysql.cj.jdbc.driver
url=jdbc:mysql://localhost:3306/my_db?servertimezone=gmt
username=chy
password=abcd

 对应信息要换为自己的。

最好在文件名中注明是哪种数据库,如果公司要换数据库,比如从mysql换为oracle,好区分这个是哪个数据库的配置。

 

 

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>的子元素是有一定顺序的,顺序不对会报红。

 

 


  

 

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");
        //第一个参数对应映射文件中的id,通过id调用相应的sql语句,第二个参数是传给sql语句的
        sqlsession.insert("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);    

 

 


 

 

说明

(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,右键标识为资源根目录

MyBatis  入门Demo

注意是resource root,不是source root。

在里面放配置文件:

MyBatis  入门Demo

 

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

 

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

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