> 文档中心 > 搭建MyBatis示例

搭建MyBatis示例

目录

1. 引入mybatis、junit、mysql依赖

2.创建MyBatis核心配置文件

3.创建Mapper接口

(1)创建User类pojo,对应表单t_user

(2)创建UserMapper接口

4、创建MyBatis的映射文件

1、映射文件的命名规则:

2、MyBatis中可以面向接口操作数据,要保证两个一致:

5、通过junit进行测试

6、加入log4j日志功能

(1)引入依赖

(2)加入log4j的配置文件


1. 引入mybatis、junit、mysql依赖

在pom.xml中插入依赖声明:

       

    

        org.mybatis

        mybatis

        3.5.7

   

   

       

    

        junit

        junit

        4.12

        test

   

   

       

    

        mysql

        mysql-connector-java

        5.1.3

   

2.创建MyBatis核心配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

核心配置文件存放的位置是src/main/resources目录下

新建一个mybatis-config.xml文件,将以下内容粘贴进去:

<!DOCTYPE configuration

        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-config.dtd">

   

   

       

       

           

            <property name="url"

                      value="jdbc:mysql://localhost:3306/mybatis"/>

             <!--注意:如果在建sql表单的时候选了字符集(如utf8),

             这里的value要改成:value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"-->

           

           

       

   

   

   

3.创建Mapper接口

MyBatis中的mapper接口相当于以前的dao。

区别在于:mapper仅仅是接口,我们不需要提供实现类。

(1)创建User类pojo,对应表单t_user

User类中,包括private类型的对应字段、一个有参构造器、一个无参构造器、所有字段的getter和setter

public class User {

    private Integer id;

    private String username;

    private String password;

    private Integer age;

    private String gender;

    private  String email;

    public User() {

    }

    public User(Integer id, String username, String password, Integer age, String gender, String email) {

        this.id = id;

        this.username = username;

        this.password = password;

        this.age = age;

        this.gender = gender;

        this.email = email;

    }

    @Override

    public String toString() {

        return "User{" +

                "id=" + id +

                ", username='" + username + '\'' +

                ", password='" + password + '\'' +

                ", age=" + age +

                ", gender='" + gender + '\'' +

                ", email='" + email + '\'' +

                '}';

    }

    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 String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

    public String getGender() {

        return gender;

    }

    public void setGender(String gender) {

        this.gender = gender;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

}

(2)创建UserMapper接口

 * MyBatis面向接口编程的两个一致:

 * 1。映射文件namespace和Mapper接口的全类名一致

 * 2。映射文件中sql语句的id和mapper接口中的方法一致

映射路径:

在UserMapper.xml中,namespace为”com.atguigu.mybatis.mapper.UserMapper”,定位到这个com.atguigu.mybatis.mapper.UserMapper类。

根据元素id,例如,找到UserMapper.insertUser()。

【根据该逻辑,建立UserMapper.xml,见第六步】

public interface UserMapper {

    /**

     * 添加用户信息

     * sql写在映射文件中

     */

    int insertUser();

    /**

     * 修改用户信息

     */

    void updateUser();

    /**

     * 删除用户信息

     */

    void deleteUser();

    /**

     * 根据id查询用户信息

     */

    User getUserById();

    /**

     * 查询所有的用户信息

     */

    List getAllUser();

}

4、创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

对象:Java的实体类对象

关系:关系型数据库

映射:二者之间的对应关系

1、映射文件的命名规则:

表所对应的实体类的类名+Mapper.xml

例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml (一张表一个映射文件)

因此一个映射文件对应一个实体类,对应一张表的操作

MyBatis映射文件用于编写SQL,访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers目录下

2、MyBatis中可以面向接口操作数据,要保证两个一致:

a> mapper接口的全类名和映射文件的命名空间(namespace)保持一致

b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

在src/main/resources下,创建UserMapper.xml

<!DOCTYPE mapper

        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

   

   

        insert into t_user values(null, "marina", "456",23,'f',"153456@qq.com")

   

   

   

        update t_user set username = "RUOYI" where id = 4

   

   

   

        delete from t_user where id = 5

   

   

    <!--

        查询功能的标签必须设置resultType或者resultMap

        resultType:设置默认的映射关系

        resultMap:设置自定义的映射关系(字段名和表头不一样)

    -->

   

        select * from t_user where id = 4

   

    <!--List getAllUser();-->

   

        select * from t_user

   

5、通过junit进行测试

在src/test下建立com.atguigu.mybatis.test包,创建MyBatisTest测试类。

public class MyBatisTest {

    /**

     * sqlsession默认不自动提交事务,如果需要自动提交事务,可以使用SqlSessionFactory.openSession(true);

     * @throws IOException

     */

    @Test

    public void testInsertUser() throws IOException {

        //加载核心配置文件

        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        //获取sqlsessionfactorybuilder

        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //获取factory

        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);

        //获取sqlsession

        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        //获取mapper接口对象

        UserMapper mapper = sqlSession.getMapper(UserMapper.class); //代理模式

        //测试功能

        int result = mapper.insertUser();

        //提交事务(写的type是JDBC)

//        sqlSession.commit();

        System.out.println("result: " + result);

    }

    @Test

    public void testUpdateUser() throws IOException {

        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.updateUser();

        System.out.println("updating...");

    }

    @Test

    public void testDeleteUser() throws IOException {

        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.deleteUser();

        System.out.println("deleteUser-...");

    }

    @Test

    public void testSelectUser() throws IOException {

        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        /**

         * 如果不在UserMapper.xml中配置:

         *

         *

         * 会报错:A query was run and no Result Maps were found

         *           for the Mapped Statement 'com.atguigu.mybatis.mapper.UserMapper.getUserById'

         *          It's likely that neither a Result Type nor a Result Map was specified.

         *

         * com.atguigu.mybatis.mapper.UserMapper.getUserById: 命名空间.方法名

         *

         * 因此,要设置一个a Result Type nor a Result Map,这个type就是返回来的对应的类(要写全类名)

         *

         * 在UserMapper里进行设置

         */

        User user = mapper.getUserById();

        System.out.println(user);

        List allUser = mapper.getAllUser();

        allUser.forEach(user1 -> System.out.println(user1));

    }

}

6、加入log4j日志功能

日志功能可以记录测试的sql语句、参数、结果,如:

(1)引入依赖

在pom.xml中加入:

    log4j

    log4j

    1.2.17

(2)加入log4j的配置文件

在src/main/resources目录下,创建log4j.xml文件,加入配置信息:

   

       

       

            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}

%m  (%F:%L) \n" />

       

   

   

       

   

   

       

   

   

       

       

   

日志的级别:

FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细,即,如果选择DEBUG级别,一定会打印出前面几种级别的信息。