MyBatis入门

一、Mybatis概述

MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。

MyBatis前身为IBatis,2002年由Clinton Begin发布,2010年从Apache迁移到Google,并改名为MyBatis,2013年又迁移到了Github。

        MyBatis是一个优秀的基于Java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力处理加载驱动、创建链接、创建statement等繁杂的过程。

        MyBatis通过xml或注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由MyBatis框架执行sql并将结果映射为Java对象并返回。

        采用ORM思想解决了实体类和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,是我们不用于jdbc apl打交道,就可以完成对数据库的持久化操作。

        MyBatis支持定制化sql、存储过程以及高级映射,可以在实体类和sql语句之间建立映射关系,是一种半自动化的ORM实现。

二、MyBatis配置文件

1、创建数据库,

我们先来创建一个数据库名为“mydb” ,然后再在mydb数据库中创建一个用户表名为“t_user”,

在表中新建三条数据用来测试。

实现代码如下所示:

#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;

#创建表
create table t_user
(
	uid int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	phone varchar(11),
	address varchar(50)
);

insert into t_user(username,password,phone,address) values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) values('小美','123','18565234759','信阳');

2、创建实体类

创建一个名为“user”的实体类,实体类的属性名推荐和数据库的字段名一样。

实现代码如下:

public class User {
    private Integer uid;
    private String username;
    private String password;
    private String phone;
    private String address;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    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 getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

3、创建接口

创建一个接口,在接口中编写全查、单查、、添加、删除的抽象方法

实现代码如下:

public interface UserDao {
    //全查
    List<User> selectAll();

    //根据id查询用户信息
    User selectByid(int uid);

    //模糊查询
    List<User> seach(String keyword);

    //添加
    int addUser(User user);

    //删除
    int deleteByid(int uid);

    //修改
    int update(User user);
}

4、编写mapper配置文件

在接口的包中创建对应的mapper映射配置文件

实现代码如下:

<?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接口-->
<mapper namespace="com.hp.dao.UserDao">
    <!--全查-->
    <select id="selectAll" resultType="com.hp.bean.User">
        select * from t_user;
    </select>

    <!--根据uid查询用户信息-->
    <select id="selectByid" parameterType="int" resultType="com.hp.bean.User">
        select * from t_user where uid = #{uid};
    </select>
    
    <!--模糊查询-->
    <select id="seach" parameterType="String" resultType="com.hp.bean.User">
        select * from t_user where username like concat('%',#{keyword},'%')
    </select>

    <!--添加-->
    <insert id="addUser" parameterType="com.hp.bean.User">
        insert into t_user(username,password,phone,address) values(#{username},#{password},#{phone},#{address});
    </insert>

    <!--删除-->
    <delete id="deleteByid" parameterType="int">
        delete from t_user where uid = #{uid};
    </delete>

    <!--修改-->
    <update id="update" parameterType="com.hp.bean.User">
        update t_user set username=#{username},password=#{password},phone=#{phone},address=#{address} where uid=#{uid};
    </update>
</mapper>

5、编写mybatis框架的核心配置文件

在src中创建一个文件,命名为SqlMapConfig.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="mysql">
        <environment id="mysql">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.hp.dao.UserDao"></mapper>
    </mappers>
</configuration>

6、测试

我们通过myBatis进行数据库操作需要实现如下五步才能正常使用。

1、加载核心配置文件的字节数输入流 -- Resources.getResourceAsStream("核心框架配置文件名")

2、创建SqlSessionFactoryBuilder的构建对象 --- new SqlSessionFactoryBuilder();

3、通过构建对象加载配置文件的输入流获取SqlSessionFactory --- 构建对象名.build(stream);

4、通过工厂对象获取 SqlSession对象 --- SqlSessionFactory对象名.openSession();

5、通过SqlSession对象获取接口的代理对象 --- SqlSession对象名.getMapper(接口类.class);

public class UserTest {
    InputStream stream =null;
    SqlSessionFactoryBuilder builder =null;
    SqlSessionFactory factory =null;
    SqlSession sqlSession =null;
    UserDao userDao =null;
    User user = null;
    @Before
    public void into() throws IOException {
        System.out.println("before");
        //1.加载核心配置文件的字节输入流
        stream = Resources.getResourceAsStream("SqlMapConfig.xml");//施工图纸
        //2.创建SqlSessionFactoryBuilder的构建对象---框架使用的是构建者模式
        builder = new SqlSessionFactoryBuilder();//工程队
        //3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
        factory = builder.build(stream);//工程队根据图纸剑招工厂
        //4.通过工厂对象获取 SqlSession对象---执行JDBC操作的
        sqlSession = factory.openSession();//工厂生产产品
        //5.通过SqlSession对象获取接口的代理对象
        userDao = sqlSession.getMapper(UserDao.class);
    }

    //全查
    @Test
    public void TestSelectAll(){
        List<User> userList = userDao.selectAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

    //单查
    @Test
    public void TestSelectByid(){
        User user1 = userDao.selectByid(1);
        System.out.println(user1);
    }

    //模糊查询
    @Test
    public void TestSeach(){
        List<User> userList = userDao.seach("张");
        for (User user1 : userList) {
            System.out.println(user1);
        }
    }

    //添加
    @Test
    public void TestAdd(){
        user = new User();
        user.setUsername("不想去");
        user.setPassword("123");
        user.setPhone("119");
        user.setAddress("去思");
        int i = userDao.addUser(user);
        if (i>0){
            System.out.println("添加了");
        }
    }

    //删除
    @Test
    public void TestDelete(){
        int i = userDao.deleteByid(5);
        if (i>0){
            System.out.println("删除了");
        }
    }

    //修改
    @Test
    public void TestUpdate(){
        User oldUser = userDao.selectByid(4);
        System.out.println("修改前"+oldUser);
        oldUser.setUsername("小妹");
        oldUser.setAddress("南京");

        userDao.update(oldUser);
        User newUser = userDao.selectByid(4);
        System.out.println("修改后"+newUser);
    }

    @After
    public void distroy() throws IOException {
        System.out.println("after");
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值