MybatisStudy01-第一个mybatis

Posted q1748819552

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MybatisStudy01-第一个mybatis相关的知识,希望对你有一定的参考价值。

一:为什么要学习Mybatis?

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

 

第一:配置maven,mybatis必须配置相关jar包,最好在build中配置resources,来防止我们资源导出失败的问题

 <build>
    <resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

第二:从XML文件中构建SqlSessionFactory
1.每一个Mybatis都是以SqlSessionFactory实例为核心的,SqlSessionFactory可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则
可以则可以从 XML 配置文件构建出 SqlSessionFactory 实例。
2.MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
具体实现如下:
//引入mybatis的配置文件
String resource = "org/mybatis/example/mybatis-config.xml";
//使用Mybatis的工具类获得配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//使用SqlSessionFactoryBuilder建立配置
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


第三:关于mybatis-config.xml文件的基础配置(推荐使用mybatis-config这个名字
<?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>
<!--环境配置,连接的数据库,这里使用的是mysql-->
<environments default="mysql">
<!--环境变量-->
<environment id="mysql">
<!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
<dataSource type="POOLED">
<property name="driver" value="${dirver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>

<!--每一个Mapper(映射器),XML都需要在Mabatish核心配置文件中注册-->
<mappers>
<mapper resource="com/he/dao/UserMapper.xml"/>
</mappers>

</configuration>
    

 

第四:mybatis映射语句: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=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.he.dao.UserMapper">
  
    <!--调用接口中获取查询结果得方法。返回结果集,相当于JDBC里的resultSet-->
    <select id="getUserList" resultType="com.he.pojo.User">
    <!--select查询语句-->
    select * from mybatis.user
    </select>

    <!--id对应namespace中的方法名,resultType对应返回值类型,parameterType对应参数类名-->
    <select id="getUserById" resultType="com.he.pojo.User" parameterType="int">
        select * from mybatis.user where id= #{id};
    </select>

    <insert id="addUser" parameterType="com.he.pojo.User">
        insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>

    <update id="updateUser" parameterType="com.he.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd}  where id=#{id} ;
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id=#{id};
    </delete>
</mapper>

第五:编写接口和实体类

UserMapper接口

package com.he.dao;

import com.he.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {

    //模糊查询
    User getUserLike(String name);

    //查询全部用户
    List<User> getUserList();

    //根据ID查询用户
    User getUserById(int id);
    //野路子之万能map查询
    User getUserById2(Map<String,Object> map);

    //添加用户
    int addUser(User user);

    //修改用户
    int updateUser(User user);

    //删除用户
    int deleteUser(int id);
}

User实体类:

package com.he.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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", pwd=‘" + pwd + ‘\‘‘ +
                ‘}‘;
    }
}

第六:从 SqlSessionFactory 中获取 SqlSession

sqlSession中提供了数据库执行SQL的所有方法,可以通过SqlSession实例来执行映射的语句。

SqlSession session = sqlSessionFactory.openSession()
//sqlSession获取映射
UserMapper mapper = session.getMapper(UserMapper.class);
//执行一个通过id获取用户的方法
User user = mapper.getUserById(1)

 

第七:编写 mybatis工具类,首先要知道以下几点

1.SqlSessionFactoryBuilder这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。

2.SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。

3.每个线程都应该有它自己的 SqlSession 实例。

工具类如下:MybatisUtils

package com.he.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.InputStream;

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //使用mybatis第一步:获取sqlSession对象
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
    //SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }
}

 

第八:测试

  @Test
    public void getUserById(){
     //使用工具类调用SqlSession SqlSession sqlSession = MybatisUtils.getSqlSession();
     //获取映射,传入接口的.class文件,通过反射获取内容 UserMapper mapper = sqlSession.getMapper(UserMapper.class);
     //调用,接口中通过id查询用户的方法 User userById = mapper.getUserById(1);
     //输出 System.out.println(userById);
     //每次执行完需要关闭SqlSession sqlSession.close(); }  
 
总结:1.配置maven环境,导入工具类
   2.配置mybatis-config.xml
   3.创建接口,实体类
   4.编写mapper.xml文件
   5.测试
 
 

 

以上是关于MybatisStudy01-第一个mybatis的主要内容,如果未能解决你的问题,请参考以下文章

第一个Mybatis程序

mybatis学习笔记-01

mybatis学习笔记-01

阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-14 数据层HikariCP与MyBatis整合

mybatis 的第一个 HelloWorld 程序学习

mybatis复习