Mybatis第一天

Mybatis第一天

一、理解什么是MyBatis?

  MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

  1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
  2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis与hibernate的对比?

  mybatis提供一种“半自动化”的ORM实现。

  这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。   

  而mybatis的着力点,则在于POJO与SQL之间的映射关系。

二、简单例子(快速入门)

1)首先建立项目

 

2)导入mybatis所需的jar包

  如上图所示,在工程目录下新建一个lib文件夹用来放置jar包。 

  mybatis需要jar包:mybatis-3.2.2.jar

  mysql驱动jar包:mysql-connector-java-5.1.47.jar

  日志记录jar包:log4j-1.2.17.jar

 

3)创建数据库数据(mysql)

 

4)mysql驱动配置文件(这样可以优化性能)

  在src目录下新建一个db.properties文件中(只要后缀为.properties即可),当作数据源的属性,方便修改

#数据源的信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root

 

 

5)添加mybatis配置文件conf.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>
 <!-- 引入属性文件 -->
 <properties resource="db.properties"/>
 <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="com/zhiyou100/zfx/mapper/UsersMapper.xml"/> 
  <mapper resource="com/zhiyou100/zfx/mapper/OrderMapper.xml"/> 
 </mappers>
</configuration>

 

6)创建对应的实体对象

 

 

 对应的Java代码(以Users为例):

package com.zhiyou100.zfx.bean;

public class Users {
    
    private int id;
    private String name;
    private int age;
    
    public Users(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Users() {
        super();
    }
    public Users(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    
    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Users [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
    
        
}

 

 

 7)创建dao类和定义操作users表的sql映射文件UserMapper.xml

 

 提供简单的增删改查数据信息。

<?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:表示名称空间。现在的目的是区分id的. -->
<mapper namespace="com.zhiyou100.zfx.mapper.UsersMapper">

    <!-- 根据id查询用户。id:标识该标签。
             parameterType:参数类型。可以写 也可以省略
             resultType:返回结果的类型。
             
            #{id}:类似于EL表达式。 解析id的值
     -->
    <select id="getUser" resultType="com.zhiyou100.zfx.bean.Users">
        select * from users where id=#{id}   
    </select>
    
    <insert id="addUser" parameterType="com.zhiyou100.zfx.bean.Users">
        insert into users (name,age) values(#{name},#{age})
    </insert>
    
    <update id="updateUser" parameterType="com.zhiyou100.zfx.bean.Users">
        update users set name = #{name} ,age = #{age} where id = #{id}
    </update>
    
    <delete id="deleteUser">
        delete from users where id = #{id}
    </delete>
    
    <select id="selectAll" resultType="com.zhiyou100.zfx.bean.Users">
        select * from users
    </select>
    
    <select id="selectByAge" parameterType="map" resultType="com.zhiyou100.zfx.bean.Users">
        select * from users where age between #{min} and #{max}
    </select>
    
</mapper>

 

把mybatis的映射文件要引入到配置文件中

 

 注意:路径写完之后要检验,检验方法是按住CTRL键不放,用鼠标来点击路径,出现了超链接形式才算正确

 

8)需要建立一个junit包里面存放测试文件

 

 

 

 

package com.zhiyou100.zfx.junit;

import static org.junit.jupiter.api.Assertions.*;

import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import com.zhiyou100.zfx.bean.Users;

class TestMybatis {

    static SqlSession session = null;
    static String path="com.zhiyou100.zfx.mapper.UsersMapper.";

    @BeforeAll
    static void setUpBeforeClass() throws Exception {        
        //解析配置文件
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //获取SessionFactory对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        session = sessionFactory.openSession();
    }


    @Test
    void add() {
        int row = session.insert(path+"addUser", new Users("赵六", 30));
        System.out.println(row);
    }
    
    @Test
    void update() {
        int row = session.update(path+"updateUser", new Users(2, "赵四", 38));
        System.out.println(row);
    }
    
    @Test
    void delete() {
        session.delete(path+"deleteUser", 4);        
    }
    
    @Test
    void selectAll() {
        List<Users> list = session.selectList(path+"selectAll");
        System.out.println(list);
    }
    
    @Test
    void selectByAge() {
        Map<String,Integer> map = new HashMap<>();
        map.put("min", 10);
        map.put("max", 30);
        List<Users> list = session.selectList(path+"selectByAge",map);
        System.out.println(list);
    }

    @AfterAll
    static void tearDownAfterClass() throws Exception { 
        session.commit();//手动添加到数据库中
    }
}

 

9)加入日志信息

  1. 导入jar包 log4j-1.2.17.jar(第一步中已经介绍了)
  2. 在src中创建日志文件.log4j.properties
    log4j.properties,
    log4j.rootLogger=DEBUG, Console
    #Console
    log4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    log4j.logger.java.sql.ResultSet=INFO
    log4j.logger.org.apache=INFO
    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG

     

 

posted on 2019-08-31 11:04  飞升羊羽  阅读(143)  评论(0)    收藏  举报

导航