MyBatis入门学习

入门

1.创建maven项目(此处略去)

2.在pom.xml文件中导入mybatis依赖

 <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
 </dependency>

3.在resource目录下创建配置文件mybatis-config.xml

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 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>
    <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/xskc?serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--指定SQL映射文件-->
        <package name="com.zua.mapper"/>
    </mappers>
</configuration>

当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

自此,MyBatis环境搭建就完成了。

下面将在MyBatis环境下实现一个入门程序来演示MyBatis框架的使用,该程序要求实现根据id查询用户信息的操作。

1.数据准备

在数据库中创建user表,并在user表中插入两条数据,具体SQL语句如下:

create table user(
	id int primary key auto_increment,
	user_name varchar(20) not null,
	user_age int not null
);
insert into user(id,user_name,user_age) values(null,'张三',20),(null,'李四',18);

2.创建JavaBean实体类

package com.zua.pojo;

public class User {
    private Integer id;
    private String userName;
    private Integer userAge;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

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

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}

3.在resource目录下创建映射文件UserMapper.xml

该文件主要用于配置SQL语句和Java对象之间的映射,使SQL语句查询出来的数据能够被封装成Java对象。一个项目中可以有多个映射文件,每个实体类都可以有对应的映射文件。映射文件通常使用实体类名+Mapper命名。例如,User实体类的映射文件名就为UserMapper.xml。UserMapper.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">
<!--
    namespace:指定dao接口的完整类名,mybatis会依据这个接口动态创建一个实现类去实现这个接口,
    而这个类时一个Mapper对象
    id:查询语句的唯一标识,即接口中的方法名
    parameterType:传入参数的类型
    resultType:返回实体类对象
-->
<mapper namespace="com.zua.mapper.UserMapper">
    <select id="findById" parameterType="int" resultType="com.zua.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>

4.修改mybatis-config.xml配置文件

在mybatis-config.xml配置文件中增加以下代码:

<mappers>
        <!--指定SQL映射文件-->
        <mapper resource="com/zua/mapper/UserMapper.xml"/>
 </mappers>

5.编写测试类

package com.zua.test;
import com.zua.pojo.User;
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.InputStream;

public class MyBatisTest2 {
    public static void main(String[] args) throws IOException {
        //从 XML 中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取SqlSession对象,用于执行sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //如果查询的结果是实体类的集合,可调用sqlSession对象的selectList()方法
        User user = sqlSession.selectOne("findById",1);
        System.out.println(user.getUserName());
        sqlSession.close();
    }
}

运行上述代码后,发现运行结果为:
MyBatis入门学习

下面给出原因:

在数据库中,字段的命名为:
MyBatis入门学习
字段的命名都是以下划线为分割,而在JavaBean中,字段是驼峰命名的规则:
MyBatis入门学习
所以导致了查询结果为null。

解决方法

使用 resultMap标签
在UserMapper.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.zua.mapper.UserMapper">
    <resultMap id="userResultMap" type="com.zua.pojo.User">
        <result column="user_name" property="userName"/>
        <result column="user_age" property="userAge"/>
    </resultMap>
    <select id="findById" parameterType="int" resultMap="userResultMap">
        select * from user where id = #{id}
    </select>
</mapper>

修改后运行结果:
MyBatis入门学习

上一篇:我提交的一个内核补丁—CFS的child-runs-first


下一篇:MyBatis-Plus主键ID生成策略