Mybatis搭建流程

为了防止某笨蛋忘记,在这里记录一下Mybatis的搭建过程

一、首先,用maven导入所需依赖:编辑pom.xml

 <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- Junit单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <!-- Mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
            <scope>runtime</scope>
        </dependency>
        <!-- lombok插件,可以代替实体类中的构造器和set、get方法等 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            //范围,因为在编译过后还是会生成方法,所以只让它参与编译即可,不用运行
            <scope>provided</scope>
        </dependency>

到这里,Mybatis的环境已经搭建好了,接下来若想使用Mybatis的功能,就要编辑配置文件了。

二、在maven搭建的项目结构中,找到路径:src->main->resources,创建一个File文件

在创建好的文件中,先写上以下内容,代表这是个xml配置文件:

<?xml version="1.0" encoding="utf-8" ?>

但我们是Mybatis的配置文件,可不是什么随随便便什么都能写的文件嗷!

于是要加入DTD约束(可以去官网找)。约束的作用就是,不让你什么能都往里面写,更规范!

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
//以上便是引入约束了。XML配置文件中包含了对Mybatis的核心设置,下面给出一个简单的示例
<configuration>
    <environments default="development">//可以配置多个环境,默认使用下面的环境
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">//数据源,POOLED是Mybatis内置的小型数据库连接池
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 注册配置文件 -->
    <mappers>
        //mapper配置文件的路径,千万不要注册不存在的mapper,否则会报错!
        <mapper resource="mapper/UserMapper.xml"/>
        //配置注解版的接口类
        <mapper class="com.jsoft.afternoon.dao.UserMapper2" />
    </mappers>
</configuration>

三、创建实体类User

目录如下:

package com.jsoft.afternoon.entity;

import lombok.*;
import lombok.experimental.Accessors;

//得益于lombok插件,
//@Data注解可以在编译时生成get方法、set方法、equals方法、hashCode方法、toString方法
@Data
//无参构造器
@NoArgsConstructor
//全参构造器
@AllArgsConstructor
//开启链式编程,在这里的set方法返回的是一个本类对象,于是可以如下编程:
//user.setId(1001).setUsername("admin").setpassword("666")
@Accessors(chain = true)
public class User {

    private Integer id;
    private String username;
    private String password;


}

四、创建接口写crud方法,并在对应的XML文件中写SQL,调用方法来执行SQL。

创建接口,目录如下:

package com.jsoft.afternoon.dao;
import com.jsoft.afternoon.entity.User;
import java.util.List;

public interface UserMapper {

    List<User> findUsersByName(String name);

    List<User> findAllUsers();

    int saveUser(User user);

    int updateUser(User user);

    int deleteUserById(Integer id);

    /**
     * 根据id查询用户
     * @param id 用户的主键
     * @return 查询到的User对象
     */
    User selectUserById(Integer id);
}

创建对应接口,目录如下:

同样,这里的文件也要加上DTD约束。区别在于configuration、config都换成了“mapper”。

