您的位置:首页 > 编程语言 > Java开发

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

2018-01-04 11:09 330 查看
      只要知道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;


     下面就开始动手建项目。  [b] 
[/b]


一、在项目中独立使用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

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息