MyBatis学习笔记--代码实现

MyBatis学习笔记–代码实现

思路:搭建环境–>导入MyBatis–>编写代码–>测试

搭建环境

  • 搭建数据库
create database mtbatis;
use mabatis;

create table user(
	id int primary key not null,
	name varchar(30) default null,
	pwd varchar(30) default null
)engine = InnoDB default charset = utf8

insert into user (id,name,pwd) values 
(1,'abt','123456'),
(2,'abt2','123456'),
(3,'abt3','123456');
  • 新建项目
  1. 新建一个普通Maven项目

  2. 导入Maven依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <!--父工程-->
        <groupId>com.albert</groupId>
        <artifactId>MyBatis-study</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--导入依赖-->
        <dependencies>
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    
    </project>
    

创建一个模块

  • 编写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核心配置文件-->
<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
	
</configuration>
  • 编写MyBatis工具类
package com.alb.utils;

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 java.io.IOException;
import java.io.InputStream;

// sqlSessionFactory --> sqlSession
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            // 使用MyBatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。S
    // qlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

编写代码

  • 实体类

    package com.alb.pojo;
    
    // 实体类
    public class User {
    
        private int id;
        private String name;
        private String pwd;
    
        public User(){
    
        }
    
        public User(int id, String name, String pwd) {
            this.id = id;
            this.name = name;
            this.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;
        }
    }
    
  • Dao接口

    package com.alb.dao;
    
    import com.alb.pojo.User;
    
    import java.util.List;
    
    public interface UserDao {
    
        List<User> getUserList();
    
    }
    
  • 接口实现类由原来的UserDaoImpl转为一个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接口-->
    <mapper namespace="com.alb.dao.UserDao">
    
        <select id="getUserList" resultType="com.alb.pojo.User">
            select * from `user`;
        </select>
    
    </mapper>
    

测试

注意:

org.apache.ibatis.binding.BindingException: Type interface com.alb.dao.UserDao is not known to the MapperRegistry.

每一个Mapper.xml都需要在MyBatis核心配置文件中注册

MapperRegistry:

核心配置文件中注册mappers

  • junit测试

     @Test
        public void test(){
            // 第一步:获取sqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            // 方式一:getMapper
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
    
            for (User user : userList) {
                System.out.println(user);
            }
    
            // 关闭sqlSession
            sqlSession.close();
    
        }
    

CRUD

namespace

namespace中的包名要和Dao/mapper接口的包一致

select

查询语句

  • id:就是对应namespace中的方法名
  • resultType:Sql语句执行的返回值
  • parameterType:参数类型

上述例子即为查询

insert

插入语句

  • id:就是对应namespace中的方法名
  • parameterType:参数类型
// 根据ID查询用户
public User getUserById(int id);
<insert id="addUser" parameterType="com.alb.pojo.User">
    insert into `user`(id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
// 增删改需要提交事务
    @Test
    public void addUser(){
        // 获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 使用和指定语句的参数和返回值相匹配的接口
        UserDao userDao = sqlSession.getMapper(UserDao.class);

        // 传入需添加用户的信息
        User user = new User();
        user.setId(4);
        user.setName("zhangsan");
        user.setPwd("123456");

        // 判断是否插入成功
        int res = userDao.addUser(user);

        if(res > 0)
            System.out.println("成功");
        else
            System.out.println("失败");

        // 提交事务
        sqlSession.commit();

        // 关闭sqlSession对象
        sqlSession.close();
    }
update

更新语句

  • id:就是对应namespace中的方法名
  • parameterType:参数类型
// 新增用户
public int updateUser(User user);
<update id="updateUser" parameterType="com.alb.pojo.User">
    update user set name = #{name}, pwd = #{pwd}
    <where>
        id = #{id}
    </where>
</update>
@Test
public void updateUser(){

    // 获取sqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    // 使用和指定语句的参数和返回值相匹配的接口
    UserDao userDao = sqlSession.getMapper(UserDao.class);

    User user = new User();
    user.setName("abtt");
    user.setPwd("112233");
    user.setId(1);

    int res = userDao.updateUser(user);

    sqlSession.commit();

    if (res > 0)
        System.out.println("Success");
    else
        System.out.println("Failed");

    sqlSession.close();

}
delete
// 删除用户
public int deleteUser(int id);
<delete id="deleteUser" parameterType="int">
    delete from user
    <where>
        id = #{id}
    </where>
</delete>
@Test
public void deleteUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);

    int res = userDao.deleteUser(4);

    sqlSession.commit();

    if (res > 0)
        System.out.println("Success!");
    else
        System.out.println("Failed!");

    sqlSession.close();
}

注意:增删改中必须要提交事务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值