MyBatis入门案例之增删改查

一、简介 

MyBatis:解决数据的持久化问题的框架

一款优秀的半自动的ORM持久层框架,它支持自定义 SQL、存储过程以及高级映射;一个开源轻量级的数据持久化框架,是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并将结果映射为iava对象并返回。


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


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

mybatis – MyBatis 3 | 简介

二、案例 

1.创建测试的数据库和表

-- 判断存在即删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
-- 使用数据库
use mydb;
-- 删除重复的表
drop table if exists t_user;
-- 创建t_user表
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','信阳');
-- 查询
select * from t_user;

2.创建一个Java项目并导入mybatis框架的jar包;创建一个lib文件夹放入mybatis框架的14个jar包,导入项目中。 

3.创建一个实体类跟表对应;在src中创建com.zhan.bean包,然后创建User实体类。表名即类名;字段名即属性必须小写。

package com.zhan.bean;

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

    //方法
    public User() {
    }

    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 + '\'' +
                '}'+'\n';
    }
}

4.创建针对表操作的接口类并定义方法;在dao包中创建UserDao的接口,然后在接口中定义针对数据库的增删改查等操作。

package com.zhan.dao;

import com.zhan.bean.User;

import java.util.List;

public interface UserDao {
    //查询
    List<User> selectAll();
    //新增
    int add(User user);
    //删除
    int delete(int uid);
    //单查
    User selectById(int uid);
    //修改
    int update(User user);
    //模糊查询
    List<User> seach(String keyword);
}

5. 在接口的包中创建对应的mapper映射配置文件;在dao接口的同目录下创建跟接口名字一样的配置文件。

namespace是映射的dao接口;把配置文件和接口进行映射

通过select标签进行查询

id映射接口的方法名

parameterType指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)

resultType指定返回值的类型

  

<?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.zhan.dao.UserDao">
    <select id="selectAll" resultType="com.zhan.bean.User">
       select * from t_user;
    </select>
    <insert id="add" parameterType="com.zhan.bean.User">
        insert into t_user(username,password,phone,address)values(#{username},#{password},#{phone},#{address});
    </insert>
</mapper>

6.在src目录中创建mybatis框架的核心配置文件。

在src中创建一个文件,命名为SqlMapConfig.xml,在该配置文件中配置连接数据库的参数。

environments:配置环境信息===就是配置连接数据库的参数;

default:指定配置的环境信息的id,表示默认连接该环境 

transactionManager:配置事务的处理方式:模式使用JDBC的事务处理

dataSource:数据源的默认type设置为pooled,表示使用连接池

mappers:加载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>
    <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="root"/>
            </dataSource>
        </environment>

        <environment id="oracle">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>

    </environments>
    <mappers>
        <mapper class="com.zhan.dao.UserDao"/>
<!--        <mapper resource="com/zhan/dao/UserDao.xml"/>-->
    </mappers>

</configuration>

 7.在测试类中进行测试 使用mybatis框架需要按照框架的步骤进行;

public class UserTest {
    InputStream stream = null;
    SqlSessionFactoryBuilder builder = null;
    SqlSessionFactory factory = null;
    SqlSession sqlSession = null;
    UserDao userDao = null;

    @Before
    public void init() throws IOException {
        stream = Resources.getResourceAsStream("mybatis.xml");
        builder = new SqlSessionFactoryBuilder();
        factory = builder.build(stream);
        sqlSession = factory.openSession();
        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 testAdd(){
        User user = new User();
        user.setUsername("张其");
        user.setPassword("123");
        user.setAddress("开封");
        user.setPhone("123");
        int n = userDao.add(user);
        if(n>0){
            System.out.println("新增成功");
        }else{
            System.out.println("新增失败");
        }
    }
    @Test
    public void testDelete(){
        int n = userDao.delete(5);
        if(n>0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }
    @Test
    public void testSelectById(){
        User user = userDao.selectById(6);
        System.out.println(user);
    }
    @Test
    public void testUpdate(){
        //1.数据库回显
        User oldUser = userDao.selectById(6);
        System.out.println("修改前:"+oldUser);
        //2.根据需要修改字段值
        oldUser.setUsername("修改测试");
        oldUser.setAddress("河南南阳");
        //3.执行数据库更新
        userDao.update(oldUser);
        //4.再次查询
        User newUser = userDao.selectById(6);
        System.out.println("修改后:"+newUser);
    }

    @Test
    public void testSeach(){
        List<User> userList = userDao.seach("张");
        for (User user:userList) {
            System.out.println(user);
        }
    }

    @After
    public void destroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }
}

 测试类UserTest分步骤解析

@Before

前置通知, 在目标方法(切入点)执行之前执行。

value 属性绑定通知的切入点表达式,可以关联切入点声明,也可以直接设置切入点表达式

注意:如果在此回调方法中抛出异常,则目标方法不会再执行,会继续执行后置通知 -> 异常通知。

@After后置通知, 在目标方法(切入点)执行之后执行

 

 查询测试 

 

 查询运行后控制台日志

新增测试  

 

新增运行后控制台日志

删除测试 

 

 删除运行后控制台日志

单查测试

 

修改测试 

模糊查询测试

 

 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值