同时,要再Mybatis的主配置文件里注册该mapper配置文件,否则Mybatis不承认该mapper文件。(详情参考上方mybatis主配置文件)

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
//这里写需要被配置的接口的全类名,自此接口和配置文件就关联起来了!!
<mapper namespace="com.jsoft.afternoon.dao.UserMapper">
//这里的id就是接口中对应的方法名,resultType是返回值的类型,同样要写全类名
    <select id="findUsersByName" resultType="com.jsoft.afternoon.entity.User">

        select id,username,password from user where username like '%${name}%'

    </select>


    <select id="findAllUsers" resultType="com.jsoft.afternoon.entity.User">
        select id,username,password from user
    </select>

    <insert  id="saveUser" parameterType="com.jsoft.afternoon.entity.User">
        insert into user values (#{id},#{username},#{password})
    </insert>

    <update id="updateUser" parameterType="com.jsoft.afternoon.entity.User">
        update user set username = #{username},password = #{password} where id = #{id}
    </update>

    <delete id="deleteUserById">
        delete from user where id = #{id}
    </delete>

    <select id="selectUserById" resultType="com.jsoft.afternoon.entity.User">
        select id,username,password from user where id = ${id}
    </select>
</mapper>

五、创建测试类,运行功能。

package com.jsoft.afternoon.test;

import com.jsoft.afternoon.dao.UserMapper;
import com.jsoft.afternoon.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 *
 * 历史:
 * apache的一个开源项目。ibatis。2010年apache迁移到了google code --- mybatis
 * mybatis3。ibatis1、ibatis2。
 * 2013年,GitHub上。
 *
 * 作用:
 * 是一款持久层框架,支持定制化sql语句,存储过程,高级映射。
 * XML映射文件,来配置和映射原生信息。DAO层。
 *
 * 持久化:
 * 把数据保存到硬盘上。
 *
 * 持久层:
 * 业务层需要操作数据的。service层----dao层。
 * 数据在磁盘上的。
 * service层调用数据库。耦合度太高,复用性太差。
 * 把操作数据库的代码统一抽离出来,形成了一个独立的数据库中间的层
 *
 * 持久层框架:
 * 1、mybatis
 *  优点:
 *      a、sql语句和java代码分离
 *      b、动态sql语句。内置了一些逻辑判断的标签
 *      c、实现列名和字段名的自动映射
 *      d、写原生sql语句,灵活
 *  缺点:
 *      a、调试难。通过日志框架解决
 *      b、使用逻辑标签拼接SQL语句,语法很难受
 *      c、名字之间映射需要匹配
 *      d、高度依赖于开发者的sql水平
 *  2、Mybatis-plus(苞米豆),不需要写sql。
 *  3、Hibernate:JBOSS。不需要写sql。hql
 *  4、Spring data JPA。创建表
 *
 *  面试题:
 *  $和#的区别?
 *  $:代表底层使用的statement,直接进行字符串替换。
 *  #:代表的底层使用的preparedstatement。替换预编译的语句中的?(推荐)
 */
public class Ch01 {

    SqlSession session;

    @Before
    public void before() {
    //构建session工厂,这里的session不网络编程中的session,是mybatis的session会话
    //虽然现在mapper在mybatis的主配置文件里注册了,
    //但是我们的程序不知道哪个是mybatis的主配置文件,
    //因此需要SqlSessionFactoryBuilder来解析输入流中传来的文件,构建session工厂。
        InputStream inputStream = UserMapper.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder  sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

    // 获取session
        session = sqlSessionFactory.openSession();
    }

    @After
    //由于mybatis默认不会提交事务,操作只是在内存层面。
    //所以要在增删改程序执行完成后,手动提交事务。
    public void after() {
        session.commit();
    }
    @Test
    public void test1() {
        // 因为接口无法创建对象,因此这里要获取代理对象。
        //获取后就可以使用对应的方法啦!
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectUserById(1);

        System.out.println(user);
    }
   @Test
    public void test6() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.findUsersByName("admin");
        System.out.println(users);
    }

    @Test
    public void test5() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.findAllUsers();
        System.out.println(users);
    }

    @Test
    public void test4() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        int i = mapper.deleteUserById(4);
        System.out.println(i);
    }

    @Test
    public void test3() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        int i = mapper.updateUser(new User(4, "abcdefg", "666666"));
        System.out.println(i);

    }

    @Test
    public void test2() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        int hello = mapper.saveUser(new User(null, "hello", "999999"));
        System.out.println(hello);

    }
}

六、Mybatis注解版

将接口类直接配置到Mybatis的主配置文件中即可!详情见上方主配置文件

package com.jsoft.afternoon.dao;

import com.jsoft.afternoon.entity.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author jsoft
 *
 * 注解版
 */
public interface UserMapper2 {

    @Select("select id,username,password from user where username like '%${name}%'")
    List<User> findUsersByName(String name);

    @Select("select id,username,password from user")
    List<User> findAllUsers();
}

编写测试类运行

package com.jsoft.afternoon.test;

import com.jsoft.afternoon.dao.UserMapper;
import com.jsoft.afternoon.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @author jsoft
 *
 */
public class Ch02 {

    SqlSession session;

    @Before
    public void before() {
        InputStream inputStream = UserMapper.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder  sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

        // 获取session
        session = sqlSessionFactory.openSession();
    }

    @After
    public void after() {
        session.commit();
    }

    @Test
    public void test6() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.findUsersByName("admin");
        System.out.println(users);
    }

    @Test
    public void test5() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.findAllUsers();
        System.out.println(users);
    }

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值