MyBatis的配置以及基本的增删改查

MyBatis介绍

JDBC——Hibernate——ibatis——Mybatis

  • ORM
  • Object RelationShip Mapping 对象关系映射

    Object:JavaBean 
    Relationship:关系(指代数据库的表)
    Mapping:映射
    
  • Hibernate不需要写SQL语句,配置好Mapping,那么使用类似session.save(user)的语句可以自动生成SQL语句,完成save操作

  • 当时Hibernate出来的时候非常红 ,大家都不用JDBC了,Sun公司就给了出了JPA(Java Persistence API)Java持久层API,用来替代JDBC,但是大家还是用hibernate(当然现在用MyBatis多)。

    2000-2010
    政府、电信、银行、金融、中大型的企业
    特点:需求稳定,不需要经常改

    2010-2020

    中小型企业、创业型公司的小项目、面向用户的互联网项目
    特点:需求变化的非常迅速

    ibatis/Mybatis

把SQL语句暴露给开发者,其他的封装起来。
修改起来非常方便。
这是Mybatis的最大优点。

Mybatis封装了JDBC的持久层框架。
它比DBUtils和JDBCTemplate更加方便

写一个小demo

导包

这里写图片描述

ant的两个包是构建工具
asm和cglib是字节码增强工具
commons-logging是Apache的日志依赖包
javassist也是字节码增强工具,会产生代理对象
log4j-api等是日志包
mybatis核心包
ognl包提供了ognl的api,ongl是一种表达式语言
slf4j日志包
进MySQL建表

这里写图片描述

新建对应的JavaBean
package com.bamzhy.bean;

public class User {


    String id ;
    String username;
    String password;
    String email;
    int age ;

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String 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 String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
创建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>
    <!--配置MyBatis环境配置-->
<environments default="development">
    <environment id="development">
        <!--配合JDBC进行事务控制,由Mybatis控制-->
        <transactionManager type="JDBC"></transactionManager>
        <!--连接池-->
        <dataSource type="POOLED">
            <!--driver是mysql的驱动-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="12345"/>
        </dataSource>
    </environment>
</environments>

</configuration>
创建Mybatis查询配置文件(SQL语句配置文件)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
    <!--parameterType是参数的类型-->
    <!--这一行SQL语句要映射到哪个类上要使用resultType指明-->
    <!--SQL语句中WHERE=?,问号用#{}代替-->
    <select id="findUserById" parameterType="int" resultType="com.bamzhy.bean.User">
        SELECT * FROM tt_user WHERE id=#{id};
    </select>

</mapper>
在主配置文件中引入从配置文件
<?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>
    <!--配置MyBatis环境配置-->
<environments default="development">
    <environment id="development">
        <!--配合JDBC进行事务控制,由Mybatis控制-->
        <transactionManager type="JDBC"></transactionManager>
        <!--连接池-->
        <dataSource type="POOLED">
            <!--driver是mysql的驱动-->
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="12345"/>
        </dataSource>
    </environment>
</environments>

    <mappers>
        <!--resource中写入从配置文件名-->
        <mapper resource="com/bamzhy/bean/user.xml"></mapper>

</configuration>

ClassLoader:类加载器,将字节码文件加载到jvm虚拟机中

测试
查找
package com.bamzhy.test;

import com.bamzhy.bean.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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;


public class test {
    @Test
    public void test1() throws IOException {
        //使用Mybatis的api去实现
        //加载配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //操作数据库的一个载体
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println("user"+user);
    }
}
  • 结果:
userUser{id='1', username='haha1', password='12345', email='12345@qq.com', age=19191019}
  • 换种方式查询
    <select id="findUserByName" parameterType="string" resultType="com.bamzhy.bean.User">
        SELECT * FROM tt_user WHERE username Like #{id};
    </select>

        //字段后边加%表示以该字段为开头
        List<Object> haha = sqlSession.selectList("test.findUserByName", "haha%");
        System.out.println("user"+haha);
插入
  • 参数和属性需要对应!
    <insert id="insertUser" parameterType="com.bamzhy.bean.User">
        INSERT INTO tt_user VALUES (NULL,#{username},#{password},#{email},#{age});
    </insert>
  • 一定要记得提交,否则虽然能执行,但不会生效
    @Test
    public void test3() throws IOException {
        //使用Mybatis的api去实现
        //加载配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //操作数据库的一个载体
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //返回一个对象
        User user = new User();
        user.setUsername("haha3");
        user.setPassword("12345");
        user.setEmail("12345@qq.com");
        user.setAge(199191);
        int insert = sqlSession.insert("test.insertUser", user);
        //非常重要,要记得提交,否则不报错但是数据库里边没有
        sqlSession.commit();

        System.out.println("insert "+insert);
    }
}
删除
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM tt_user WHERE id=#{id};
    </delete >
  • 同样记得要手动提交

    @Test
    public void test4() throws IOException {
        //使用Mybatis的api去实现
        //加载配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //操作数据库的一个载体
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //返回一个对象
        int user = sqlSession.delete("test.deleteUserById", 5);
        //同样需要commit
        sqlSession.commit();
        System.out.println("user"+user);
    }
修改
    <update id="updateUserById" parameterType="com.bamzhy.bean.User">
        UPDATE tt_user SET username=#{username},password=#{password} WHERE  id=#{id};
    </update>
    @Test
    public void test5() throws IOException {
        //使用Mybatis的api去实现
        //加载配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //操作数据库的一个载体
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //返回一个对象
        User user = new User();
        user.setUsername("haha3");
        user.setPassword("12345");
        user.setEmail("12345@qq.com");
        user.setAge(199191);
        //设置修改的类型
        user.setId("2");
        int update = sqlSession.update("test.updateUserById", user);
        sqlSession.commit();

        System.out.println("update " + update);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值