mybatis搭建入门、配置及实现增删改查

mybatis搭建入门、配置及实现增删改查

1.开发环境

IDE:idea 2019.1
构建工具:maven 3.8.2
MySQL版本:MySQL 8.0
MyBatis版本:MyBatis 3.4.6

2.创建maven工程

  • 创建maven项目,建议把外层src文件夹删掉,再建立二级模块,这样方便用外层xml做全局配置
    在这里插入图片描述

  • 外层pom.xml中导入依赖

<dependencies>
   	    <!--mybatis依赖导入-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
    
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
    
        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

3.创建MyBatis的核心配置文件

在‘resources’文件夹下创建一个xml核心配置文件,习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring
之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

在这里插入图片描述

<?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/数据库名?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="数据库用户名"/>
                <property name="password" value="数据库密码"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <!--此处先在‘resources’文件下创建个mybatis的映射文件-->
        <mapper resource="xxx.xml"/>
    </mappers>
</configuration>

4.创建实体类

在src/main文件夹中创建java实体类com.mojito.User

用alt+insert快速构造get set方法

public class User {

    private int id;
    private String name;
    private String pwd;

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

    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 String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public User() {
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

}

5.创建mapper接口

创建接口类“com.mapper.UserMapper”。MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

public interface UserMapper {
    
    /*
    * mybatis面向接口编程的两个一致
    * 1.映射文件的namespace要和mapper的全类名保持一致
    * 2.映射文件中sql语句的id要和mapper接口中的方法名一致
    *
    * 表-实体类-mapper接口-映射文件
    * */
    
    /**
     * 添加用户信息
     */
    int insertUser();
}

6.创建MyBatis的映射文件

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

对象:Java的实体类对象
关系:关系型数据库
映射:二者之间的对应关系

1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
2、MyBatis中可以面向接口操作数据,要保证两个一致:
a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致
b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

Java概念数据库概念
属性字段/列
对象记录/行

在这里插入图片描述

<?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.mapper.UserMapper">
    
    <!--int insertUser();-->
    <insert id="insertUser">
        insert into user values(10,'admin','shiyang')
    </insert>
    
</mapper>

7.通过junit测试功能

在test文件夹里创建测试类com.mojito.mybatis.test,在test包下创建test.java类
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。
public class test1 {

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

    @Test
    public void testMybatis() throws IOException {
        //加载核心配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //获取sqlSessionFactoryBuilder且获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取sqlSession 可实现mybatis的功能 访问sql语句
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//优化为自动提交 设置自动提交参数为true b是autoCommit

        //获取mapper接口对象 getMapper底层是个代理模式 可以帮助获取接口的一个实现类
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //测试功能 过程:从mapper接口-->映射文件xml-->根据方法找到要调用的sql语句
        int result = mapper.insertUser();
        //提交事务
        //sqlSession.commit();
        System.out.println(result);
    }

}

7.加入log4j日志功能

  • 在外层pom.xml中加入依赖

    <!--log4j日志依赖-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
  • 加入log4j的配置文件

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

8.mybatis的增删改查

**小技巧:**接口文件中写函数接口时alt+回车可利用mybatisX插件在xml映射文件中自动生成sql语句

(1)增

UserMapper接口文件中:

//添加用户
    int insertUser();

UserMapper.xml映射文件

<!--int insertUser();-->
    <insert id="insertUser">
        insert into user values(10,'admin','shiyang')
    </insert>

test1.java测试文件:

@Test
    public void testMybatis() throws IOException {
        //加载核心配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //获取sqlSessionFactoryBuilder且获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取sqlSession 可实现mybatis的功能 访问sql语句
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//优化为自动提交 设置自动提交参数为true b是autoCommit

        //获取mapper接口对象 getMapper底层是个代理模式 可以帮助获取接口的一个实现类
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //测试功能 过程:从mapper接口-->映射文件xml-->根据方法找到要调用的sql语句
        int result = mapper.insertUser();
        //提交事务
        //sqlSession.commit();
        System.out.println(result);
    }

(2)删除

UserMapper接口文件中:

//删除用户信息
    void deleteUser();

UserMapper.xml映射文件中:

 <!--void deleteUser();-->
    <delete id="deleteUser">
        delete from user where id = 10
    </delete>

test1.java测试文件:(包含了删、改、查,代码只用改注释操作部分)

@Test
    public void testUpdateOrDelete() throws IOException {
        //加载核心配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //获取sqlSessionFactoryBuilder且获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取sqlSession 可实现mybatis的功能 访问sql语句
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//优化为自动提交 设置自动提交参数为true b是autoCommit

        //获取mapper接口对象 getMapper底层是个代理模式 可以帮助获取接口的一个实现类
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //修改
        //mapper.updateUser();

        //删除
        //mapper.deleteUser();
        
        //查询
        //方式1:根据id查询 返回类型为实体类
       /* User user = mapper.getUserById();
        System.out.println(user);*/

        //方式2:查询所有的用户信息 List集合
        List<User> list = mapper.getAllUser();
        list.forEach(System.out::println);


    }

(3)改

UserMapper接口文件中:

//修改用户
    void updateUser();

UserMapper.xml映射文件中:

<!--void updateUser();-->
    <update id="updateUser">
        update user set name = '石阳' where id = 2
    </update>

test1.java测试文件:见(2)

(4)查

UserMapper接口文件中:

//查询
    // 方式1:根据id查询 返回类型为实体类
    User getUserById();

    // 方式2:查询所有的用户信息 List集合
    List<User> getAllUser();

UserMapper.xml映射文件中:

<!--User getUserById();-->
    <!--查询功能的标签必须设置->resultType:设置默认的映射关系
                                resultMap:设置自定义的映射关系-->
    <select id="getUserById" resultType="com.mojito.User">
        select * from user where id = 5
    </select>
    <!-- List<User> getAllUser();-->
    <select id="getAllUser" resultType="com.mojito.User">
        select * from user
    </select>

小结

  • 配置完毕之后实现增删改查的编写步骤:
    • 先在接口类文件中定义方法
    • 再到映射文件中写sql语句,id方法名一致
    • 最后在test文件中进行单元测试()
  • 关键点
    • mybatis面向接口编程的两个一致

      • 映射文件的namespace要和mapper的全类名保持一致
      • 映射文件中sql语句的id要和mapper接口中的方法名一致
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值