MyBatis学习总结(一)

有关MyBatis起步

一个可以基本实现运行的工程的目录结构如下:

需要依赖数据库jar包和mybatisjar包:

conf.xml文件

conf.xml可以简化JDBC操作,实现数据的持久化。其配置数据库信息和需要加载的映射文件。这个文件完成的工作是访问数据库、创建数据库操作语句等等。本来这些东西在JDBC当中要写很多遍,但是每次写的无非就那几句,所以这个conf不仅是必要的,也是充分的。

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/person?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="shopkeeper\mapper\personMapper.xml"/>
    </mappers>
</configuration>

conf文件规定了:

一、数据库信息

MyBatis运行时的数据库环境。通过environments标签即其下属的environment标签可以声明可用的数据库环境,通过environments的default属性来指定运行时默认的数据库环境。

事务的提交方式和数据源类型。每一个environment都有一个transactionManager标签,其Type属性规定了事务提交方式。可取值有,JDBC :利用JDBC方式处理事务(commit rollback close);MANAGED:将事务交由其他组件去托管(spring, jboss)。environment的另一个标签是dataSource,其Type属性规定了数据源类型。可取值为,UNPOOLED:传统的JDBC模式(每次访问数据库,均需要打开、关闭等数据库操作,但是打开、关闭数据库是比较消耗性能的);POOLED:使用数据库连接池;JNDI:从tomcat中获取一个内置的数据库连接池(数据库连接池-数据源),默认会关闭连接。

dataSource下的标签声明了打开某个数据库的操作,从驱动到数据库位置到账户密码都和JDBC如出一辙。

conf.xml

<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/person?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>

JDBC

try
{
Class.forName(“com.mysql.cj.jdbc.Driver”);
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/STUDB?serverTimezone=UTC”, “root”, “password”);

conn.close();
}
catch(Exception e)
{
System.err.println(“异常”+e);
}

二、映射文件

conf.xml还规定了绑定的映射文件Mapper.xml,这样我们在读取conf.xml时还能连带着读取到Mapper.xml的路径,这样就可以访问它了。所以这个Mapper时什么东西,我将在下下个标题总结。

实体类

实体类将数据库的一张表映射成为一个对象,这样我们可以如同操作一个实体对象一般操作数据库的一张表。

public class Person {

private int age;
private String name;
private int id;

public Person() {
}

public Person(int age, String name, int id) {
this.age = age;
this.name = name;
this.id = id;
}

public int getAge() {
return age;
}

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

public String getName() {
return name;
}

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

public int getId() {
return id;
}

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

@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", id=" + id +
'}';
}
}

Mapper.xml

直截了当的来讲,Mapper就是写了MyBatis下操作数据库时的数据操作语句。

<mapper namespace="shopkeeper.mapper.personMapper">
    <!--parameterType :输入参数的类型
    resultType:查询返回结果值的类型,返回类型-->
    <select id="queryPersonById" resultType="shopkeeper.entity.Person" parameterType="int">
        select * from person where id=#{id}
    </select>
    
    <insert id="addPerson" parameterType="shopkeeper.entity.Person">
        insert into person (age,name,id) values (#{age},#{name},#{id})
    </insert>
    
    <update id="updatePerson" parameterType="shopkeeper.entity.Person">
        update person set age=#{age},name =#{name} where id=#{id}
    </update>

    <delete id="detelePersonById" parameterType="int">
        delete from person where id=#{id}
    </delete>

    <select id="queryAll" resultType="shopkeeper.entity.Person">
        select * from person
    </select>
</mapper>

因为conf.xml中可能会映射多个Mapper文件,所以需要能唯一标识每一个Mapper。mapper标签的namespace就是干的这件事情。

在mapper标签里面就可以写这些sql语句了,同样的,也需要唯一标识一个mapper的一条sql语句,其属性id就是干的这件事。

后续我们就会使用namespace+id来确定究竟使用哪条语句。

此外,每一条sql,parameterType是输入参数的类型,resultType是查询返回结果值的类型并且有以下约定:

输入参数parameterType 和输出参数resultType 在形式上都只能有一个;

如果输入/输出参数:是简单类型(8个基本类型+String) 的话,可以使用任何占位符# {xxxx};如果是对象类型,则必须是对象的属性#属性名;

输出参数: 如果返回值类型是一个对象(如Person) ,则无论返回一个还是多个,在resultType都写成一个。

Test类

在test类中将会真正使用Mybatis来访问数据库并进行操作,有两种操作方式,将在下一次总结中进行记录。

发表评论