Mybatis的学习总结

1、什么是Mybatis?

mybatis,通俗地说,就是连接数据库,然后操作数据库的框架。
详情点击官网mybatis

2、为什么要选择Mybatis呢?

为什么要选择Mybatis?等同于为什么要摒弃其它工具呢?连接数据库从JDBC到Hilbernate再发展到Mybatis,下面就简要地介绍一下JDBC和Hilbernate。

2.1 JDBC(Java DataBase Connected)连接数据库的步骤
  1. 注册驱动和加载数据库
    (Class.forName(com.mysql.cj.jdbc.Driver))
  2. 操作Connection,打开statement或prepareStatement对象
    Connection conn = DriverManager.getConnection(url, userName, passWord)
  3. 通过statement或prepareStatement执行SQL语句,返回结果放到ResultSet对象
    PreparedStatement ps = conn.prepareStatement("select * from stu_table")
  4. 根据ResultSet结果集来查询结果
		ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getInt(1) + "\t" + rs.getString(2)
                    + "\t" + rs.getInt(3) + "\t" +
                    rs.getString(4) + "\t" +
                    rs.getString(5));
        }
  1. 关闭连接,释放数据库资源
 		rs.close();
        ps.close();
2.2 mybatis的优点

1:jdbc连接数据库很复杂,且SQL语句与Java代码放在一起,后期难以维护。
2:Hilebernate是一个全自动框架,操作困难。
3:mybatis是半自动ORM框架,可以根据sql变化易于操作

3、那它怎么使用呢?
3.1 mybatis的执行流程

通过xml文件或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终可执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)

3.2 pom.xml中添加依赖
	<dependencies>
        <!--mybatis的jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!--mysql的jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <!--单元测试的jar包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--log4j日志的jar包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.11</version>
        </dependency>
    </dependencies>
3.3 类路径resources下的配置文件

(1)在类路径下配置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>

    <properties resource="jdbc.properties"/>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

(2)在类路径创建mapper文件夹以及对应接口的映射文件(以User实体类为例)

<?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.zyj.user.UserMapper">

    <!--根据User表的Id进行查询用户-->
    <select id="findById" parameterType="int" resultType="com.zyj.user.User">
        select * from user where id = #{id}
    </select>

    <!--根据User表中的username查询用户-->
    <select id="findByName" resultType="com.zyj.user.User">
        select * from user where username = #{userName}
    </select>

    <!--插入数据-->
    <insert id="insertData" parameterType="com.zyj.user.User">
        insert into user (username,birthday,sex,address) values (#{userName},#{birthday},#{sex},#{address})
    </insert>

    <!--根据id删除数据-->
    <delete id="deleteById" parameterType="int">
        delete from user where id=#{id}
    </delete>

    <!--更新数据-->
    <update id="updateData" parameterType="com.zyj.user.User">
        update user set username = #{userName},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{userId}
    </update>
</mapper>

(3)配置jdbc的属性

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username=root
password=123456

(4)log4j日志控制台的输出配置文件

### 设置###
log4j.rootLogger = debug,stdout
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
3.4 实体类的属性

(1)以User表为例,创建一个User实体类和一个对应的接口UserMapper,该接口包含增、删、改、查四个抽象方法,UserMapper.xml与之映射,可将Sql语句输出。

package com.zyj.user;

import lombok.Data;
import java.util.Date;

/**
 * @Data注解取代了实体类中属性的get、set方法,且包括输出的toString()方法
 */
@Data
public class User {
    /**
     * 定义实体类的属性
     */
    private String userName;
    private int userId;
    private Date birthday;
    private String sex;
    private String address;
}

(2)若不使用@Data注解,User类表示如下

package com.zyj.user;

import lombok.Data;
import java.util.Date;
public class User {
    /**
     * 定义实体类的属性
     */
    private String userName;
    private int userId;
    private Date birthday;
    private String sex;
    private String address;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", userId=" + userId +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

(3)UserMapper接口如下:

package com.zyj.user;
/**
 * 增、删、改、查方法
 */
public interface UserMapper {
    User findById(int id);
    User findByName(String name);
    void insertData(User user);
    void deleteById(int id);
    void updateData(User user);
}
3.5 测试类
package com.zyj;

import com.zyj.user.User;
import com.zyj.user.UserMapper;
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.Reader;
import java.util.Date;

public class UserTest {
    @Test
    public void testFindUserById(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            System.out.println(userMapper.findById(41));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 根据名字查询User
     */
    @Test
    public void testFindUserByName(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            System.out.println(userMapper.findByName("王老吉"));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 根据Id删除User
     */
    @Test
    public void testDeleteById(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            userMapper.deleteById(46);
            session.commit();
            session.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 更新User
     */
    @Test
    public void testUpdateData(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = new User();
            user.setUserId(41);
            user.setUserName("zhangsan");
            user.setBirthday(new Date());
            user.setSex("男");
            user.setAddress("上海市");
            userMapper.updateData(user);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 增添数据
     */
    @Test
    public void testInsertData(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession session = sqlSessionFactory.openSession();
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = new User();
            user.setUserName("佳得乐");
            user.setBirthday(new Date());
            user.setSex("男");
            user.setAddress("杭州市");
            userMapper.insertData(user);
            session.commit();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

输出结果:以查询id为例,输出结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值