自己动手建项目,一步步理解mybatis

      只要知道mybatis是操作数据库的,并且比JDBC轻量,就可以看下面的博客了。


      先不去探究mybatis的技术原理那些,先从新建项目入手,分别熟悉mybatis在独立情况下与mapper持久层与spring整合与maven项目,这四种情况下的文件配置和使用方法。大家可以选择自己要看的部分,跳过其他的即可。

      我在博客里给出非常详细的、可执行的步骤,大家可以按照步骤,在工具Intellij IDEA上一步步实现,这样可以加深理解。我自己也找过很多类似的博客,有的只是给出了步骤,而没有代码;有的归纳的不清晰,比如mybatis和持久层mapper这一块,有的博客是直接用mapper接口的形式来操作数据库;有的却是直接用的session操作数据库。

      所以,我这里给出的代码和步骤都是可实现的、完整的,就不会出现博客看到一半,代码不全的情况了(ps:我经常遇到这种情况)。


      在进行下面的项目之前,首先当然要创建数据库和表结构,这一步其实相当重要,尤其是以后开发比较大型的Web项目时,表结构的设计关系到后面项目开发的成功与否。

     

      <创建数据库、建表>(ps:sql语句大小写大家保持统一即可)

CREATE DATABASE how2java;
USE how2java;
CREATE TABLE category_ (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(32) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

     下面就开始动手建项目。   

一、在项目中独立使用mybatis


  步骤1:在idea新建一个java工程,完成如下:
         如图,新建的工程什么也没有,没关系,我们从头搞这个mybatis。
  步骤2:导入mybatis的jar包。
     执行:File->Project Structure...或者click 右上角的图标亦可。在弹出的界面选择Modules->Dependencies,单击右上角的“ +”,选择JARs or directories,然后导入你下载好的jar包。
这里的包只有2个:
     mybatis-3.4.2.jar ; mysql-connector-java-5.0.8-bin.jar   
这个jar包的版本选你下载的就行,不影响。我还不知道在CSDN这怎么上传这个包,所以,大家去网上下载吧,我下次把代码和项目挂到github上,大家直接去下就行。

  步骤3:新建java bean类,这里是Category类,映射数据库的表category_;
  
  如图所示,Category类为bean类,在com/how2java/pojo下新建映射文件Category.xml;在源目录src
下新建mybatis的主体配置文件mybatis-config.xml文件,目录结构如图所示。
 <Category类的代码>:
package com.how2java.pojo;

public class Category {
    private int id;
    private String name;
    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;
    }

}
 <Category.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">

<mapper namespace="com.how2java.pojo">
    <select id="listCategory" resultType="Category">
        select * from   category_
    </select>

    <select id="list" resultType="Category">
        select * from   category_         order by id desc
        <if test="start!=null and count!=null">
            limit #{start},#{count}
        </if>
    </select>

    <select id="total" resultType="int">
        select count(*) from category_
    </select>

    <insert id="add"  keyProperty="id"  useGeneratedKeys="true" parameterType="Category" >
        insert into category_ ( name ) values (#{name})
    </insert>

    <delete id="delete">
        delete from category_ where id= #{id}
    </delete>

    <select id="get" resultType="Category">
        select * from category_  where id= #{id}
    </select>

    <update id="update" parameterType="Category" >
        update category_ set name=#{name} where id=#{id}
    </update>
</mapper>
 <mybatis-config.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>
    <typeAliases>
        <package name="com.how2java.pojo"/>
    </typeAliases>
    <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:3306/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/how2java/pojo/Category.xml"/>
    </mappers>
</configuration>
  大家只需将mybatis-config.xml中的数据库的密码“admin”改为自己的就可以运行了。
  <测试代码>:
package com.how2java;

//import com.how2java.mapper.CategoryMapper;
//import com.Category;
import com.how2java.pojo.Category;
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;
import java.util.List;

public class TestMybatis {

    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();

        //Category c=new Category();
        List<Category> cs =session.selectList("list");
        for(Category cc:cs){
            System.out.println(cc.getName());
        }

    }
}
 运行即可,控制台就会显示你数据库中的数据了。
 我们注意到,在TestMybatis里,是用的session.selectList()方法,这是session调用方法,有的博客就是这么用的,还有一种方法,就是用持久层,看下面的第二节。

二、mybatis结合持久层mapper操作数据库


 这种方法目前更为常用,更解耦,方便,安全等等,我们还是直接在项目中来看。
 在第一节的基础上,继续修改即可。
 
  如图,要使用持久层mapper的映射,我们只需要新建一个mapper层的接口即可。目录结构如图所示,将Category.xml改为CategoryMapper.xml。
  Category类不用改;新增的接口CategoryMapper代码如下:
package com.how2java.mapper;

import com.how2java.pojo.Category;

import java.util.List;

public interface CategoryMapper {
    //对于读取结果集
    //定义方法 listCategory同Category.xml里面的对应

    //查询所有的用户,返回类型为集合
     List<Category> listCategory();
     List<Category> list();

     //总记录数
     int total();

     //添加
     void add(Category category);

     //删除
     void delete(int id);

     //查询
     Category get(int id);

     //更新
     void update(Category category);
}
  CategoryMapper.xml文件和上一节的Category.xml基本一样,只要改一个地方:将Category.xml里的命名空间改为:(就是CategoryMapper的位置,实现映射)
<mapper namespace="com.how2java.mapper.CategoryMapper">
 同样的,mybatis-config.xml也只需要改一个地方:将之前的com/how2java/pojo/Category.xml改为如下即可:
<mappers>
    <mapper resource="com/how2java/CategoryMapper.xml"/>
</mappers>
 测试代码也差不多:
package com.how2java;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import com.how2java.mapper.CategoryMapper;
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 com.how2java.pojo.Category;

public class TestMybatis {

    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();

        //Category c=new Category();
        //List<Category>cs =session.selectList("listCategory",c);
        CategoryMapper mapper=session.getMapper(CategoryMapper.class);
        //List<Category> c= mapper.list();
        Category c=new Category();
        c.setId(12);c.setName("category124");
        mapper.update(c);
        //System.out.println(c.getName());
        /*
        for(Category cc:c){
            System.out.println(cc.getName());
        }
        */
    }
}
 只是在获得session之后,CategoryMapper mapper=session.getMapper(CategoryMapper.class);得到代理,然后mapper就可以调用前面接口里面的方法体,比如这里的update(Category category),传入参数就行了,同意能实现对数据库的CRUD等操作。

 鉴于篇幅有点小长,我把后面2种整合情况单独写成一个博客,如果大家有兴趣的话,可以继续去看一下,谢谢。
 
 参考链接:http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=12885



  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值