欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MybatisStudy01-第一个mybatis

程序员文章站 2022-11-22 09:31:01
一:为什么要学习Mybatis? MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录 ......

一:为什么要学习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.测试